diff --git a/scapy/config.py b/scapy/config.py index ebb15c6713a2b91f2d8d54629f9ae73dbf7928f1..af1b1e0c889bd8eb810d17281acae101edb21599 100644 --- a/scapy/config.py +++ b/scapy/config.py @@ -366,7 +366,7 @@ extensions_paths: path or list of paths where extensions are to be looked for netcache = NetCache() load_layers = ["l2", "inet", "dhcp", "dns", "dot11", "gprs", "hsrp", "inet6", "ir", "isakmp", "l2tp", "mgcp", "mobileip", "netbios", "netflow", "ntp", "ppp", "radius", "rip", "rtp", - "sebek", "skinny", "smb", "snmp", "tftp", "x509", "bluetooth", "dhcp6", "llmnr", "sctp" ] + "sebek", "skinny", "smb", "snmp", "tftp", "x509", "bluetooth", "dhcp6", "llmnr", "sctp", "vrrp" ] if not Conf.ipv6_enabled: diff --git a/scapy/layers/vrrp.py b/scapy/layers/vrrp.py new file mode 100644 index 0000000000000000000000000000000000000000..a08a42f7d0a8412fba881dc1e81820ff99cf4466 --- /dev/null +++ b/scapy/layers/vrrp.py @@ -0,0 +1,35 @@ +## This file is part of Scapy +## See http://www.secdev.org/projects/scapy for more informations +## Copyright (C) Philippe Biondi <phil@secdev.org> +## Copyright (C) 6WIND <olivier.matz@6wind.com> +## This program is published under a GPLv2 license + +from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import IP + +IPPROTO_VRRP=112 + +# RFC 3768 - Virtual Router Redundancy Protocol (VRRP) +class VRRP(Packet): + fields_desc = [ + BitField("version" , 2, 4), + BitField("type" , 1, 4), + ByteField("vrid", 1), + ByteField("priority", 100), + FieldLenField("ipcount", None, count_of="addrlist", fmt="B"), + ByteField("authtype", 0), + ByteField("adv", 1), + XShortField("chksum", None), + FieldListField("addrlist", [], IPField("", "0.0.0.0"), + count_from = lambda pkt: pkt.ipcount), + IntField("auth1", 0), + IntField("auth2", 0) ] + + def post_build(self, p, pay): + if self.chksum is None: + ck = checksum(p) + p = p[:6]+chr(ck>>8)+chr(ck&0xff)+p[8:] + return p + +bind_layers( IP, VRRP, proto=IPPROTO_VRRP)