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:
PacketGeneral IGMP v1/v2 message.
- aliastypes = [<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>]
- 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:
IGMPIGMPv1/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:
IGMPIGMPv1 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:
IGMPIGMPv2 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:
IGMPIGMPv2 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:
IGMPIGMP Message Class for v3
- aliastypes = [<class 'scapy.layers.igmp.IGMPv3'>, <class 'scapy.layers.igmp.IGMP'>, <class 'scapy.packet.Packet'>]
- 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:
IGMPv3IGMPv3 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:
IGMPv3IGMP 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:
IGMPv3IGMP 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:
IGMPv3IGMP 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:
IGMPv3IGMP 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:
PacketIGMP 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'>]
- 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()