![]() |
【转帖】获取主机名和ip地址
使用gethostname和gethostbyname这两个winsock库函数实现获得主机名和IP地址,其中Gethostname获得主机名,Gethostbyname获得主机地址。
这两个函数的原型为: int gethostname ( char FAR * name, int namelen ); 获得主机名 char FAR * name 指针变量,存放主机名的数组 int namelen 字符串长度 struct hostent FAR * gethostbyname ( const char FAR * name ); 通过主机名获取主机地址,此函数返回hostent结构体变量 const char FAR * name 就是主机名 hostent结构体 struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; }; 其中, char *h_name 表示的是主机的规范名。例如 www.google.com 的规范名其实是 www.l.google.com 。 char **h_aliases 表示的是主机的别名。 www.google.com 就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。 int h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6) int h_length 表示的是主机ip地址的长度 int **h_addr_lisst 表示的是主机的ip地址,注意,这个是以网络字节序存储的。 下面给出一个例子: void CNetWorkDlg::GetIP() { char szhostname[128]; CString str; //获得主机名 if( gethostname(szhostname, 128) == 0 ) { // 获得主机ip地址 struct hostent * phost; int i; phost = gethostbyname(szhostname); m_hostname=szhostname; i=0; int j; int h_length=4; for( j = 0; j<h_length; j++ ) { CString addr; if( j > 0 ) str += "."; addr.Format("%u", (unsigned int)((unsigned char*)phost->h_addr_list[i])[j]); str += addr; } } m_ipaddress=str; UpdateData(FALSE); } |
所有的时间均为北京时间。 现在的时间是 05:43 AM. |