我读过一些关于端口翻译的东西,现在我想测试一下。
我在 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))
在那之后我开始在本地机器上听 5000th
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
(使用具有其他端口和地址的相同脚本)。但我从来没有在我的本地机器上收到这个响应。为什么?
此外,当服务器在本地网络中时,此代码可以正常工作。