我们现有的软件周期性地广播UDP数据包到本地子网(XXX255)的特定端口(7125)。 我们监控软件在HP-UX(11.11)上运行,它能够接收这些数据包没有问题。 然而,移植监控软件到Linux(RHEL 6.1)后,我们发现它不接收广播数据包。 tcpdump的显示到达Linux主机的数据包,但是内核不会通过它们发送到我们的软件。
我一直在使用一对夫妇模仿套接字API调用监控软件使用,以测试不同的场景的Python 2.x的脚本。 如果发件人使用单播(10.1.0.5),而不是广播(10.1.0.255)的Linux内核数据包传递到接收器的软件。 我一直在寻找了好几天的网页,并没有发现同样的问题的人。 有任何想法吗?
receiver.py
from __future__ import print_function
import socket
localHost = ''
localPort = 7125
remoteHost = '10.1.0.5'
remotePort = 19100
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((localHost, localPort))
s.connect((remoteHost, remotePort))
print('Listening on {0}:{1} for traffic from {2}:{3}'.format(localHost, localPort, remoteHost, remotePort))
data = s.recv(1024)
print('Received: {0}'.format(data))
s.close()
sender.py
from __future__ import print_function
import socket
import time
localHost = ''
localPort = 19100
remoteHost = '10.1.0.255'
remotePort = 7125
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((localHost, localPort))
s.connect((remoteHost, remotePort))
data = 'sending this from {0}:{1} to {2}:{3}'.format(localHost, localPort, remoteHost, remotePort)
print(data)
print('2')
time.sleep(1)
print('1')
time.sleep(1)
s.send(data)
print('sent at {0}'.format(time.ctime()))
s.close()