-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Description
Hi,
I am trying to write a divert socket application via gopacket with url filtering.
If url is not permitted according to our policy, the packet is not injected into kernel.
For example(real scenario): I request to get 2MB jpg data, image not injected to kernel, the tcp payload length is just 600bytes as it's supposed to be.
At this point how can i get requested real data size ?
Note: Client sends SYN to server, Server sends SYN+ACK, i want to get real data size before "Client sends ACK" scenario
packetSource := gopacket.NewPacketSource(pc, layers.LayerTypeTCP)
for packet := range packetSource.Packets() {
// Http Request
readerClient := bufio.NewReader(bytes.NewReader(tcp.Payload))
httpReq, _ := http.ReadRequest(readerClient)
if(httpReq!=nil){
reqHost:=fmt.Sprintf("%v",httpReq.Host)
reqURL:=fmt.Sprintf("%v",httpReq.URL)
webURL=reqHost+reqURL
boolVar:=CheckWebUrl(webURL)
if(boolVar){
pc.WritePacketData(packet.Data())
}
}
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels