scapy.layers.igmp

IGMP v1/v2/v3 as per RFC2236 and RFC9776

Example: IGMPv1 Membership Report (=Join)

>>> send(IP() / IGMP_MR(gaddr="224.0.0.251"))

Example: IGMPv3 Membership Report (=Join)

>>> send(IP() / IGMPv3_MR(records=[IGMPv3_MR_Group(rtype=4, maddr="224.0.0.251")]))

Example: IGMPv1/v2 Membership Query

>>> sr(IP() / IGMP_MQ(gaddr="224.0.0.251"), multi=True)

Example: IGMPv3 Membership Query

>>> sr(IP() / IGMPv3_MQ(gaddr="224.0.0.251"), multi=True)

Example: IGMPv2 Leave

>>> send(IP() / IGMP_LG(gaddr="225.0.0.251"))
class scapy.layers.igmp.IGMP(_pkt, /, *, type=17, mrcode=None, chksum=None, gaddr='0.0.0.0')[source]

Bases: Packet

General IGMP v1/v2 message.

add_underlayer(underlayer)[source]
aliastypes = [<class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
answers(other)[source]
classmethod dispatch_hook(_pkt=None, *args, **kargs)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).type>, <_MRCodeField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).mrcode>, <XShortField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).chksum>, <IPField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).gaddr>]
mysummary()[source]
post_build(p, pay)[source]
class scapy.layers.igmp.IGMPMQResult(res=None, name='IGMP-MR', stats=None)[source]

Bases: PacketList

class scapy.layers.igmp.IGMP_MQ(_pkt, /, *, type=17, mrcode=None, chksum=None, gaddr='0.0.0.0')[source]

Bases: IGMP

IGMPv1/v2 Membership Query

aliastypes = [<class 'scapy.layers.igmp.IGMP_MQ'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).type>, <_MRCodeField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).mrcode>, <XShortField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).chksum>, <IPField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).gaddr>]
match_subclass = True
class scapy.layers.igmp.IGMP_MR(_pkt, /, *, type=18, mrcode=None, chksum=None, gaddr='0.0.0.0')[source]

Bases: IGMP

IGMPv1 Membership Report

aliastypes = [<class 'scapy.layers.igmp.IGMP_MR'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).type>, <_MRCodeField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).mrcode>, <XShortField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).chksum>, <IPField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).gaddr>]
match_subclass = True
class scapy.layers.igmp.IGMPv2_LG(_pkt, /, *, type=23, mrcode=None, chksum=None, gaddr='0.0.0.0')[source]

Bases: IGMP

IGMPv2 Leave Group

aliastypes = [<class 'scapy.layers.igmp.IGMPv2_LG'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).type>, <_MRCodeField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).mrcode>, <XShortField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).chksum>, <IPField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).gaddr>]
match_subclass = True
class scapy.layers.igmp.IGMPv2_MR(_pkt, /, *, type=22, mrcode=None, chksum=None, gaddr='0.0.0.0')[source]

Bases: IGMP

IGMPv2 Membership Report

aliastypes = [<class 'scapy.layers.igmp.IGMPv2_MR'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).type>, <_MRCodeField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).mrcode>, <XShortField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).chksum>, <IPField (IGMP,IGMP_MQ,IGMPv2_LG,IGMP_MR,IGMPv2_MR).gaddr>]
match_subclass = True
class scapy.layers.igmp.IGMPv3(_pkt, /, *, type=17)[source]

Bases: IGMP

IGMP Message Class for v3

aliastypes = [<class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
classmethod dispatch_hook(_pkt=None, *args, **kargs)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>]
mysummary()[source]

Display a summary of the IGMPv3 object.

class scapy.layers.igmp.IGMPv3_MQ(_pkt, /, *, type=17, mrcode=20, chksum=None, gaddr='0.0.0.0', flags=<Flag 0 ()>, s=0, qrv=0, qqic=0, numsrc=None, srcaddrs=[])[source]

Bases: IGMPv3

