@@ -10,21 +10,40 @@ import (
1010
1111const maxLenSummary = 110
1212
13- var Layers = []string {
14- "ETH" ,
15- "IPv4" ,
16- "IPv6" ,
17- "ARP" ,
18- "TCP" ,
19- "UDP" ,
20- "ICMP" ,
21- "ICMPv6" ,
22- "DNS" ,
23- "FTP" ,
24- "HTTP" ,
25- "SNMP" ,
26- "SSH" ,
27- "TLS" ,
13+ type LayerName string
14+
15+ const (
16+ LayerETH LayerName = "ETH"
17+ LayerIPv4 LayerName = "IPv4"
18+ LayerIPv6 LayerName = "IPv6"
19+ LayerARP LayerName = "ARP"
20+ LayerTCP LayerName = "TCP"
21+ LayerUDP LayerName = "UDP"
22+ LayerICMP LayerName = "ICMP"
23+ LayerICMPv6 LayerName = "ICMPv6"
24+ LayerDNS LayerName = "DNS"
25+ LayerFTP LayerName = "FTP"
26+ LayerHTTP LayerName = "HTTP"
27+ LayerSNMP LayerName = "SNMP"
28+ LayerSSH LayerName = "SSH"
29+ LayerTLS LayerName = "TLS"
30+ )
31+
32+ var Layers = []LayerName {
33+ LayerETH ,
34+ LayerIPv4 ,
35+ LayerIPv6 ,
36+ LayerTLS ,
37+ LayerHTTP ,
38+ LayerDNS ,
39+ LayerARP ,
40+ LayerTCP ,
41+ LayerUDP ,
42+ LayerICMP ,
43+ LayerICMPv6 ,
44+ LayerSNMP ,
45+ LayerSSH ,
46+ LayerFTP ,
2847}
2948
3049var (
@@ -46,7 +65,7 @@ type Layer interface {
4665 Parse (data []byte ) error
4766 NextLayer () Layer
4867 Summary () string
49- Name () string
68+ Name () LayerName
5069}
5170
5271func parseNextLayerFallback (data []byte ) Layer {
@@ -71,25 +90,25 @@ func parseNextLayerFromBytes(data []byte) Layer {
7190 var next Layer
7291 firstByte := buf [0 ]
7392 if firstByte >= 0x45 && firstByte <= 0x4F {
74- next = GetNextLayer ("IPv4" )
93+ next = GetNextLayer (LayerIPv4 )
7594 if err := next .Parse (buf ); err == nil {
7695 return next
7796 }
7897 }
7998 if firstByte >> 4 == 6 {
80- next = GetNextLayer ("IPv6" )
99+ next = GetNextLayer (LayerIPv6 )
81100 if err := next .Parse (buf ); err == nil {
82101 return next
83102 }
84103 }
85104 if firstByte == HandshakeTLSVal {
86- next = GetNextLayer ("TLS" )
105+ next = GetNextLayer (LayerTLS )
87106 if err := next .Parse (buf ); err == nil {
88107 return next
89108 }
90109 }
91110 if firstByte == 0x30 {
92- next = GetNextLayer ("SNMP" )
111+ next = GetNextLayer (LayerSNMP )
93112 if err := next .Parse (buf ); err == nil {
94113 return next
95114 }
@@ -98,7 +117,7 @@ func parseNextLayerFromBytes(data []byte) Layer {
98117 b1 := binary .BigEndian .Uint16 (buf [0 :2 ])
99118 b2 := binary .BigEndian .Uint16 (buf [2 :4 ])
100119 if b1 == 1 && (b2 == 0x0800 || b2 == 0x86dd ) {
101- next = GetNextLayer ("ARP" )
120+ next = GetNextLayer (LayerARP )
102121 if err := next .Parse (buf ); err == nil {
103122 return next
104123 }
@@ -107,20 +126,20 @@ func parseNextLayerFromBytes(data []byte) Layer {
107126 if len (buf ) > 15 {
108127 b1 := binary .BigEndian .Uint16 (buf [12 :14 ])
109128 if b1 == 0x0806 || b1 == 0x0800 || b1 == 0x86dd {
110- next = GetNextLayer ("ETH" )
129+ next = GetNextLayer (LayerETH )
111130 if err := next .Parse (buf ); err == nil {
112131 return next
113132 }
114133 }
115134 }
116135 if bytes .Contains (buf , protohttp10 ) || bytes .Contains (buf , protohttp11 ) {
117- next = GetNextLayer ("HTTP" )
136+ next = GetNextLayer (LayerHTTP )
118137 if err := next .Parse (buf ); err == nil {
119138 return next
120139 }
121140 }
122141 if bytes .Contains (buf , protoSSH ) {
123- next = GetNextLayer ("SSH" )
142+ next = GetNextLayer (LayerSSH )
124143 if err := next .Parse (buf ); err == nil {
125144 return next
126145 }
@@ -151,17 +170,17 @@ func parseNextLayerFromPorts(data []byte, src, dst *uint16) Layer {
151170 var next Layer
152171 switch {
153172 case addrMatch (src , dst , []uint16 {53 , 5353 , 853 , 5355 }):
154- next = GetNextLayer ("DNS" )
173+ next = GetNextLayer (LayerDNS )
155174 case addrMatch (src , dst , []uint16 {80 , 8080 , 8000 , 8888 , 81 , 591 , 5911 }):
156- next = GetNextLayer ("HTTP" )
175+ next = GetNextLayer (LayerHTTP )
157176 case addrMatch (src , dst , []uint16 {161 , 162 , 10161 , 10162 , 1161 , 2161 }):
158- next = GetNextLayer ("SNMP" )
177+ next = GetNextLayer (LayerSNMP )
159178 case addrMatch (src , dst , []uint16 {21 , 20 , 2121 , 8021 }):
160- next = GetNextLayer ("FTP" )
179+ next = GetNextLayer (LayerFTP )
161180 case addrMatch (src , dst , []uint16 {22 , 2222 , 2200 , 222 , 2022 }):
162- next = GetNextLayer ("SSH" )
181+ next = GetNextLayer (LayerSSH )
163182 case addrMatch (src , dst , []uint16 {443 , 465 , 993 , 995 , 8443 , 9443 , 10443 , 8444 , 5228 }):
164- next = GetNextLayer ("TLS" )
183+ next = GetNextLayer (LayerTLS )
165184 default :
166185 return nil
167186 }
@@ -187,35 +206,35 @@ func ParseNextLayer(data []byte, src, dst *uint16) Layer {
187206 return parseNextLayerFallback (buf )
188207}
189208
190- func GetNextLayer (layer string ) Layer {
209+ func GetNextLayer (layer LayerName ) Layer {
191210 switch layer {
192- case "ETH" :
211+ case LayerETH :
193212 return & EthernetFrame {}
194- case "IPv4" :
213+ case LayerIPv4 :
195214 return & IPv4Packet {}
196- case "IPv6" :
215+ case LayerIPv6 :
197216 return & IPv6Packet {}
198- case "ARP" :
217+ case LayerARP :
199218 return & ARPPacket {}
200- case "TCP" :
219+ case LayerTCP :
201220 return & TCPSegment {}
202- case "UDP" :
221+ case LayerUDP :
203222 return & UDPSegment {}
204- case "ICMP" :
223+ case LayerICMP :
205224 return & ICMPSegment {}
206- case "ICMPv6" :
225+ case LayerICMPv6 :
207226 return & ICMPv6Segment {}
208- case "DNS" :
227+ case LayerDNS :
209228 return & DNSMessage {}
210- case "FTP" :
229+ case LayerFTP :
211230 return & FTPMessage {}
212- case "HTTP" :
231+ case LayerHTTP :
213232 return & HTTPMessage {}
214- case "SNMP" :
233+ case LayerSNMP :
215234 return & SNMPMessage {}
216- case "SSH" :
235+ case LayerSSH :
217236 return & SSHMessage {}
218- case "TLS" :
237+ case LayerTLS :
219238 return & TLSMessage {}
220239 default :
221240 return nil
0 commit comments