У меня проблема с получением пакета UDPv6 с использованием Python. Пакет поставляется с интерфейсом SLIP с использованием 6LBR и целых запусков на Beagleboard, но это не так. Tcpdump захватывает пакет без каких-либо проблем:Получение многоадресной рассылки UDPv6 в Python
10:17:32.220009 IP6 (hlim 64, next-header UDP (17) payload length: 21)
fe80::200:0:0:3.3000 > ff02::1.3000: [udp sum ok] UDP, length 13
0x0000: 6000 0000 0015 1140 fe80 0000 0000 0000 `[email protected]
0x0010: 0200 0000 0000 0003 ff02 0000 0000 0000 ................
0x0020: 0000 0000 0000 0001 0bb8 0bb8 0015 f9fe ................
0x0030: 4d65 7373 6167 6520 3537 3236 00 Message.5726.
Однако, я не могу получить пакет с помощью Python:
MYPORT = 3000
MYGROUP_6 = 'ff02::1%eth0'
import time
import struct
import socket
import sys
def main():
addrinfo = socket.getaddrinfo(MYGROUP_6, None)[0]
print(addrinfo)
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s.bind(('', MYPORT))
while True:
data, sender = s.recvfrom(150)
print (str(sender) + ' ' + repr(data))
if __name__ == '__main__':
main()
С другой стороны, когда я произвожу локальный многоадресного тот же код может принимать пакет. Tcpdump выход пакета, который может быть получен:
10:29:37.301406 IP6 (hlim 3, next-header UDP (17) payload length: 30)
fe80::c03a:f9ff:fe3d:9b30.56963 > ff02::1.3000: [udp sum ok] UDP, length 22
0x0000: 6000 0000 001e 1103 fe80 0000 0000 0000 `...............
0x0010: c03a f9ff fe3d 9b30 ff02 0000 0000 0000 .:...=.0........
0x0020: 0000 0000 0000 0001 de83 0bb8 001e 20ca ................
0x0030: 3134 3336 3639 3639 3737 2e33 3030 3532 1436696977.30052
0x0040: 3164 7570 6100 1dupa.
Почему? Как я могу захватить этот первый пакет с помощью python?
ARM Linux Конфигурация IP: Конфигурация IP
[email protected]:~$ sudo ifconfig
eth0 Link encap:Ethernet HWaddr c2:3a:f9:3d:9b:30
inet addr:192.168.1.206 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::c03a:f9ff:fe3d:9b30/64 Scope:Link
UP BROADCAST RUNNING MULTICAST DYNAMIC MTU:1500 Metric:1
RX packets:261457 errors:0 dropped:0 overruns:0 frame:0
TX packets:568962 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:28323386 (27.0 MiB) TX bytes:71483396 (68.1 MiB)
Contiki узла:
MAC 00:00:00:00:00:00:00:03 Contiki-2.7-7-g9698ca5 started.
Node id is set to 3.
nullmac nullrdc, channel check rate 128 Hz, radio channel 26
Tentative link-local IPv6 address fe80:0000:0000:0000:0200:0000:0000:0003
Starting 'Unicast sender example process'
IPv6 addresses: bbbb::200:0:0:3
Sending unicast to ff02::1
Спасибо за ответ. Я добавил код, ответственный за присоединение к группе. Однако он ведет себя одинаково, получаются локаторы, генерируемые локально, а те из fe80 :: 200: 0: 0: 3.3000 - нет. Может быть, порт источника - проблема? – akandr
Думая об этом: все узлы уже соединены с группой 'ff02 :: 1', поэтому забыть подписаться на нее не приведет к сбою. Однако подписка по-прежнему правильная. –
Я протестировал код здесь, и, похоже, он отлично работает на ПК. У меня нет вашего конкретного оборудования, поэтому я не могу воспроизвести это, извините :( –