Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. /* ヘッダファイルのインクルード */
  2. #include <stdio.h> /* 標準入出力 */
  3. #include <sys/socket.h> /* ソケット */
  4. #include <sys/types.h> /* 派生型 */
  5. #include <arpa/inet.h> /* IPアドレス変換 */
  6. #include <netdb.h> /* ホスト名変換 */
  7.  
  8. /* main関数の定義 */
  9. int main(void){
  10.  
  11. /* 変数の宣言 */
  12. char hostname[256]; /* ホスト名hostname. */
  13. struct hostent *host; /* ホスト情報を格納するhostent構造体へのポインタhost. */
  14. struct in_addr addr; /* in_addr構造体addr */
  15. char *host_str; /* 最終的に元に戻したホスト名文字列. */
  16.  
  17. /* ホスト名の入力 */
  18. printf("hostname: "); /* hostnameの入力フォーム */
  19. scanf("%s", hostname); /* 入力されたホスト名をhostnameに格納. */
  20.  
  21. /* ホスト情報の取得 */
  22. host = gethostbyname(hostname); /* gethostbynameで指定したホスト名のホスト情報を取得. */
  23. if (host == NULL){ /* hostがNULLなら. */
  24.  
  25. /* エラー */
  26. printf("gethostbyname error!\n"); /* エラーメッセージ出力. */
  27. return -1; /* -1を返して終了. */
  28.  
  29. }
  30.  
  31. /* ホスト名から導き出されたIPアドレス情報は, h_addr_list[0]に文字列として格納されているが, 実際は以下の用に格納されている. */
  32. printf("host->h_addr_list[0][0] = %02x, host->h_addr_list[0][1] = %02x, host->h_addr_list[0][3] = %02x, host->h_addr_list[0][3] = %02x\n", host->h_addr_list[0][0], host->h_addr_list[0][1], host->h_addr_list[0][2], host->h_addr_list[0][3]); /* これはin_addr_t(つまりuint_32t)と同じ形式. なのでin_addrのs_addrに格納して使うことができる. */
  33.  
  34. /* in_addr_tの変数に格納. */
  35. addr.s_addr = *(in_addr_t *)host->h_addr_list[0]; /* h_addr_list[0]はchar *なので, in_addr *にキャストし, さらに*で参照先の値をaddr.s_addrに格納する. */
  36.  
  37. /* addr.s_addrを出力. */
  38. printf("addr.s_addr = %08x\n", addr.s_addr); /* addr.s_addrを16進整数として出力. */
  39.  
  40. /* inet_ntoaでまたホスト名文字列に戻す. */
  41. host_str = inet_ntoa(addr); /* inet_ntoaでaddrを変換. */
  42.  
  43. /* host_strの出力. */
  44. printf("host_str = %s\n", host_str); /* printfでhost_strを出力. */
  45.  
  46. /* プログラムの終了 */
  47. return 0;
  48.  
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement