Как ограничить трафик с помощью многоадресной рассылки по локальному хосту

Я использую многоадресную UDP через localhost, чтобы реализовать свободную коллекцию совместных программ, работающих на одной машине. Следующий код хорошо работает на Mac OSX, Windows и Linux. Недостатком является то, что код будет принимать пакеты UDP и за пределами локальной сети. Например,sendSock.sendto(pkt, ('192.168.0.25', 1600)) получен моей тестовой машиной при отправке из другого ящика в моей сети.

import platform, time, socket, select

addr = ("239.255.2.9", 1600)

sendSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sendSock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 24)
sendSock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, 
    socket.inet_aton("127.0.0.1"))

recvSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
recvSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
if hasattr(socket, 'SO_REUSEPORT'):
    recvSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, True)

recvSock.bind(("0.0.0.0", addr[1]))
status = recvSock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, 
    socket.inet_aton(addr[0]) + socket.inet_aton("127.0.0.1"));

while 1:
    pkt = "Hello host: {1} time: {0}".format(time.ctime(), platform.node())
    print "SEND to: {0} data: {1}".format(addr, pkt)
    r = sendSock.sendto(pkt, addr)

    while select.select([recvSock], [], [], 0)[0]:
        data, fromAddr = recvSock.recvfrom(1024)
        print "RECV from: {0} data: {1}".format(fromAddr, data)

    time.sleep(2)

Я пыталсяrecvSock.bind(("127.0.0.1", addr[1])), но это препятствует тому, чтобы сокет получил любой многоадресный трафик. Есть ли правильный способ настроить recvSock для приема только многоадресных пакетов из сети 127/24, или мне нужно проверить адрес каждого полученного пакета?

Ответы на вопрос(4)

Ваш ответ на вопрос