2014/10/13
お題:pingコマンド
本の虫: Pingプログラムの話 を読んで、ずっと前に『どう書く.org』というプログラミングのサイトに出そうと思ってたんだけど忙しさに紛れて出しそびれたお題を思い出した。興味があればどうぞ。
簡単なping(1)コマンドを実装してください。スタンドアロンプログラム、単なる関数どちらでもOKです。仕様は次のとおりとします。
- 与えられたアドレスに対し、ICMP Echo Requestパケットをひとつ送出。 ident, seq, 及びペイロードに載せるデータは任意とする。
- ident, seq, データが一致するICMP Echo Replyが返って来たら、 送出から受け取りにかかった時間と返事したホストのアドレス (送ったアドレスと異なるアドレスから返事が来ることがあるので) を表示する、もしくは戻り値にする。
- 5秒以内に応答が無ければその旨表示する、もしくは戻り値にする。
リトライはしなくて良いです。IPv6/ICMPv6への対応はお好みで。また、アドレスの与え方は言語の都合の良い方法で構いません。LLならホスト名やドット記法からでも楽でしょうが、Cならin_addr_tを受けとってもOKです。
低レベル(raw)ソケット、バイナリパケット、タイムアウトの処理が色んな言語でどう書けるのかが興味の中心です。(ライブラリでさくっと解決っていう回答もありだと思います。pingを別プロセスで起動っていうのはちょっとつまらないと思うけれど。)
Tag: Programming
Post a comment