您可以使用source specific multicast进行过滤,这允许套接字仅从某些发送方接收组播流量.
通常,您会使用IP_ADD_MEMBERSHIP
套接字选项加入这样的组播组:
MCAST_GRP = '224.1.1.1'
LOCAL_INT_IP = '192.168.1.2' # local address of joining interface
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP),
socket.inet_aton(LOCAL_INT_IP))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
相反,请使用IP_ADD_SOURCE_MEMBERSHIP
选项,该选项允许您指定发件人IP:
MCAST_GRP = '232.1.1.1'
LOCAL_INT_IP = '192.168.1.2' # local address of joining interface
SENDER_IP = '192.168.1.10'
mreq_src = struct.pack("4sl", socket.inet_aton(MCAST_GRP),
socket.inet_aton(LOCAL_INT_IP), socket.inet_aton(SENDER_IP))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_SOURCE_MEMBERSHIP, mreq_src)
关于源特定组播,需要注意的一点是组播地址必须在232.0.0.0/8范围内.