diff options
author | 2016-03-21 16:03:47 +0200 | |
---|---|---|
committer | 2016-03-21 16:03:47 +0200 | |
commit | b89efa188810bf95a9d245e69e2961b5721c3b0f (patch) | |
tree | 454273ac6c4ae972ebb8a2c86b893296970b4fa9 /scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py | |
parent | f72c6df9d2e9998ae1f3529d729ab7930b35785a (diff) |
scapy python 2/3
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py b/scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py deleted file mode 100644 index af5c2823..00000000 --- a/scripts/external_libs/scapy-python3-0.18/scapy/contrib/vtp.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python - -# scapy.contrib.description = VLAN Trunking Protocol (VTP) -# scapy.contrib.status = loads - -""" - VTP Scapy Extension - ~~~~~~~~~~~~~~~~~~~~~ - - :version: 2009-02-15 - :copyright: 2009 by Jochen Bartl - :e-mail: lobo@c3a.de / jochen.bartl@gmail.com - :license: GPL v2 - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - :TODO - - - Join messages - - RE MD5 hash calculation - - Have a closer look at 8 byte padding in summary adv. - "debug sw-vlan vtp packets" sais the TLV length is invalid, - when I change the values - '\x00\x00\x00\x01\x06\x01\x00\x02' - * \x00\x00 ? - * \x00\x01 tlvtype? - * \x06 length? - * \x00\x02 value? - - h2i function for VTPTimeStampField - - :References: - - - Understanding VLAN Trunk Protocol (VTP) - http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml -""" - -from scapy.all import * - -_VTP_VLAN_TYPE = { - 1 : 'Ethernet', - 2 : 'FDDI', - 3 : 'TrCRF', - 4 : 'FDDI-net', - 5 : 'TrBRF' - } - -_VTP_VLANINFO_TLV_TYPE = { - 0x01 : 'Source-Routing Ring Number', - 0x02 : 'Source-Routing Bridge Number', - 0x03 : 'Spanning-Tree Protocol Type', - 0x04 : 'Parent VLAN', - 0x05 : 'Translationally Bridged VLANs', - 0x06 : 'Pruning', - 0x07 : 'Bridge Type', - 0x08 : 'Max ARE Hop Count', - 0x09 : 'Max STE Hop Count', - 0x0A : 'Backup CRF Mode' - } - - -class VTPVlanInfoTlv(Packet): - name = "VTP VLAN Info TLV" - fields_desc = [ - ByteEnumField("type", 0, _VTP_VLANINFO_TLV_TYPE), - ByteField("length", 0), - StrLenField("value", None, length_from=lambda pkt : pkt.length + 1) - ] - - def guess_payload_class(self, p): - return conf.padding_layer - -class VTPVlanInfo(Packet): - name = "VTP VLAN Info" - fields_desc = [ - ByteField("len", None), # FIXME: compute length - ByteEnumField("status", 0, {0 : "active", 1 : "suspended"}), - ByteEnumField("type", 1, _VTP_VLAN_TYPE), - FieldLenField("vlannamelen", None, "vlanname", "B"), - ShortField("vlanid", 1), - ShortField("mtu", 1500), - XIntField("dot10index", None), - StrLenField("vlanname", "default", length_from=lambda pkt:4 * ((pkt.vlannamelen + 3) / 4)), - ConditionalField(PacketListField("tlvlist", [], VTPVlanInfoTlv, - length_from=lambda pkt:pkt.len - 12 - (4 * ((pkt.vlannamelen + 3) / 4))), - lambda pkt:pkt.type not in [1, 2]) - ] - - def post_build(self, p, pay): - vlannamelen = 4 * ((len(self.vlanname) + 3) / 4) - - if self.len == None: - l = vlannamelen + 12 - p = chr(l & 0xff) + p[1:] - - # Pad vlan name with zeros if vlannamelen > len(vlanname) - l = vlannamelen - len(self.vlanname) - if l != 0: - p += "\x00" * l - - p += pay - - return p - - def guess_payload_class(self, p): - return conf.padding_layer - -_VTP_Types = { - 1 : 'Summary Advertisement', - 2 : 'Subset Advertisements', - 3 : 'Advertisement Request', - 4 : 'Join' - } - -class VTPTimeStampField(StrFixedLenField): - def __init__(self, name, default): - StrFixedLenField.__init__(self, name, default, 12) - - def i2repr(self, pkt, x): - return "%s-%s-%s %s:%s:%s" % (x[:2], x[2:4], x[4:6], x[6:8], x[8:10], x[10:12]) - -class VTP(Packet): - name = "VTP" - fields_desc = [ - ByteField("ver", 2), - ByteEnumField("code", 1, _VTP_Types), - ConditionalField(ByteField("followers", 1), - lambda pkt:pkt.code == 1), - ConditionalField(ByteField("seq", 1), - lambda pkt:pkt.code == 2), - ConditionalField(ByteField("reserved", 0), - lambda pkt:pkt.code == 3), - ByteField("domnamelen", None), - StrFixedLenField("domname", "manbearpig", 32), - ConditionalField(SignedIntField("rev", 0), - lambda pkt:pkt.code == 1 or - pkt.code == 2), - # updater identity - ConditionalField(IPField("uid", "192.168.0.1"), - lambda pkt:pkt.code == 1), - ConditionalField(VTPTimeStampField("timestamp", '930301000000'), - lambda pkt:pkt.code == 1), - ConditionalField(StrFixedLenField("md5", "\x00" * 16, 16), - lambda pkt:pkt.code == 1), - ConditionalField( - PacketListField("vlaninfo", [], VTPVlanInfo), - lambda pkt: pkt.code == 2), - ConditionalField(ShortField("startvalue", 0), - lambda pkt:pkt.code == 3) - ] - - def post_build(self, p, pay): - if self.domnamelen == None: - domnamelen = len(self.domname.strip("\x00")) - p = p[:3] + chr(domnamelen & 0xff) + p[4:] - - p += pay - - return p - -bind_layers(SNAP, VTP, code=0x2003) - -if __name__ == '__main__': - interact(mydict=globals(), mybanner="VTP") |