• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#################################### cdp.py ##################################
2% Regression tests for the cdp module
3
4
5################################## CDPv2_HDR ##################################
6+ CDP
7
8= CDPv2 - Dissection (1)
9s = 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'
10cdpv2 = CDPv2_HDR(s)
11assert len(cdpv2) == 450
12assert cdpv2.vers == 2
13assert cdpv2.ttl == 180
14assert cdpv2.cksum == 0x8cfa
15assert cdpv2.haslayer(CDPMsgDeviceID)
16assert cdpv2.haslayer(CDPMsgAddr)
17assert cdpv2.haslayer(CDPAddrRecordIPv4)
18assert cdpv2.haslayer(CDPMsgPortID)
19assert cdpv2.haslayer(CDPMsgCapabilities)
20assert cdpv2.haslayer(CDPMsgSoftwareVersion)
21assert cdpv2.haslayer(CDPMsgPlatform)
22assert cdpv2.haslayer(CDPMsgProtoHello)
23assert cdpv2.haslayer(CDPMsgVTPMgmtDomain)
24assert cdpv2.haslayer(CDPMsgNativeVLAN)
25assert cdpv2.haslayer(CDPMsgDuplex)
26assert cdpv2.haslayer(CDPMsgVoIPVLANReply)
27assert cdpv2.haslayer(CDPMsgTrustBitmap)
28assert cdpv2.haslayer(CDPMsgUntrustedPortCoS)
29assert cdpv2.haslayer(CDPMsgMgmtAddr)
30assert cdpv2[CDPMsgProtoHello].len == 36
31assert cdpv2[CDPMsgProtoHello].oui == 0xc
32assert cdpv2[CDPMsgProtoHello].protocol_id == 0x112
33assert cdpv2[CDPMsgTrustBitmap].type == 0x0012
34assert cdpv2[CDPMsgTrustBitmap].len == 5
35assert cdpv2[CDPMsgTrustBitmap].trust_bitmap == 0x0
36assert cdpv2[CDPMsgUntrustedPortCoS].type == 0x0013
37assert cdpv2[CDPMsgUntrustedPortCoS].len == 5
38assert cdpv2[CDPMsgUntrustedPortCoS].untrusted_port_cos == 0x0
39
40= CDPv2 - Rebuild (1)
41
42cdpv2.cksum = None
43assert raw(cdpv2) == s
44
45= CDPv2 - Dissection (2)
46s = 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'
47cdpv2 = CDPv2_HDR(s)
48assert cdpv2.vers == 2
49assert cdpv2.ttl == 180
50assert cdpv2.cksum == 0xd7db
51assert cdpv2.haslayer(CDPMsgDeviceID)
52assert cdpv2.haslayer(CDPMsgAddr)
53assert cdpv2.haslayer(CDPAddrRecordIPv4)
54assert cdpv2.haslayer(CDPMsgPortID)
55assert cdpv2.haslayer(CDPMsgCapabilities)
56assert cdpv2.haslayer(CDPMsgSoftwareVersion)
57assert cdpv2.haslayer(CDPMsgPlatform)
58assert cdpv2.haslayer(CDPMsgVoIPVLANQuery)
59assert cdpv2.haslayer(CDPMsgDuplex)
60assert cdpv2.haslayer(CDPMsgPower)
61assert cdpv2[CDPMsgVoIPVLANQuery].type == 0x000f
62assert cdpv2[CDPMsgVoIPVLANQuery].len == 8
63assert cdpv2[CDPMsgVoIPVLANQuery].unknown1 == 0x20
64assert cdpv2[CDPMsgVoIPVLANQuery].vlan == 512
65
66assert cdpv2[CDPMsgPower].sprintf("%power%") == '6300 mW'
67
68= CDPv2 - Rebuild (2)
69
70cdpv2.cksum = None
71s2 = s[:2] + b"\xf3\xf1" + s[4:]
72assert raw(cdpv2) == s2
73
74= CDPv2 - Complex Packet
75
76r = 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'
77p = Dot3(r)
78assert CDPMsgPortID in p and CDPMsgIPPrefix in p
79
80= CDPChecksum - packet with odd length
81
82pkt = CDPv2_HDR(vers=2, ttl=180, msg='123')
83assert len(pkt) == 7
84
85= CDPv2 - CDPMsgAddr Packet
86cdp_msg_addr = CDPMsgAddr(addr=[CDPAddrRecordIPv4(), CDPAddrRecordIPv6()])
87assert cdp_msg_addr.haslayer(CDPAddrRecordIPv4)
88assert cdp_msg_addr.haslayer(CDPAddrRecordIPv6)
89assert len(cdp_msg_addr.addr) == 2
90
91assert raw(cdp_msg_addr)[4:8] == b'\x00\x00\x00\x02'
92
93= CDPv2 - CDPMsgPowerRequest and CDPMsgPowerAvailable Packet
94s = 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'
95cdpv2 = CDPv2_HDR(s)
96assert cdpv2.vers == 2
97assert cdpv2.ttl == 180
98assert cdpv2.cksum == 0x39fa
99assert cdpv2.haslayer(CDPMsgDeviceID)
100assert cdpv2.haslayer(CDPMsgAddr)
101assert cdpv2.haslayer(CDPMsgPower)
102assert cdpv2.haslayer(CDPMsgPowerRequest)
103assert cdpv2.haslayer(CDPMsgPowerAvailable)
104assert cdpv2[CDPMsgPowerRequest].type == 0x0019
105assert cdpv2[CDPMsgPowerRequest].len == 24
106assert cdpv2[CDPMsgPowerRequest].req_id == 0
107assert cdpv2[CDPMsgPowerRequest].mgmt_id == 0
108assert len(cdpv2[CDPMsgPowerRequest].power_requested_list) == 4
109assert cdpv2[CDPMsgPowerRequest].power_requested_list == [1, 2, 3, 4]
110assert cdpv2[CDPMsgPowerAvailable].type == 0x001a
111assert cdpv2[CDPMsgPowerAvailable].len == 20
112assert cdpv2[CDPMsgPowerAvailable].req_id == 0
113assert cdpv2[CDPMsgPowerAvailable].mgmt_id == 0
114assert len(cdpv2[CDPMsgPowerAvailable].power_available_list) == 3
115assert cdpv2[CDPMsgPowerAvailable].power_available_list == [5, 6, 7]
116