Skip to content

pasora/ping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 

Repository files navigation

ping.c をつくる

  • ネットワークプログラミングの課題に化けました

目指すもの

  • 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 らしくする

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages