如何得到多穴主机的多个IP地址

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

vchelp@163.net

在网络中的多穴主机可能同时拥有多个IP地址,特别是在使用了动态主机地址分配时也很难知道主机上的IP地址是什么。下面我利用一段C程序来列举出主机上的所有IP地址。下面是具体代码:

void print_all_ip(void)

{

char szHostName[128];

const char* pszAddr;

struct hostent * pHost;

int i,j;

if( gethostname(szHostName, 128) == 0 )

{

pHost = gethostbyname(szHostName);

for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )

{/*对每一个IP地址进行处理*/

pszAddr=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);

printf("%s\n",pszAddr);/*打印*/

}

}

}

介绍Socket编程的文章已经很多,所以接下来只对相关内容进行简单的讲解, 函数gethostname将回返回给定主机名所对应的信息,在WinSock中struct hostent的定义如下:

struct hostent

{

char FAR * h_name;

char FAR * FAR * h_aliases;

short h_addrtype;

short h_length;

char FAR * FAR * h_addr_list;

};

对于结构中的内容和其中对取得多个IP地址我们有用的是最后一个分量h_add_list,它是一个列表,通过它我们可以得到所有的IP地址。 下面举出一些具体的应用实例,(1)在一个主机同时拥有IP地址,并且同时属于两个网段时,可以利用不同的IP地址产生网络半关联,并向不同的网段产生连接请求。(2)在LAN山的主机利用拨号上网,可以得到由ISP动态分配的IP地址,这一IP地址可以和Internet上的其它主机连接。此外上面的代码可以直接在UNIX下使用而不局限于WinSock。 如果有朋友对次有兴趣可以给我发EMail(vchelp@163.net),或者在我的主页(http://vchelp.163.net)给我留言。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航