在netcat或socat中接收UDP广播包的正确方法是什么?
我想用bash从一台计算机向另一台计算机发送广播。发送效果很好:
socat - UDP-DATAGRAM:255.255.255.255:50011,broadcast
但是(在两种情况下)收到第一行(数据包)时都会收到冻结:
nc -luk 50011
或
socat - UDP-LISTEN:50011
我认为UDP连接结束,但接收方没有挂起或者没有开始侦听新数据包。它仍在等待第一次连接(忽略新连接)。
答案 0 :(得分:2)
最后,我在Python中使用自己的脚本解决了它:
#!/usr/bin/python3
from socket import *
import sys
if (len(sys.argv)==3 and sys.argv[1]=='-l'):
try:
port=int(sys.argv[2])
except ValueError as verr:
print('Invalid port number')
sys.exit(1)
try:
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('',port))
while True:
data,address=s.recvfrom(1024)
print((data.decode('utf-8')).rstrip())
s.close()
except (KeyboardInterrupt, SystemExit):
s.close()
print('Exit on Keyboard Interrupt')
else:
print('UDP socket listener by JirkaRCK v1.0\nArguments:\n-l Listen on specific UDP port')