C#.NET 如何获得本机IP地址

C#.NET 如何获得本机IP地址,第1张

有几种方法获取本机局域网地址和网络地址。

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的使用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9538054.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存