実際のところ
受け手側ファイヤウォール
まず、受信側のファイヤウォール設定を。
普段SSH用に22番しか開けてませんが、今回は1111をUDP用に開けてみます。
$ sudo ufw allow 1111 $ sudo ufw status Status: active To Action From -- ------ ---- 22 LIMIT Anywhere 1111 ALLOW Anywhere 22 (v6) LIMIT Anywhere (v6) 1111 (v6) ALLOW Anywhere (v6)
受け手スクリプト
受け手スクリプトはおなじみsocatで。
ポートは1111にしましたが、ブッキングしない範囲でお好みで。
hex値を吐き出すので、hexdumpを繋いでみます
$ socat UDP-LISTEN:1111 STDOUT | hexdump
送信スクリプト
送信側はpythonスクリプトでやってみます。
受信側と送信側のIPとポートを予め抑えておきます。
私は面倒なのでやりませんでしたが、別ファイルにして読み込めば可搬性も上がるでしょう。
from socket import * ## UDP送信クラス class udpsend(): def __init__(self): SrcIP = SRCIP # 送信元IP SrcPort = SRCPORT # 送信元ポート番号 self.SrcAddr = (SrcIP,SrcPort) # アドレスをtupleに格納 DstIP = DISTIP # 宛先IP DstPort = DISTPORT # 宛先ポート番号 self.DstAddr = (DstIP,DstPort) # アドレスをtupleに格納 self.udpClntSock = socket(AF_INET, SOCK_DGRAM) # ソケット作成 self.udpClntSock.bind(self.SrcAddr) # 送信元アドレスでバインド def send(self): data = b"\x80\x00\x02" self.udpClntSock.sendto(data, self.DstAddr) # 宛先アドレスに送信 udp = udpsend() # クラス呼び出し udp.send() # 関数実行
結果
受け取り側は実行するとこんな感じ
$ socat UDP-LISTEN:1111 STDOUT | hexdump 0000000 0080 0002 0064 6400 0000 0101 1c82 0020