一个看似容易其实麻烦的难题(网络方面)
QQ里头是怎么先区分局域网和互联网上的IP的?我们所用的GETHOSTBYNAME(0)等都是如果装有网佧就先侦测出网佧分配的IP,如果没有网佧才能识别出上网时的IP,这个问题怎么解决啊,
呵呵,帮忙问问撒:0
当然我门可以用下面的方法:
先用gethostname(0)
gethostbyname返回一个HOSTENT结构指针。
再来看hostent结构的定义:
struct hostent {
char FAR * h_name;
char FAR * FAR * h_aliases;
short h_addrtype;
short h_length;
char FAR * FAR * h_addr_list; //就是这里了
};
Members
h_name
Official name of the host (PC). If using the DNS or similar resolution system, it is the Fully Qualified Domain Name (FQDN) that caused the server to return a reply. If using a local hosts file, it is the first entry after the IP address.
h_aliases
Null-terminated array of alternate names.
h_addrtype
Type of address being returned.
h_length
Length of each address, in bytes.
h_addr_list
Null-terminated list of addresses for the host. Addresses are returned in network byte order. The macro h_addr is defined to be h_addr_list[0] for compatibility with older software.
呵呵,看到这里应该就差不多可以搞掂了。
h_addr_list里面存在有所有本机的IP。把它一一枚举出来就OK了。
但是问题是怎么枚举出来呢,h_addr_list[0],h_addr_list[1],h_addr_list[2]这样吗?我试了,死机,不行。。。。。。。。。。。。。
怎么能够分得清哪些是公网IP,哪些是内网IP呢????????!!!!!!!!!!!