当前位置:网络资源中心文章中心新闻资讯网上冲浪 → 文章内容

得到主机的多个IP地址

减小字体 增大字体 作者:过路人  来源:随缘站长网  发布时间:2008-3-27 20:17:53
 在网络中的主机可能同时拥有多个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。 闻怡洋