github.com/gopacket/gopacket@v1.1.0/layers/ipsec_test.go (about) 1 // Copyright 2012, Google, Inc. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the LICENSE file in the root of the source 5 // tree. 6 7 package layers 8 9 import ( 10 "reflect" 11 "testing" 12 13 "github.com/gopacket/gopacket" 14 ) 15 16 // testPacketIPSecAHTransport is the packet: 17 // 18 // 20:45:10.325850 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): ICMP echo request, id 1560, seq 1, length 64 19 // 0x0000: 7ec0 ffc6 48f1 1a0e 3c4e 3b3a 0800 4500 ~...H...<N;:..E. 20 // 0x0010: 006c 650a 4000 4033 5201 c0a8 0101 c0a8 .le.@.@3R....... 21 // 0x0020: 0102 0104 0000 0000 0101 0000 0001 2533 ..............%3 22 // 0x0030: 01b1 a20b b6f1 bdbf 9d9e 0800 fbe5 0618 ................ 23 // 0x0040: 0001 c6e1 a354 0000 0000 c8f7 0400 0000 .....T.......... 24 // 0x0050: 0000 1011 1213 1415 1617 1819 1a1b 1c1d ................ 25 // 0x0060: 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d ...!"#$%&'()*+,- 26 // 0x0070: 2e2f 3031 3233 3435 3637 ./01234567 27 var testPacketIPSecAHTransport = []byte{ 28 0x7e, 0xc0, 0xff, 0xc6, 0x48, 0xf1, 0x1a, 0x0e, 0x3c, 0x4e, 0x3b, 0x3a, 0x08, 0x00, 0x45, 0x00, 29 0x00, 0x6c, 0x65, 0x0a, 0x40, 0x00, 0x40, 0x33, 0x52, 0x01, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8, 30 0x01, 0x02, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x25, 0x33, 31 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e, 0x08, 0x00, 0xfb, 0xe5, 0x06, 0x18, 32 0x00, 0x01, 0xc6, 0xe1, 0xa3, 0x54, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xf7, 0x04, 0x00, 0x00, 0x00, 33 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 34 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 35 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 36 } 37 38 func TestPacketIPSecAHTransport(t *testing.T) { 39 p := gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.Default) 40 if p.ErrorLayer() != nil { 41 t.Error("Failed to decode packet:", p.ErrorLayer().Error()) 42 } 43 checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) 44 if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok { 45 want := &IPSecAH{ 46 Reserved: 0x0, 47 SPI: 0x101, 48 Seq: 1, 49 AuthenticationData: []byte{0x25, 0x33, 0x01, 0xb1, 0xa2, 0x0b, 0xb6, 0xf1, 0xbd, 0xbf, 0x9d, 0x9e}, 50 } 51 want.BaseLayer = BaseLayer{testPacketIPSecAHTransport[34:58], testPacketIPSecAHTransport[58:]} 52 want.NextHeader = IPProtocolICMPv4 53 want.HeaderLength = 0x4 54 want.ActualLength = 0x18 55 if !reflect.DeepEqual(want, got) { 56 t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot %#v\n", want, got) 57 } 58 } 59 } 60 61 func BenchmarkDecodePacketIPSecAHTransport(b *testing.B) { 62 for i := 0; i < b.N; i++ { 63 gopacket.NewPacket(testPacketIPSecAHTransport, LinkTypeEthernet, gopacket.NoCopy) 64 } 65 } 66 67 // testPacketIPSecAHTunnel is the packet: 68 // 69 // 14:45:43.252917 IP 192.168.1.1 > 192.168.1.2: AH(spi=0x00000101,seq=0x1): IP 172.16.1.1 > 172.16.2.1: ICMP echo request, id 31322, seq 1, length 64 (ipip-proto-4) 70 // 0x0000: 7220 4d91 63c9 566c ed2d 73cd 0800 4500 r.M.c.Vl.-s...E. 71 // 0x0010: 0080 0000 4000 4033 b6f7 c0a8 0101 c0a8 ....@.@3........ 72 // 0x0020: 0102 0404 0000 0000 0101 0000 0001 cca4 ................ 73 // 0x0030: 01da 9eb4 fb75 10fe 5a59 4500 0054 a96f .....u..ZYE..T.o 74 // 0x0040: 4000 4001 3617 ac10 0101 ac10 0201 0800 @.@.6........... 75 // 0x0050: d75f 7a5a 0001 0741 3355 0000 0000 a9db ._zZ...A3U...... 76 // 0x0060: 0300 0000 0000 1011 1213 1415 1617 1819 ................ 77 // 0x0070: 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 .......!"#$%&'() 78 // 0x0080: 2a2b 2c2d 2e2f 3031 3233 3435 3637 *+,-./01234567 79 var testPacketIPSecAHTunnel = []byte{ 80 0x72, 0x20, 0x4d, 0x91, 0x63, 0xc9, 0x56, 0x6c, 0xed, 0x2d, 0x73, 0xcd, 0x08, 0x00, 0x45, 0x00, 81 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x33, 0xb6, 0xf7, 0xc0, 0xa8, 0x01, 0x01, 0xc0, 0xa8, 82 0x01, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0xcc, 0xa4, 83 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59, 0x45, 0x00, 0x00, 0x54, 0xa9, 0x6f, 84 0x40, 0x00, 0x40, 0x01, 0x36, 0x17, 0xac, 0x10, 0x01, 0x01, 0xac, 0x10, 0x02, 0x01, 0x08, 0x00, 85 0xd7, 0x5f, 0x7a, 0x5a, 0x00, 0x01, 0x07, 0x41, 0x33, 0x55, 0x00, 0x00, 0x00, 0x00, 0xa9, 0xdb, 86 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 87 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 88 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 89 } 90 91 func TestPacketIPSecAHTunnel(t *testing.T) { 92 p := gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.Default) 93 if p.ErrorLayer() != nil { 94 t.Error("Failed to decode packet:", p.ErrorLayer().Error()) 95 } 96 checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecAH, LayerTypeIPv4, LayerTypeICMPv4, gopacket.LayerTypePayload}, t) 97 if got, ok := p.Layer(LayerTypeIPSecAH).(*IPSecAH); ok { 98 want := &IPSecAH{ 99 Reserved: 0x0, 100 SPI: 0x101, 101 Seq: 1, 102 AuthenticationData: []byte{0xcc, 0xa4, 0x01, 0xda, 0x9e, 0xb4, 0xfb, 0x75, 0x10, 0xfe, 0x5a, 0x59}, 103 } 104 want.BaseLayer = BaseLayer{testPacketIPSecAHTunnel[34:58], testPacketIPSecAHTunnel[58:]} 105 want.NextHeader = IPProtocolIPv4 106 want.HeaderLength = 0x4 107 want.ActualLength = 0x18 108 if !reflect.DeepEqual(want, got) { 109 t.Errorf("IPSecAH layer mismatch, \nwant %#v\ngot %#v\n", want, got) 110 } 111 } 112 } 113 114 func BenchmarkDecodePacketIPSecAHTunnel(b *testing.B) { 115 for i := 0; i < b.N; i++ { 116 gopacket.NewPacket(testPacketIPSecAHTunnel, LinkTypeEthernet, gopacket.NoCopy) 117 } 118 } 119 120 // testPacketIPSecESP is the packet: 121 // 122 // 04:30:37.629376 IP 190.0.0.1 > 190.0.0.2: ESP(spi=0x0000006e,seq=0x13), length 116 123 // 0x0000: 0000 0000 0012 0011 434a d70a 0800 4500 ........CJ....E. 124 // 0x0010: 0088 0000 4000 4032 be40 be00 0001 be00 ....@.@2.@...... 125 // 0x0020: 0002 0000 006e 0000 0013 82f4 1077 0418 .....n.......w.. 126 // 0x0030: e8ce dc45 1bac 22bb daaf 2ad2 c2e8 315b ...E.."...*...1[ 127 // 0x0040: ce9a 39da 2aae cf43 3716 70ab 7e7c 4676 ..9.*..C7.p.~|Fv 128 // 0x0050: c3fc d109 c990 274d f81c 6534 9a40 a0ef ......'M..e4.@.. 129 // 0x0060: 46b1 7da5 05af dda8 d0ba 6e23 d1ee 1f10 F.}.......n#.... 130 // 0x0070: 730c 7371 03b1 445c 2f70 852f 8475 12fb s.sq..D\/p./.u.. 131 // 0x0080: b057 a19b a617 bae7 09ca 8836 942f 3334 .W.........6./34 132 // 0x0090: 312b 96d2 a4e3 1+.... 133 var testPacketIPSecESP = []byte{ 134 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x11, 0x43, 0x4a, 0xd7, 0x0a, 0x08, 0x00, 0x45, 0x00, 135 0x00, 0x88, 0x00, 0x00, 0x40, 0x00, 0x40, 0x32, 0xbe, 0x40, 0xbe, 0x00, 0x00, 0x01, 0xbe, 0x00, 136 0x00, 0x02, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x13, 0x82, 0xf4, 0x10, 0x77, 0x04, 0x18, 137 0xe8, 0xce, 0xdc, 0x45, 0x1b, 0xac, 0x22, 0xbb, 0xda, 0xaf, 0x2a, 0xd2, 0xc2, 0xe8, 0x31, 0x5b, 138 0xce, 0x9a, 0x39, 0xda, 0x2a, 0xae, 0xcf, 0x43, 0x37, 0x16, 0x70, 0xab, 0x7e, 0x7c, 0x46, 0x76, 139 0xc3, 0xfc, 0xd1, 0x09, 0xc9, 0x90, 0x27, 0x4d, 0xf8, 0x1c, 0x65, 0x34, 0x9a, 0x40, 0xa0, 0xef, 140 0x46, 0xb1, 0x7d, 0xa5, 0x05, 0xaf, 0xdd, 0xa8, 0xd0, 0xba, 0x6e, 0x23, 0xd1, 0xee, 0x1f, 0x10, 141 0x73, 0x0c, 0x73, 0x71, 0x03, 0xb1, 0x44, 0x5c, 0x2f, 0x70, 0x85, 0x2f, 0x84, 0x75, 0x12, 0xfb, 142 0xb0, 0x57, 0xa1, 0x9b, 0xa6, 0x17, 0xba, 0xe7, 0x09, 0xca, 0x88, 0x36, 0x94, 0x2f, 0x33, 0x34, 143 0x31, 0x2b, 0x96, 0xd2, 0xa4, 0xe3, 144 } 145 146 func TestPacketIPSecESP(t *testing.T) { 147 p := gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.Default) 148 if p.ErrorLayer() != nil { 149 t.Error("Failed to decode packet:", p.ErrorLayer().Error()) 150 } 151 checkLayers(p, []gopacket.LayerType{LayerTypeEthernet, LayerTypeIPv4, LayerTypeIPSecESP}, t) 152 } 153 154 func BenchmarkDecodePacketIPSecESP(b *testing.B) { 155 for i := 0; i < b.N; i++ { 156 gopacket.NewPacket(testPacketIPSecESP, LinkTypeEthernet, gopacket.NoCopy) 157 } 158 }