测试是否开放 udp
IPv4
VPS 服务端
直接复制运行:
python3 - <<'PY'
import socket
HOST = "0.0.0.0"
PORT = 50589
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST, PORT))
print(f"UDP IPv4 server listening on {HOST}:{PORT}")
while True:
data, addr = sock.recvfrom(65535)
print(f"received from {addr}: {data!r}", flush=True)
sock.sendto(b"UDP IPv4 OK", addr)
PY
Mac 客户端
把 VPS_IPV4 换成 VPS 的 IPv4:
python3 - <<'PY'
import socket
server = ("VPS_IPV4", 50589)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)
message = b"hello from mac"
print(f"Sending UDP packet to {server}...")
sock.sendto(message, server)
try:
data, addr = sock.recvfrom(4096)
print(f"UDP response received from {addr}:")
print(data.decode(errors="replace"))
except socket.timeout:
print("UDP TIMEOUT: VPS did not respond")
sock.close()
PY
收到:
UDP response received from ('VPS_IPV4', 50589):
UDP IPv4 OK
说明 IPv4 UDP 入站正常。
IPv6
VPS 服务端
直接复制运行:
python3 - <<'PY'
import socket
HOST = "::"
PORT = 50589
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.bind((HOST, PORT))
print(f"UDP IPv6 server listening on [{HOST}]:{PORT}")
while True:
data, addr = sock.recvfrom(65535)
print(f"received from {addr}: {data!r}", flush=True)
sock.sendto(b"UDP IPv6 OK", addr)
PY
Mac 客户端
把 VPS_IPV6 换成 VPS 的 IPv6:
python3 - <<'PY'
import socket
server = ("VPS_IPV6", 50589)
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.settimeout(5)
message = b"hello from mac"
print(f"Sending UDP packet to [{server[0]}]:{server[1]}...")
sock.sendto(message, server)
try:
data, addr = sock.recvfrom(4096)
print(f"UDP response received from [{addr[0]}]:{addr[1]}")
print(data.decode(errors="replace"))
except socket.timeout:
print("UDP TIMEOUT: VPS did not respond")
sock.close()
PY
例如:
2406:ef80:4:2881::858a:bbb7
直接填写:
server = ("2406:ef80:4:2881::858a:bbb7", 50589)
不要写成:
server = ("2406\:ef80:4:2881::858a\:bbb7", 50589)
检查监听状态
VPS 上执行:
ss -lunp | grep 50589
IPv4 应看到:
0.0.0.0:50589
IPv6 应看到:
[::]:50589
如果客户端超时,可以进一步抓包:
tcpdump -ni any udp port 50589
然后重新从 Mac 发送 UDP 数据。
::