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