@@ -22,10 +22,11 @@ type IPv6Packet struct {
2222 HopLimit uint8
2323 SrcIP netip.Addr // The unicast IPv6 address of the sending node.
2424 DstIP netip.Addr // The IPv6 unicast or multicast address of the destination node(s).
25- Payload []byte
25+ payload []byte
2626}
2727
2828func (p * IPv6Packet ) String () string {
29+ proto , _ := p .NextLayer ()
2930 return fmt .Sprintf (`IPv6 Packet:
3031- Version: %d
3132- Traffic Class: %s
@@ -39,13 +40,13 @@ func (p *IPv6Packet) String() string {
3940 p .Version ,
4041 p .trafficClass (),
4142 p .PayloadLength ,
42- p . NextLayer () ,
43+ proto ,
4344 p .NextHeader ,
4445 p .HopLimit ,
4546 p .SrcIP ,
4647 p .DstIP ,
47- len (p .Payload ),
48- p .Payload ,
48+ len (p .payload ),
49+ p .payload ,
4950 )
5051}
5152
@@ -63,45 +64,45 @@ func (p *IPv6Packet) Parse(data []byte) error {
6364 p .HopLimit = data [7 ]
6465 p .SrcIP , _ = netip .AddrFromSlice (data [8 :24 ])
6566 p .DstIP , _ = netip .AddrFromSlice (data [24 :headerSizeIPv6 ])
66- p .Payload = data [headerSizeIPv6 :]
67+ p .payload = data [headerSizeIPv6 :]
6768 return nil
6869}
6970
70- // NextLayer returns the type of the next header.
71- func (p * IPv6Packet ) NextLayer () string {
71+ // NextLayer returns the type of the next header and payload .
72+ func (p * IPv6Packet ) NextLayer () ( string , [] byte ) {
7273 // https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
73- var proto string
74+ var layer string
7475 switch p .NextHeader {
7576 case 0 :
76- proto = "HOPOPT"
77+ layer = "HOPOPT"
7778 case 6 :
78- proto = "TCP"
79+ layer = "TCP"
7980 case 17 :
80- proto = "UDP"
81+ layer = "UDP"
8182 case 43 :
82- proto = "Route"
83+ layer = "Route"
8384 case 44 :
84- proto = "Fragment"
85+ layer = "Fragment"
8586 case 50 :
86- proto = "Encapsulating Security Payload "
87+ layer = "Encapsulating Security payload "
8788 case 51 :
88- proto = "Authentication Header"
89+ layer = "Authentication Header"
8990 case 58 :
90- proto = "ICMPv6"
91+ layer = "ICMPv6"
9192 case 59 :
92- proto = "NoNxt"
93+ layer = "NoNxt"
9394 case 60 :
94- proto = "Opts"
95+ layer = "Opts"
9596 case 135 :
96- proto = "Mobility"
97+ layer = "Mobility"
9798 case 139 :
98- proto = "Host Identity Protocol"
99+ layer = "Host Identity Protocol"
99100 case 140 :
100- proto = "Shim6 Protocol"
101+ layer = "Shim6 Protocol"
101102 default :
102- proto = "Unknown "
103+ layer = ""
103104 }
104- return proto
105+ return layer , p . payload
105106}
106107
107108func (p * IPv6Packet ) trafficClass () string {
0 commit comments