『サイバーセキュリティプログラミング第2版』の読書メモを少しずつ記していきたい。
3.1 UDP を用いたホスト発見ツール
ホスト発見に使用する仕組みについて。

UDPパケットを送信先ホストの宛先ポートXに送信した際に、送信先でポートXが閉じていると ICMP パケットを送信してくる。
このとき ICMP ヘッダに設定されるコードとタイプの値は以下のように定義され、送信元に対して UDP のポートXが閉じていることを伝えてくれる。
CODE=3: Destination unreachable (宛先到達不能)
TYPE=3: Port unreachable (ポート到達不能)
もしも送信先ホストのポートXで UDP を受け付けるサービスが動作していると上記の ICMP パケットは送信されない。
…という仕組みを逆手にとり、送信先ホストの UDP パケットを送信して上記のようなコード・タイプの ICMP パケットが返ってくるかどうかを観察すれば、送信先が存在しているかを判定することができる。これがこの章で解説される「ホスト発見ツール」のポイントである。
ただし、ここで忘れてはならないのはサービスで使われないようなポートを選んでやることである。ウェルノウンポートのようなサービスでよく使われるポート番号を使ってしまうと送信先ホストが存在するのかどうか判定するのが困難となる。
サンプルコードでは "65212" という通常はシステムで動的かつ一時的にしか使用されないポート(エフェメラルポート)を使用している。(P62 の udp_sender 関数を参照のこと)