#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
#include <string.h>
#include <windows.h>

int viewHostData(const char *name) {
  const char *ipaddr;
  struct hostent *hent;
  struct in_addr in;
  int r = 0;

  char my_name[256] = {0};

  // ホスト名 .. 普通はコンピュータ名が取得できる
  if (! name) {
    if ( gethostname(my_name, sizeof(my_name)) == 0 )
      name = my_name;
    else {
      perror("gethostname()");
      return 0; // 失敗
    }
  }

  if( (hent = gethostbyname(name)) == 0 ) {
    perror("gethostbyname()");
    return 0; // 失敗
  }

  memcpy(&in.S_un.S_addr, hent->h_addr_list[0], 4);
  ipaddr = inet_ntoa(in);

  printf("host name  : %s\n", name );
  printf("ip address : %s\n", ipaddr );

  // FQDN を得る
  if ( (hent = gethostbyaddr(ipaddr, strlen(ipaddr), AF_INET)) == 0 ) {
    perror("gethostbyname()");
    printf("lasterror = %d\n", ::GetLastError());
    return 0; // 失敗
  }

  printf("FQDN       : %s\n", hent->h_name );

  return 1;
}

int main(int argc, char *argv[]) {
  WSAData _wsa_data;
  int r = ::WSAStartup( MAKEWORD(2,0), &_wsa_data );
  if (r) {
    perror("init error");
    return 0;
  }

  viewHostData(NULL);

  ::WSACleanup();
  return 0;
}

