1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
#################################### cdp.py ##################################
% Regression tests for the cdp module
################################## CDPv2_HDR ##################################
+ CDP
= CDPv2 - Dissection (1)
s = b'\x02\xb4\x8c\xfa\x00\x01\x00\x0cmyswitch\x00\x02\x00\x11\x00\x00\x00\x01\x01\x01\xcc\x00\x04\xc0\xa8\x00\xfd\x00\x03\x00\x13FastEthernet0/1\x00\x04\x00\x08\x00\x00\x00(\x00\x05\x01\x14Cisco Internetwork Operating System Software \nIOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA14, RELEASE SOFTWARE (fc1)\nTechnical Support: http://www.cisco.com/techsupport\nCopyright (c) 1986-2010 by cisco Systems, Inc.\nCompiled Tue 26-Oct-10 10:35 by nburra\x00\x06\x00\x15cisco WS-C2950-12\x00\x08\x00$\x00\x00\x0c\x01\x12\x00\x00\x00\x00\xff\xff\xff\xff\x01\x02!\xff\x00\x00\x00\x00\x00\x00\x00\x0b\xbe\x18\x9a@\xff\x00\x00\x00\t\x00\x0cMYDOMAIN\x00\n\x00\x06\x00\x01\x00\x0b\x00\x05\x01\x00\x0e\x00\x07\x01\x00\n\x00\x12\x00\x05\x00\x00\x13\x00\x05\x00\x00\x16\x00\x11\x00\x00\x00\x01\x01\x01\xcc\x00\x04\xc0\xa8\x00\xfd'
cdpv2 = CDPv2_HDR(s)
assert len(cdpv2) == 450
assert cdpv2.vers == 2
assert cdpv2.ttl == 180
assert cdpv2.cksum == 0x8cfa
assert cdpv2.haslayer(CDPMsgDeviceID)
assert cdpv2.haslayer(CDPMsgAddr)
assert cdpv2.haslayer(CDPAddrRecordIPv4)
assert cdpv2.haslayer(CDPMsgPortID)
assert cdpv2.haslayer(CDPMsgCapabilities)
assert cdpv2.haslayer(CDPMsgSoftwareVersion)
assert cdpv2.haslayer(CDPMsgPlatform)
assert cdpv2.haslayer(CDPMsgProtoHello)
assert cdpv2.haslayer(CDPMsgVTPMgmtDomain)
assert cdpv2.haslayer(CDPMsgNativeVLAN)
assert cdpv2.haslayer(CDPMsgDuplex)
assert cdpv2.haslayer(CDPMsgVoIPVLANReply)
assert cdpv2.haslayer(CDPMsgTrustBitmap)
assert cdpv2.haslayer(CDPMsgUntrustedPortCoS)
assert cdpv2.haslayer(CDPMsgMgmtAddr)
assert cdpv2[CDPMsgProtoHello].len == 36
assert cdpv2[CDPMsgProtoHello].oui == 0xc
assert cdpv2[CDPMsgProtoHello].protocol_id == 0x112
assert cdpv2[CDPMsgTrustBitmap].type == 0x0012
assert cdpv2[CDPMsgTrustBitmap].len == 5
assert cdpv2[CDPMsgTrustBitmap].trust_bitmap == 0x0
assert cdpv2[CDPMsgUntrustedPortCoS].type == 0x0013
assert cdpv2[CDPMsgUntrustedPortCoS].len == 5
assert cdpv2[CDPMsgUntrustedPortCoS].untrusted_port_cos == 0x0
= CDPv2 - Rebuild (1)
cdpv2.cksum = None
assert raw(cdpv2) == s
= CDPv2 - Dissection (2)
s = b'\x02\xb4\xd7\xdb\x00\x01\x00\x13SIP001122334455\x00\x02\x00\x11\x00\x00\x00\x01\x01\x01\xcc\x00\x04\xc0\xa8\x01!\x00\x03\x00\nPort 1\x00\x04\x00\x08\x00\x00\x00\x10\x00\x05\x00\x10P003-08-2-00\x00\x06\x00\x17Cisco IP Phone 7960\x00\x0f\x00\x08 \x02\x00\x01\x00\x0b\x00\x05\x01\x00\x10\x00\x06\x18\x9c'
cdpv2 = CDPv2_HDR(s)
assert cdpv2.vers == 2
assert cdpv2.ttl == 180
assert cdpv2.cksum == 0xd7db
assert cdpv2.haslayer(CDPMsgDeviceID)
assert cdpv2.haslayer(CDPMsgAddr)
assert cdpv2.haslayer(CDPAddrRecordIPv4)
assert cdpv2.haslayer(CDPMsgPortID)
assert cdpv2.haslayer(CDPMsgCapabilities)
assert cdpv2.haslayer(CDPMsgSoftwareVersion)
assert cdpv2.haslayer(CDPMsgPlatform)
assert cdpv2.haslayer(CDPMsgVoIPVLANQuery)
assert cdpv2.haslayer(CDPMsgDuplex)
assert cdpv2.haslayer(CDPMsgPower)
assert cdpv2[CDPMsgVoIPVLANQuery].type == 0x000f
assert cdpv2[CDPMsgVoIPVLANQuery].len == 8
assert cdpv2[CDPMsgVoIPVLANQuery].unknown1 == 0x20
assert cdpv2[CDPMsgVoIPVLANQuery].vlan == 512
assert cdpv2[CDPMsgPower].sprintf("%power%") == '6300 mW'
= CDPv2 - Rebuild (2)
cdpv2.cksum = None
s2 = s[:2] + b"\xf3\xf1" + s[4:]
assert raw(cdpv2) == s2
= CDPv2 - Complex Packet
r = b'\x01\x00\x0c\xcc\xcc\xcc\x11"3DUf\x01\x80\xaa\xaa\x03\x00\x00\x0c \x00\x02\xb4uV\x00\x01\x00\nRouter\x00\x05\x00\x04\x00\x06\x00\x04\x00\x02\x00\x11\x00\x00\x00\x02\x01\x01\xcc\x00\x04\xc0\xa8\x01e\x00\x03\x00\x18GigabitEthernet0/0/1\x00\x04\x00\x08\x00\x00\x00A\x00\x07\x00\t\x14\x00\x00\x00\x18\x00\t\x00\x04\x00\x0b\x00\x05\x01\x00\x16\x00\x11\x00\x00\x00\x01\x01\x01\xcc\x00\x04\xc0\xa8\x01e'
p = Dot3(r)
assert CDPMsgPortID in p and CDPMsgIPPrefix in p
= CDPChecksum - packet with odd length
pkt = CDPv2_HDR(vers=2, ttl=180, msg='123')
assert len(pkt) == 7
= CDPv2 - CDPMsgAddr Packet
cdp_msg_addr = CDPMsgAddr(addr=[CDPAddrRecordIPv4(), CDPAddrRecordIPv6()])
assert cdp_msg_addr.haslayer(CDPAddrRecordIPv4)
assert cdp_msg_addr.haslayer(CDPAddrRecordIPv6)
assert len(cdp_msg_addr.addr) == 2
assert raw(cdp_msg_addr)[4:8] == b'\x00\x00\x00\x02'
= CDPv2 - CDPMsgPowerRequest and CDPMsgPowerAvailable Packet
s = b'\x02\xb4\x39\xfa\x00\x01\x00\x09\x53\x63\x61\x70\x79\x00\x02\x00\x11\x00\x00\x00\x01\x01\x01\xcc\x00\x04\x7f\x00\x00\x01\x00\x10\x00\x06\x00\x10\x00\x19\x00\x18\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x1a\x00\x14\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07'
cdpv2 = CDPv2_HDR(s)
assert cdpv2.vers == 2
assert cdpv2.ttl == 180
assert cdpv2.cksum == 0x39fa
assert cdpv2.haslayer(CDPMsgDeviceID)
assert cdpv2.haslayer(CDPMsgAddr)
assert cdpv2.haslayer(CDPMsgPower)
assert cdpv2.haslayer(CDPMsgPowerRequest)
assert cdpv2.haslayer(CDPMsgPowerAvailable)
assert cdpv2[CDPMsgPowerRequest].type == 0x0019
assert cdpv2[CDPMsgPowerRequest].len == 24
assert cdpv2[CDPMsgPowerRequest].req_id == 0
assert cdpv2[CDPMsgPowerRequest].mgmt_id == 0
assert len(cdpv2[CDPMsgPowerRequest].power_requested_list) == 4
assert cdpv2[CDPMsgPowerRequest].power_requested_list == [1, 2, 3, 4]
assert cdpv2[CDPMsgPowerAvailable].type == 0x001a
assert cdpv2[CDPMsgPowerAvailable].len == 20
assert cdpv2[CDPMsgPowerAvailable].req_id == 0
assert cdpv2[CDPMsgPowerAvailable].mgmt_id == 0
assert len(cdpv2[CDPMsgPowerAvailable].power_available_list) == 3
assert cdpv2[CDPMsgPowerAvailable].power_available_list == [5, 6, 7]
|