インターネット上では不思議なことに、ポート番号が0のパケットが届くことがあります。
特に送信元ポート番号が0のUDPパケットは、ミドルウェアで処理をしいざ送り返そうとした時にエラー担ったりします。
そこで、ポート番号0のUDPパケットを受け取ったときの挙動を確認するために、まずはそのようなパケットを送る方法を探さなければありません。
(試すとわかりますが、ハイレベルなAPIだと送信元ポートに0を指定できなかったりします...)
constructing ip/udp packets in go
ちょうどそのようなツールをGoで書かれていたのでコレを使います。
使いかた
こんな感じで起動すると、stdin から受け取った文字列を指定されたポートにデータ送信します。
$ sudo go run rawudp.go -udpdst "送信先ポート" -udpsrc "送信元ポート"
これをncで繋いでやると、受け取ったパケットを、送信元ポート0でforwardすることができます
$ nc -u -l -p 8080 | sudo go run ./rawudp.go -udpsrc 0 -udpdst 53
ただ rawudp.go がstdinで処理する都合 \n
ごとに処理するので、真面目にやるならrawudp.goを改造して素直にUDPリッスンしてProxyさせるのが良さそう