У меня есть компьютер с Windows, на котором у меня есть два сценария, которые отправляют и получают сообщения через многоадресную передачу UDP (на одном компьютере).У меня есть реализация C и Python3 этого.Python3 выглядит так:
sender.py
import socket
MCAST_GRP = '239.1.1.1'
MCAST_PORT = 1234
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
print("Sending")
sock.sendto(bytearray("str()", "utf-8"), (MCAST_GRP, MCAST_PORT))
data, address = sock.recvfrom(1024)
print('received %s bytes from %s' % (len(data), address))
print(data)
receive.py
import socket
import struct
import sys
multicast_group = '239.1.1.1'
server_address = ('', 1234)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind to the server address
sock.bind(server_address)
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
# Receive/respond loop
while True:
print('\nwaiting to receive message')
data, address = sock.recvfrom(1024)
print('received %s bytes from %s' % (len(data), address))
print(data)
print('sending acknowledgement to', address)
sock.sendto(bytearray("ack", "utf-8"), address)
У меня есть другое физическое устройство, подключенное к той же машине, но яне может получать сообщения от него с моими программами.Я вижу, что Wireshark видит сообщения от другого физического устройства, эти сообщения поступают через интерфейс eth0
на тот же IP-адрес и порт.Я знаю, что трафик, генерируемый моими скриптами, находится на VirtualBox Host-Only Network
.Я не уверен, может ли это привести к тому, что я не вижу многоадресные UDP-сообщения от внешнего устройства.
Я также протестировал его на машине с Linux (последняя версия kali), но не смог получить никаких сообщенийс внешнего устройства.
Если мне не хватает какой-либо информации, пожалуйста, сообщите мне.
РЕДАКТ. 1:
Моя настройкаследует: я работаю на родной машине с Windows 10.К этой машине подключено устройство под управлением какой-то ОС, которую я не знаю.Я могу только отправлять и получать сообщения от него.Я могу отправлять пакеты Ethernet, TCP и IPv4 через физический порт Ethernet на моем компьютере с Windows 10, указав программное обеспечение, которое я использую для этого, для использования eth0 и определенного IP-адреса (v4), который я назначил этому порту в настройках сетевого адаптера.(192.168.1.100)
Сценарии выполняются на том же компьютере с Windows 10, который также подключен к устройству.Они отправляют по этому интерфейсу VirtualBox Host-Only Network
, но я не знаю почему.Я не настраивал ничего подобного.Я предполагаю, что интерфейс не должен быть проблемой, потому что именно так работает UDP Multicast (я не уверен в этом, поэтому, если я ошибаюсь, пожалуйста, дайте мне знать!)
Пример выходных данных отправителя выглядит следующим образом:
Sending
received 3 bytes from ('192.168.56.1', 3000)
b'ack'
Process finished with exit code 0
и получатель:
waiting to receive message
received 5 bytes from ('192.168.56.1', 55132)
b'robot'
sending acknowledgement to ('192.168.56.1', 55132)
waiting to receive message
Надеюсь, что проясняет настройку.Если по-прежнему отсутствует информация, пожалуйста, дайте мне знать