IGMPv3 Membership Query

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MQ'>, <class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>, <_MRCodeField (IGMPv3_MQ).mrcode>, <XShortField (IGMPv3_MQ).chksum>, <IPField (IGMPv3_MQ).gaddr>, <FlagsField (IGMPv3_MQ).flags>, <BitField (IGMPv3_MQ).s>, <BitField (IGMPv3_MQ).qrv>, <ByteField (IGMPv3_MQ).qqic>, <FieldLenField (IGMPv3_MQ).numsrc>, <FieldListField (IGMPv3_MQ).srcaddrs>]
match_subclass = True
class scapy.layers.igmp.IGMPv3_MR(_pkt, /, *, type=34, reserved=0, chksum=None, flags=<Flag 0 ()>, numgrp=None, records=[])[source]

Bases: IGMPv3

IGMP Membership Report extension for IGMPv3

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MR'>, <class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>, <ByteField (IGMPv3_MR).reserved>, <XShortField (IGMPv3_MR).chksum>, <FlagsField (IGMPv3_MR).flags>, <FieldLenField (IGMPv3_MR).numgrp>, <PacketListField (IGMPv3_MR).records>]
match_subclass = True
class scapy.layers.igmp.IGMPv3_MRA(_pkt, /, *, type=48, advIntvl=0, chksum=None, qryIntvl=0, robust=0)[source]

Bases: IGMPv3

IGMP Multicast Router Advertisement per RFC4286

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MRA'>, <class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>, <ByteField (IGMPv3_MRA).advIntvl>, <XShortField (IGMPv3_MRA).chksum>, <ShortField (IGMPv3_MRA).qryIntvl>, <ShortField (IGMPv3_MRA).robust>]
match_subclass = True
class scapy.layers.igmp.IGMPv3_MRS(_pkt, /, *, type=49, reserved=0, chksum=None)[source]

Bases: IGMPv3

IGMP Multicast Router Solicitation per RFC4286

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MRS'>, <class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>, <ByteField (IGMPv3_MRS).reserved>, <XShortField (IGMPv3_MRS).chksum>]
match_subclass = True
class scapy.layers.igmp.IGMPv3_MRT(_pkt, /, *, type=49, reserved=0, chksum=None)[source]

Bases: IGMPv3

IGMP Multicast Router Termination per RFC4286

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MRT'>, <class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3,IGMPv3_MQ,IGMPv3_MR,IGMPv3_MRA,IGMPv3_MRS,IGMPv3_MRT).type>, <ByteField (IGMPv3_MRT).reserved>, <XShortField (IGMPv3_MRT).chksum>]
match_subclass = True
class scapy.layers.igmp.IGMPv3_MR_Group(_pkt, /, *, rtype=4, auxdlen=0, numsrc=None, maddr='0.0.0.0', srcaddrs=[])[source]

Bases: Packet

IGMP Group Record for IGMPv3 Membership Report

This class should be added in the records of an instantiation of class IGMPv3_MR.

aliastypes = [<class 'scapy.layers.igmp.IGMPv3_MR_Group'>, <class 'scapy.packet.Packet'>]
default_payload_class(payload)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (IGMPv3_MR_Group).rtype>, <ByteField (IGMPv3_MR_Group).auxdlen>, <FieldLenField (IGMPv3_MR_Group).numsrc>, <IPField (IGMPv3_MR_Group).maddr>, <FieldListField (IGMPv3_MR_Group).srcaddrs>]
mysummary()[source]

Display a summary of the IGMPv3 group record.

scapy.layers.igmp.igmp_join(gaddr: str, version=2, psrc=None, iface=None)[source]

Send a IGMP Membership Report to join a multicast group

Parameters:
  • gaddr – the IPv4 of the group to join

  • version – whether to use IGMPv1, IGMPv2 or IGMPv3. Default: both 2 and 3

  • psrc – (optional) the source IP

scapy.layers.igmp.igmp_leave(gaddr: str, psrc=None, iface=None)[source]

Send a IGMP Leave Group to leave a multicast group

Parameters:
  • gaddr – the IPv4 of the group to leave

  • psrc – (optional) the source IP

scapy.layers.igmp.igmp_query(gaddr: str = None, version=2, timeout=2)[source]

Send/receive a Membership Query to get the members of a multicast group

Parameters:

gaddr – the IPv4 of the group to query

Example:

>>> pkts = igmp_query("224.0.0.251")
>>> pkts.show()

Example 2:

>>> pkts = igmp_query("239.255.255.250", version=3)
>>> pkts.show()