我有一个套接字在我机器的不同接口上等待 OSPF Hello 数据包(224.0.0.5),环回接口除外。此时,我从同一个套接字上的两个不同接口接收到多播 OSPF 数据包。
class mcast(object):
def __init__(self):
self.bufsize = BUFSIZE
def create(self, MCAST_GROUP, PROTO):
self.mcast_group = MCAST_GROUP
self.proto = PROTO
s = socket(AF_INET, SOCK_RAW, self.proto)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind((self.mcast_group, self.proto))
netinterfaces = getIPAllInterfaces().items()
for x in range(0, len(netinterfaces)):
if netinterfaces[x][0] == 'lo':
continue
else:
mcast = inet_aton(self.mcast_group) + inet_aton(netinterfaces[x][1])
s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, str(mcast))
return s
def recv(self, s):
self.s = s
return self.s.recvfrom(self.bufsize)
现在的重点是我需要知道我在哪个接口收到了数据包,因为数据包的处理方式不同。
如何知道我是从哪个接口收到多播数据包的?
编辑:从获取接收 recvfrom() UDP 数据包(Microsoft)的接口的 IP 此处“当单个侦听套接字绑定到多个 IP 时,无法知道接收 IP。(...)创建一个单独的每个 IP 的侦听套接字。” 有谁知道不同的解决方案?