
有几种方法获取本机局域网地址和网络地址。
1、 获取本机局域网地址:
使用IPHostEntry
static string
GetLocalIp()
{
string
hostname =
DnsGetHostName();
IPHostEntry localhost =
DnsGetHostByName(hostname);
IPAddress localaddr =
localhostAddressList[0];
return localaddrToString();
}
2、获取本机网络ip地址:
通过向网站>---------------在StdAfxh中加入---------------------
#include <winsock2h> //套接字编程需要的头文件
#pragma comment(lib,"ws2_32lib") //套接字编程需要的库文件
---------------在要用的地方---------------------
WSADATA wsadata;
if(0 != WSAStartup(MAKEWORD(2, 2), &wsadata)) //初始化
{
AfxMessageBox("初始化网络环境失败!");
return TRUE;
}
char szHostName[MAX_PATH + 1];
gethostname(szHostName, MAX_PATH); //得到计算机名
hostent p = gethostbyname(szHostName); //从计算机名得到主机信息
if(p == NULL)
{
AfxMessageBox("得到本机网络信息失败!");
return TRUE;
}
m_strName = szHostName; //保存主机名
int nCount = 0; //保存主机地址
char pIP = inet_ntoa((in_addr )p->h_addr_list[0]);//将32位IP转化为字符串IP
m_strAddr = pIP; //保存主机IP地址
UpdateData(FALSE); //显示各个数据
WSACleanup(); //释放Winsock API
QT:
QString Widget::getIP() //获取ip地址{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(addressprotocol() == QAbstractSocket::IPv4Protocol)
//我们使用IPv4地址
return addresstoString();
}
return 0;
}
或者
QString localHostName = QHostInfo::localHostName();
qDebug() <<"localHostName:"<<localHostName;
QHostInfo info = QHostInfo::fromName(localHostName);
foreach(QHostAddress address,infoaddresses())
{
if(addressprotocol() == QAbstractSocket::IPv4Protocol)
qDebug() <<"IPV4 Address: "<< addresstoString();
}
另外,如果是windows系统:
可以参考:>
((CIPAddressCtrl)GetDlgItem(IDC_SERVERIP))->GetAddress(field0, field1, field2, field3);
CString serverIp;
serverIpFormat(_T("%d%d%d%d"), field0, field1, field2, field3);
------------------------------------------------------------------------------------------
GetDlgItem返回的是窗口类的指针,必须将GetDlgItem返回的类型从CWnd强制转换成正确的控件类型指针。由于IDC_SERVERIP代表的是一个CIpAddressCtrl控件,因此GetDlgItem返回的CWnd应转换成CIpAddressCtrl指针,你将GetDlgItem返回的CWnd指针赋给了CIPAddressCtrl变量,这是个严重错误,首先怎么赋值,都应该是要赋给指针变量,而不是控件实例变量,第二点是需要考虑C++的基类和派生类的关系,必要时需要做强制转换。GetDlgItem返回的是个基类指针,不能直接赋给派生类指针变量,需要进行强制转换,反之则不需要进行强制转换!(你没仔细看我给你的代码)
楼主C++知识需要边用边巩固,另外就是需要学会使用MSDN。初级问题,基础问题等发帖提问不是好办法!
1、打开对应端口的防火墙。
2、修改applicationhostconfig文件,<binding protocol=">
局域网管理中经常遇到已知某个MAC地址,要查询其IP地址的情况,有如下几种方法:
方法一:用ARP -A 查询
这种方法只能查到与本机通讯过(20分钟内)的主机MAC地址和IP地址。可在远程主机所属网段中的任一台主机上运行此命令,这样可查出IP欺骗类病毒的主机。
方法二:用专用软件查,如nbtscan
命令方式是:nbtscan -r 网络号/掩码位,这种方法可查询某网段的所有IP与MAC对应关系,但装有防火墙的主机则禁止查询。
方法三:
如果所连交换机有网管功能,可用ARP SHOW 命令显示交换机的arp缓存信息,这种方式基本可查询所有的IP 与MAC地址,但只有网管才有这个权限。
方法四:
用sniffer类的嗅探软件抓包分析,packet中一般都含用IP地址与MAC地址。
方法五:
用solarwinds类软件中的MAC ADDRESS DISCOVERY查询,但这个工具好象不能跨网段查询。
一、项目背景
清洗的结果中有两张比较大的表:
1)ip域名关系首次发现统计表,日增约05亿;
2)ip域名关系历史变化轨迹统计表,日增约14亿;
前端查询方式包括以下两种方式:
1)查询某个ip的信息,例如:select from xxx where ip='xxxx'
2)查询某个域名的信息,例如: select from xxx where dn = 'xxx'
二、clickhouse
优势:
1)数据压缩率高、写入性能高;
2)主键最左侧列出现在查询条件中时查询耗时在1秒内。(实测数据44亿,公司wiki其他项目组测试数据在百亿级别)
存在问题:
1)只有主键中的第二列出现在查询条件中时,查询速度很差,实测数据量在十亿级别时耗时在几十秒甚至查不出。
官网中也提到过该问题,见下图:
2)不能保证数据全局唯一,clickhouse的主键并不能约束数据唯一性,即使使用ReplacedMergeTree,也只能保证分区内数据唯一。
3)跳数索引作用不大,实测过set、ngrambf_v1、tokenbf_v1。(后两者均为布隆过滤器)
三、impala+kudu
由于clickhouse存在类似主键“最左原则”问题,导致无法同时满足dns反查的应用场景,变通的解决方案是同时存储两份数据,一份使用ip作为主键,另一份使用域名作为主键,前端不同查询场景分别转换为对这两份数据的查询,但这种解决方案存在数据不一致的隐患,一旦出现两份数据不一致时对数据的比对、修复等都是件麻烦的事情,此外还增加了数据同步任务维护的负担。
思考是否存在一种存储方式能够同时满足两个主键的索引(或分区)。
kudu可以支持同时按hash和范围分区,例如:
PARTITION BY HASH (id) PARTITIONS 4,
RANGE (sku)
(
PARTITION VALUES < ‘g’,
PARTITION ‘g’ <= VALUES < ‘o’,
PARTITION ‘o’ <= VALUES < ‘u’,
PARTITION ‘u’ <= VALUES
)
这样在原理上是能够支持分别按单列作为查询条件的应用场景。
四、clickhouse与kudu对比
clickhouse impala+kudu
服务器情况 单机128G 24核 4台 128G 24核
集群支持情况 支持,但对zk的依赖过重 支持,不依赖zk,内部使用raft算法;可在CDH中管理impala和kudu
数据一致性支持情况 不能保证数据一致性,即使使用ReplacedMergeTree,也只能保证分区内数据唯一 支持upsert *** 作,能够保证唯一性
占用磁盘空间 44亿69g 31亿163G
写入速度 10万/s 23万/s
查询速度 10亿数据量时:只有主键中最左侧列作为查询条件时耗时在1秒内;当主键中最左侧列不在查询条件中时耗时在几十秒 29亿时分别将ip和域名作为条件查询耗时均在1秒内;63亿时ip作为条件(range分区)时,耗时大部分在1~2秒,部分查询时间在几十秒(原因待查)域名作为条(hash分区),耗时基本在1秒内
并发 不支持大并发查询 不支持大并发查询
kudu查询性能记录
1、集群描述
3个master 3个tabletserver
128G内存(设置kudu和impala可用内存上限均为80G) 24核
2、不同条件下的查询时间记录
3、数据量为28亿时的查询记录
总数:
将dn作为条件查询:
将ip作为条件查询:
4、数据量为63亿时的查询记录
总数:
将dn作为条件查询:
将ip作为条件查询:
在某些时候查询速度一般(第一次查询慢,再次查会快),
5、数据量为110亿时的查询记录
总数:
将dn作为条件查询:
将ip作为条件查询:
附录: 一些其他对比
以上就是关于C#.NET 如何获得本机IP地址全部的内容,包括:C#.NET 如何获得本机IP地址、C/C++ 如果获取本机IP和修改IP,代码尽量要简介,本人菜鸟、vs里的IP control的使用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)