利用Python2发送UDP报文

Using Python to test network reachability

Posted by Yang on August 5, 2020

是防火墙丢弃了特定端口的UDP么?

上个月遇到某些源端口的UDP报文对端无法收到问题,但是又能ping通,一头雾水。

后来想到用Linux命令构建UDP socket,但是不是很好用,不能绑定指定的源端口。

于是开始研究用python发送,还是比较简单。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys,socket
 
UDP_SRC_IP = "39.1.1.2"
UDP_IP = "39.1.1.1"
UDP_SRC_PORT = int(sys.argv[1])
UDP_DEST_PORT = 2123
MESSAGE = "Hello, World!"
 
print "UDP target IP:", UDP_IP
print "UDP source port:", UDP_SRC_PORT
print "UDP target port:", UDP_DEST_PORT
print "message:", MESSAGE
 
sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM)
sock.bind((UDP_SRC_IP,UDP_SRC_PORT))
sock.sendto(MESSAGE, (UDP_IP, UDP_DEST_PORT))

测试网络联通性时,运行下面命令即可。

1
python2 send_udp.py 12345

执行之前需要在对端设备抓包,确定是否收到。

如果端口较多,可以用for循环实现,也很简单,不在此处赘述了。