用bash接收广播

时间:2018-03-02 17:36:49

标签: bash netcat socat

在netcat或socat中接收UDP广播包的正确方法是什么?

我想用bash从一台计算机向另一台计算机发送广播。发送效果很好:

socat - UDP-DATAGRAM:255.255.255.255:50011,broadcast

但是(在两种情况下)收到第一行(数据包)时都会收到冻结:

nc -luk 50011

socat - UDP-LISTEN:50011

我认为UDP连接结束,但接收方没有挂起或者没有开始侦听新数据包。它仍在等待第一次连接(忽略新连接)。

1 个答案:

答案 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')