MasaのITC Life

夢は起業家!全てにおいて凡人だけど頑張ることだけはいっちょ前!

プログラミング

【C言語】nslookupの簡易実装してみた!IPv6の取得方法(gethostbyname2)

投稿日:2020年1月29日 更新日:



nslookupを簡易実装しました。

入力されたドメイン名から

IPv4とIPv6を取得します。



まずは完成形をnslookupで

叩いてみてみます。



nslookup ドメイン名

割り振られたIPアドレスを

表示させることが出来ます。

DNSしているだけです。



これとC++で同じことを

やってみましょう!!




今回必要な関数は、

gethostbyname2()
関数です。

これはホスト名から

ホスト情報を取得する関数です。


gethostbyname()関数も存在しますが、

それはIPv6に非対応なので、

gethostbyname2()を使いましょう。




第1引数に文字列が入ります。

第2引数にAF_INETか

AF_INET6が入ります。

要はIPv4かIPV6かです。




gethostbyname2関数は

ホスト名からホスト情報を

取得してくれます。




その際にhostent構造体という

入れ物が必要になります。



この構造体のメンバである

h_addr_listにアドレスが入っています。




最初のアドレスを示す要素は、

h_addrでアクセスできると

定義されているので、

ソースではh_addrでアクセスしています。




この状態のアドレスは、

バイナリなので私たちが

よく見かける文字列表記に直します。




その際にinet_ntop関数を使用します。



ここで第3引数である

char *dstには、先ほどの

hostent構造体のh_addrを

指定します。



しかし一般的に、

なんやかんやと変換する機会が多い

ネットワークプログラミングでは、

in_addr構造体に変換します。

※変換しなくても正しく動作します。




IPv4とIPv6とでは、

使用する関数や構造体が

異なるので気を付けて下さい。




このソースを実行すると

以下の結果が得られます。



最後まで読んでいただきありがとうございました。

-プログラミング

Copyright© MasaのITC Life , 2023 All Rights Reserved Powered by STINGER.