- ネットワークプログラミングの課題に化けました
terminal.app
で動けばいいsudo ./ping www.google.com
とかすると使える- IPv4 と IPv6 のデュアルスタック対応
- ユーザから受け取ったアドレスを
getaddrinfo
で調べる - ホストが IPv6 に対応していたらその IPv6 アドレス宛に ICMPv6 エコーリクエストを送信
(IPv4 のみに対応していたら ICMP エコーリクエストを送信) - エコーリプライを受信
IPv4 のみ対応しているサイト (例:www.yahoo.co.jp) を渡すと ICMP メッセージを生成し送信するが、
IPv6 にも対応しているサイト (例:www.google.com) を渡すと IPv6 と認識してから ICMPv6 メッセージの生成・送信まで行ってない
実際のところ ping というよりは ICMP メッセージを送ったら帰ってきたという感じ
- ICMP(IPv4) と ICMPv6 の違い
- ICMP の場合 ICMP メッセージを生成してソケットに流せば送れる
- ICMPv6 は ICMPv6 メッセージのチェックサムを生成する際に自 IPv6 アドレスを把握する必要がある
- 送信元の IPv6 アドレスをソースコード内で把握しなければならない
- チェックサムを計算するときは IPv6 仮想ヘッダを用いる
getaddrinfo
はアドレス解決までやってくれるので便利
- IPv6 で動くようにする
- 送信元の IPv6 アドレスを自動取得できるようにする
- もうちょい
ping
らしくする