Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

別のIPアドレス間でUDPパケットのやりとりを行う

実際のところ

受け手側ファイヤウォール

まず、受信側のファイヤウォール設定を。
普段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