我正在使用gopacket软件包,每当我有一个TCP数据包时,我都想检查有效载荷是否包含HTTP请求。有没有一种简单的方法可以代替编写自己的解析器呢?还有一个函数(请参阅:func ReadRequest(b * bufio.Reader)),该函数返回Request结构,但是我不知道应该使用哪种输入。tcp.Payload
是byte []数组,似乎具有我需要解析的信息(请参见以下示例):
// Get the TCP layer from this packet
if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {
fmt.Printf("TCP ")
// Get actual TCP data from this layer
tcp, _ := tcpLayer.(*layers.TCP)
srcPort = tcp.SrcPort
dstPort = tcp.DstPort
if tcp.SYN {
fmt.Print("[SYN] ")
}
if tcp.ACK {
fmt.Print("[ACK] ")
}
if tcp.FIN {
fmt.Print("[FIN] ")
}
fmt.Printf("%s:%d > %s:%d ", srcIP, srcPort, dstIP, dstPort)
fmt.Println(string(tcp.Payload))
}
发送HTTP请求后,我得到以下输出:
PKT [001] TCP [SYN] 192.168.2.6:59095 > 192.168.3.5:80
PKT [002] TCP [SYN] [ACK] 192.168.3.5:80 > 192.168.2.6:59095
PKT [003] TCP [ACK] 192.168.2.6:59095 > 192.168.3.5:80
PKT [004] TCP [ACK] 192.168.2.6:59095 > 192.168.3.5:80 GET /certificates/test.pdf HTTP/1.1
User-Agent: Wget/1.15 (linux-gnu)
Accept: */*
Host: 192.168.3.5
Connection: Keep-Alive
欢迎任何建议...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句