1 % Ikev2 Tests 2 * Tests for the Ikev2 layer 3 4 + Basic Layer Tests 5 6 = Ikev2 build 7 8 a = IKEv2() 9 assert raw(a) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c' 10 11 = Ikev2 dissection 12 13 a = IKEv2(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00! \x00\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x14\x00\x00\x00\x10\x01\x01\x00\x00\x00\x00\x00\x08\x02\x00\x00\x03") 14 assert a[IKEv2_payload_Transform].transform_type == 2 15 assert a[IKEv2_payload_Transform].transform_id == 3 16 assert a.next_payload == 33 17 assert a[IKEv2_payload_SA].next_payload == 0 18 assert a[IKEv2_payload_Proposal].next_payload == 0 19 assert a[IKEv2_payload_Proposal].proposal == 1 20 assert a[IKEv2_payload_Transform].next_payload == 0 21 a[IKEv2_payload_Transform].show() 22 23 24 = Build Ikev2 SA request packet 25 26 a = IKEv2(init_SPI="MySPI",exch_type=34)/IKEv2_payload_SA(prop=IKEv2_payload_Proposal()) 27 assert raw(a) == b'MySPI\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00! "\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x0c\x00\x00\x00\x08\x01\x01\x00\x00' 28 29 30 ## packets taken from 31 ## https://github.com/wireshark/wireshark/blob/master/test/captures/ikev2-decrypt-aes128ccm12.pcap 32 33 = Dissect Initiator Request 34 35 a = Ether(b'\x00!k\x91#H\xb8\'\xeb\xa6XI\x08\x00E\x00\x01\x14u\xc2@\x00@\x11@\xb6\xc0\xa8\x01\x02\xc0\xa8\x01\x0e\x01\xf4\x01\xf4\x01\x00=8\xeahM!Yz\xfd6\x00\x00\x00\x00\x00\x00\x00\x00! "\x08\x00\x00\x00\x00\x00\x00\x00\xf8"\x00\x00(\x00\x00\x00$\x01\x01\x00\x03\x03\x00\x00\x0c\x01\x00\x00\x0f\x80\x0e\x00\x80\x03\x00\x00\x08\x02\x00\x00\x05\x00\x00\x00\x08\x04\x00\x00\x13(\x00\x00H\x00\x13\x00\x002\xc6\xdf\xfe\\C\xb0\xd5\x81\x1f~\xaa\xa8L\x9fx\xbf\x99\xb9\x06\x9c+\x07.\x0b\x82\xf4k\xf6\xf6m\xd4_\x97\xef\x89\xee(_\xd5\xdfRzDwkR\x9f\xc9\xd8\xa9\t\xd8B\xa6\xfbY\xb9j\tS\x95ar)\x00\x00$\xb6UF-oKf\xf8r\xcc\xd7\xf0\xf4\xb4\x85w2\x92\x139\xcb\xaaR7\xed\xba$O&+h#)\x00\x00\x1c\x00\x00@\x04\x94\x9c\x9d\xb5s\x9du\xa9t\xa4\x9c\x18F\x186\x9b4\xb7\xf9B)\x00\x00\x1c\x00\x00@\x05>r\x1bF\xbe\x07\xd51\x11B]\x7f\x80\xd2\xc6\xe2 \xc6\x07.\x00\x00\x00\x10\x00\x00@/\x00\x01\x00\x02\x00\x03\x00\x04') 36 assert a[IKEv2_payload_SA].prop.trans.transform_id == 15 37 assert a[IKEv2_payload_Notify].next_payload == 41 38 assert IP(a[IKEv2_payload_Notify].load).src == "70.24.54.155" 39 assert IP(a[IKEv2_payload_Notify].payload.load).dst == "32.198.7.46" 40 41 = Dissect Responder Response 42 43 b = Ether(b'\xb8\'\xeb\xa6XI\x00!k\x91#H\x08\x00E\x00\x01\x0c\xd2R@\x00@\x11\xe4-\xc0\xa8\x01\x0e\xc0\xa8\x01\x02\x01\xf4\x01\xf4\x00\xf8\x07\xdd\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac! " \x00\x00\x00\x00\x00\x00\x00\xf0"\x00\x00(\x00\x00\x00$\x01\x01\x00\x03\x03\x00\x00\x0c\x01\x00\x00\x0f\x80\x0e\x00\x80\x03\x00\x00\x08\x02\x00\x00\x05\x00\x00\x00\x08\x04\x00\x00\x13(\x00\x00H\x00\x13\x00\x00,f\xbe\xad\xb6\xce\x855\xd6!\x8c\xb4\x01\xaaZ\x1e\xb4\x03[\x97\xca\xdd\xaf67J\x97\x9c\x04F\xb8\x80\x05\x06\xbf\x9do\x95\tR2k\xf3\x01\x19\x13\xda\x93\xbb\x8e@\xf8\x157k\xe1\xa0h\x01\xc0\xa6>;T)\x00\x00$\x9e]&sy\xe6\x81\xe7\xd3\x8d\x81\xc7\x10\xd3\x83@\x1d\xe7\xe3`{\x92m\x90\xa9\x95\x8a\xdc\xb5(1\xaa)\x00\x00\x1c\x00\x00@\x04z\x07\x85\'=Y 8)\xa6\x97U\x0f1\xcb\xb9N\xb7+C)\x00\x00\x1c\x00\x00@\x05\xc3\xe5\x8a\x8c\xc9\x93<\xe0\xb7\x8f*P\xe8\xde\x80\x13N\x12\xce1\x00\x00\x00\x08\x00\x00@\x14') 44 assert b[UDP].dport == 500 45 assert b[IKEv2_payload_KE].load == b',f\xbe\xad\xb6\xce\x855\xd6!\x8c\xb4\x01\xaaZ\x1e\xb4\x03[\x97\xca\xdd\xaf67J\x97\x9c\x04F\xb8\x80\x05\x06\xbf\x9do\x95\tR2k\xf3\x01\x19\x13\xda\x93\xbb\x8e@\xf8\x157k\xe1\xa0h\x01\xc0\xa6>;T' 46 assert b[IKEv2_payload_Nonce].payload.type == 16388 47 assert b[IKEv2_payload_Nonce].payload.payload.payload.next_payload == 0 48 49 = Dissect Encrypted Inititor Request 50 51 a = Ether(b"\x00!k\x91#H\xb8'\xeb\xa6XI\x08\x00E\x00\x00Yu\xe2@\x00@\x11AQ\xc0\xa8\x01\x02\xc0\xa8\x01\x0e\x01\xf4\x01\xf4\x00E}\xe0\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac. %\x08\x00\x00\x00\x02\x00\x00\x00=*\x00\x00!\xcc\xa0\xb3]\xe5\xab\xc5\x1c\x99\x87\xcb\xf1\xf5\xec\xff!\x0e\xb7g\xcd\xb8Qy8;\x96Mx\xe2") 52 assert a[IKEv2_payload_Encrypted].next_payload == 42 53 assert a[IKEv2_payload_Encrypted].load == b'\xcc\xa0\xb3]\xe5\xab\xc5\x1c\x99\x87\xcb\xf1\xf5\xec\xff!\x0e\xb7g\xcd\xb8Qy8;\x96Mx\xe2' 54 55 = Dissect Encrypted Responder Response 56 57 b = Ether(b"\xb8'\xeb\xa6XI\x00!k\x91#H\x08\x00E\x00\x00Q\xd5y@\x00@\x11\xe1\xc1\xc0\xa8\x01\x0e\xc0\xa8\x01\x02\x01\xf4\x01\xf4\x00=\xf9F\xeahM!Yz\xfd6\xd9\xfe*\xb2-\xac#\xac. % \x00\x00\x00\x02\x00\x00\x005\x00\x00\x00\x19\xa8\x0c\x95{\xac\x15\xc3\xf8\xaf\xdf1Z\x81\xccK|@\xe8f\rD") 58 assert b[IKEv2].init_SPI == b'\xeahM!Yz\xfd6' 59 assert b[IKEv2].resp_SPI == b'\xd9\xfe*\xb2-\xac#\xac' 60 assert b[IKEv2].next_payload == 46 61 assert b[IKEv2_payload_Encrypted].load == b'\xa8\x0c\x95{\xac\x15\xc3\xf8\xaf\xdf1Z\x81\xccK|@\xe8f\rD' 62 63 = Test Certs detection 64 65 a = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_CRL())) 66 b = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_STR())) 67 c = IKEv2_payload_CERT(raw(IKEv2_payload_CERT_CRT())) 68 69 assert isinstance(a, IKEv2_payload_CERT_CRL) 70 assert isinstance(b, IKEv2_payload_CERT_STR) 71 assert isinstance(c, IKEv2_payload_CERT_CRT) 72 73 = Test TrafficSelector detection 74 75 a = TrafficSelector(raw(IPv4TrafficSelector())) 76 b = TrafficSelector(raw(IPv6TrafficSelector())) 77 c = TrafficSelector(raw(EncryptedTrafficSelector())) 78 79 assert isinstance(a, IPv4TrafficSelector) 80 assert isinstance(b, IPv6TrafficSelector) 81 assert isinstance(c, EncryptedTrafficSelector) 82 83 = IKEv2_payload_Encrypted_Fragment, simple tests 84 85 s = b"\x00\x00\x00\x08\x00\x01\x00\x01" 86 assert raw(IKEv2_payload_Encrypted_Fragment()) == s 87 88 p = IKEv2_payload_Encrypted_Fragment(s) 89 assert p.length == 8 and p.frag_number == 1 90