如何知道我从哪个接口收到了组播数据包?

时间:2017-10-31 11:25:08

标签: python linux sockets networking ospf

我有一个套接字在我的机器的不同接口上等待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)

现在要点是我需要知道我收到数据包的接口是因为数据包的处理方式不同。

如何知道我从哪个接口收到了组播数据包?

来自Getting the IP of the interface that received a recvfrom() UDP packet (Microsoft)

编辑 here“当一个侦听套接字绑定到多个IP时,无法知道接收IP。(...)为每个IP创建一个单独的侦听套接字。”有谁知道不同的解决方案?

0 个答案:

没有答案