ポート変換について読んだことがあるので、それをテストしたいと思います。
NAT ルーターの背後にローカル マシンがあり、外部 IP アドレスを持つサーバーがあります。
これは、マシンの 5000 番目のポートからサーバーの 4000 番目のポートにパケットを送信する方法です。
import socket
import sys
UDP_IP = #external server IP address
UDP_PORT = 4000
MESSAGE = "Hi!"
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind(('0.0.0.0', 5000))
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
その直後、ローカル マシンで 5000 番目をリッスンし始めます
import socket
import sys
UDP_IP = #my ip address in the local network
UDP_PORT = 5000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024)
print "received message:", data
サーバー上で受信 UDP が表示されると(someIP, somePort)
、同じものに応答を送信します (他のポートとアドレスで同じスクリプトを使用します)。しかし、ローカル マシンでこの応答を受け取ることはありません。なんで?someIP
somePort
また、サーバーがローカルネットワークにある場合、このコードは正しく機能します。