Имитация IGMPv3 трафика с помощью Scapy
Форум — General
Добрый день, пытаюсь понять как правильно имитировать трафик, что бы на маршрутизаторах появились записи о группах мультикаста. Схема проста, есть две убунты и два роутера между ними: U-R-R-U На них настроен PIM примерно так:
ip pim interface eth1
ip pim interface eth2
ip pim rp 50.50.50.1 group-prefix 230.0.0.30/32
ip pim rp 20.20.20.1 group-prefix 230.0.0.20/32
ip pim on
На убунтах слева направо я пытаюсь передавать пакеты IGMP сборку которых с горем пополам нашёл в интернетах: 1pc:
scapy
from scapy.all import *
class IGMP3(Packet):
name = "IGMP3"
fields_desc = [ ByteField("type", 0x11),
ByteField("mrtime", 20),
XShortField("chksum", None),
IPField("gaddr", "230.0.0.30"),
IntField("others", 0x0)]
def post_build(self, p, pay):
p += pay
if self.chksum is None:
ck = checksum(p)
p = p[:2]+chr(ck>>8)+chr(ck&0xff)+p[4:]
return p
bind_layers(IP, IGMP3, frag=0, proto=2)
p = IP(dst="224.0.0.22")/IGMP3()
send(p, iface="eth1", loop=1,inter=0.01, count=100)
from scapy.all import *
class IGMP3(Packet):
name = "IGMP3"
fields_desc = [ ByteField("type", 0x22),
ByteField("mrtime", 20),
XShortField("chksum", None),
IPField("gaddr", "230.0.0.30"),
IntField("others", 0x0)]
def post_build(self, p, pay):
p += pay
if self.chksum is None:
ck = checksum(p)
p = p[:2]+chr(ck>>8)+chr(ck&0xff)+p[4:]
return p
bind_layers(IP, IGMP3, frag=0, proto=2)
p = IP(dst="224.0.0.22")/IGMP3()
send(p)
К сожалению ничего не выходит, если кто-то разбирается как это должно работать буду благодарен.