获取本机IP信息

来源:互联网 发布:php视频教程全集 编辑:程序博客网 时间:2024/05/19 08:41

不能直接获取本机IP信息确实挺纠结的,感觉微软应该给出这样的API接口

C++中的实现:

一般实现都需要先通过gethostname()函数获取本机的名字,然后再调用gethostbyname()函数来获取主机的信息。

gethostname()函数的说明如下:

int gethostname(char FAR *name, int namelen);

其中,name是主机的名字,是输出参数

gethostbyname函数的说明如下:

struct hostent FAR *gethostbyname(const char FAR *name);

返回结构体具体内容为:

struct hostent {  char FAR *       h_name;  char FAR * FAR * h_aliases;  short            h_addrtype;  short            h_length;  char FAR * FAR * h_addr_list;};

其中,h_addr_list中以数组形式存放主机的IP信息(以网络字节序保存)。一般而言,数组中第一个(即下标为0)为外网IP,第二个为内网IP

然后再调用inet_ntoa()函数转化为点分十进制形式。

char FAR * inet_ntoa(struct   in_addr in);

代码实现如下:

//获取本机的IP信息,pIP为传出参数char * CClient::getHostIP(){char hostName[32]={0};if(gethostname(hostName, 32)==SOCKET_ERROR)return NULL;hostent * pHost=gethostbyname(hostName);if(pHost==NULL)return NULL;return inet_ntoa(*(in_addr *)pHost->h_addr_list[0]);}

注意:gethostname()函数和gethostbyname()函数都包含在Winsock2.h头文件中,同时增加项目连接:Ws2_32.lib

C++中的实现:

需要用到的类:

Dns类:提供简单的域名解析功能;

主要用到的两个方法:

(1)GetHostName()方法    用来获取主机名

public static string GetHostName()

(2)GetHostEntry()方法     将主机名或 IP 地址解析为 IPHostEntry 实例

public static IPHostEntry GetHostEntry(string hostNameOrAddress)

IPHostEntry类:为 Internet 主机地址信息提供容器类;

主要用到属性AddressList,该属性可以用于获取或设置与主机关联的 IP 地址列表

public IPAddress[] AddressList { get; set; }

IPAddress类可以使用方法ToString()转为字符串,也可以使用方法Parse()将字符串转为IPAddress类型。

所在的命名空间:using System.Net;

实现步骤与C++中相似,都是先获取主机名,然后再通过主机名来获取主机IP

代码实现如下:

        static void Main(string[] args)        {            //得到主机名            string HostName = Dns.GetHostName();            //获得与主机关联的 IP 地址列表            IPHostEntry IpEntry = Dns.GetHostEntry(HostName);            Console.WriteLine("Host Name is {0}", HostName);            for (int i = 0; i < IpEntry.AddressList.Length; i++)            {                string strIPAddr = IpEntry.AddressList[i].ToString();                Console.WriteLine("Host IP is {0}", strIPAddr);            }            Console.ReadLine();        }

原创粉丝点击