gpt4 book ai didi

http - 戈朗 : how to check if an HTTP request is in the TCP payload bytes

转载 作者:IT王子 更新时间:2023-10-29 02:13:28 27 4
gpt4 key购买 nike

我正在使用 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

欢迎提出任何建议...

最佳答案

在这个问题的帮助下:How to parse http headers in Go以下使用 http.ReadRequest() 的尝试有效...

if tcpLayer := packet.Layer(layers.LayerTypeTCP); tcpLayer != nil {
tcp, _ := tcpLayer.(*layers.TCP)
if len(tcp.Payload) != 0 {
reader := bufio.NewReader(bytes.NewReader(tcp.Payload))
httpReq, err := http.ReadRequest(reader)
...
}
}

关于http - 戈朗 : how to check if an HTTP request is in the TCP payload bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39082404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com