seclan のほえほえルーム

| |

・自ホスト名と IP アドレスを得る (1999/08/15 [])
 ネットワークにつないだマシンはそれぞれの IP アドレスを持っています。そしてたいていはマシン名も持っています。GUI から見るには、WinIpCfg.exe などを実行すれば、見ることができますが、プログラムからそれを調べるにはどうすればよいのでしょうか。そのためには、WinSock に含まれる gethostbyname を使用します。gethostbyname を実行することでホスト名や IP アドレスなどをすべて取得することができます。ただし gethostbyname は引数にホスト名が必要です。そこで取り合えずのホスト名を得るため gethostname を使用します。サンプルプログラムを以下に示します。

自ホスト名とその IP アドレスの取得

#define STRICT
#include <windows.h>
#include <winsock.h>
#include <stdio.h>

main()
{
  char name[256];
  WSADATA wsad;
  struct hostent *hs;
  struct in_addr  addr;
  int i;

  //WinSock の初期化
  if(WSAStartup(0x0101, &wsad)) return 1;

  //ホスト名を得る(複数ある場合にはそのうちの一つ)
  gethostname(name,sizeof(name));
  //全ホスト名,IP アドレスを得る
  hs = gethostbyname(name);

  //情報の表示
  //・ホスト名の表示
  printf("host name = %s\n", hs->h_name);
  //・ホストの別名の表示
  if(hs->h_aliases) for(i = 0; hs->h_aliases[i]; i++){
    printf(" %s\n", hs->h_aliases[i]);
  }
  //・全 IP アドレスの表示
  printf("ip address =");
  if(hs->h_addr_list) for(i = 0; hs->h_addr_list[i]; i++){
    addr.S_un.S_addr = *(u_long*)hs->h_addr_list[i];
    printf(" %s\n", inet_ntoa(addr));
  }

  //WinSock の後始末
  WSACleanup();
  return 0;
}



by seclan

関連


| |

 

配信

5.86 msec