mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-26 04:19:02 +00:00
Fix the mixed offsets and dissection preparation
This commit is contained in:
parent
f54d9a453f
commit
3b27c5c704
@ -186,6 +186,8 @@ func (d dissecting) Dissect(b *bufio.Reader, reader api.TcpReader, options *api.
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switchingProtocolsHTTP2, err = handleHTTP1ServerStream(b, reader.GetReadProgress(), reader.GetParent().GetOrigin(), reader.GetTcpID(), reader.GetCounterPair(), reader.GetCaptureTime(), reader.GetEmitter(), options, reqResMatcher)
|
switchingProtocolsHTTP2, err = handleHTTP1ServerStream(b, reader.GetReadProgress(), reader.GetParent().GetOrigin(), reader.GetTcpID(), reader.GetCounterPair(), reader.GetCaptureTime(), reader.GetEmitter(), options, reqResMatcher)
|
||||||
|
// TODO: Golang TLS malformed HTTP response
|
||||||
|
fmt.Printf("err: %v\n", err)
|
||||||
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
||||||
break
|
break
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
@ -137,7 +137,7 @@ static __always_inline int golang_net_http_dialconn_uprobe(struct pt_regs *ctx)
|
|||||||
__u64 key_socket = (pid << 32) + ctx->r14;
|
__u64 key_socket = (pid << 32) + ctx->r14;
|
||||||
status = bpf_map_update_elem(&golang_socket_dials, &key_socket, &b, BPF_ANY);
|
status = bpf_map_update_elem(&golang_socket_dials, &key_socket, &b, BPF_ANY);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
bpf_printk("[golang_net_socket_uprobe] error setting socket: %d", status);
|
bpf_printk("[golang_net_http_dialconn_uprobe] error setting socket: %d", status);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -34,7 +34,7 @@ func (s *golangHooks) installHooks(bpfObjects *tlsTapperObjects, ex *link.Execut
|
|||||||
// Relative offset points to
|
// Relative offset points to
|
||||||
// [`net/http.(*Transport).dialConn+412`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/http/transport.go#L1564)
|
// [`net/http.(*Transport).dialConn+412`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/http/transport.go#L1564)
|
||||||
s.golangDialProbe, err = ex.Uprobe(golangDialSymbol, bpfObjects.GolangNetHttpDialconnUprobe, &link.UprobeOptions{
|
s.golangDialProbe, err = ex.Uprobe(golangDialSymbol, bpfObjects.GolangNetHttpDialconnUprobe, &link.UprobeOptions{
|
||||||
Offset: offsets.GolangWriteOffset + 0x19c,
|
Offset: offsets.GolangDialOffset + 0x19c,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -44,7 +44,7 @@ func (s *golangHooks) installHooks(bpfObjects *tlsTapperObjects, ex *link.Execut
|
|||||||
// Relative offset points to
|
// Relative offset points to
|
||||||
// [`net.socket+127`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/sock_posix.go#L23)
|
// [`net.socket+127`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/sock_posix.go#L23)
|
||||||
s.golangSocketProbe, err = ex.Uprobe(golangSocketSymbol, bpfObjects.GolangNetSocketUprobe, &link.UprobeOptions{
|
s.golangSocketProbe, err = ex.Uprobe(golangSocketSymbol, bpfObjects.GolangNetSocketUprobe, &link.UprobeOptions{
|
||||||
Offset: offsets.GolangWriteOffset + 0x7f,
|
Offset: offsets.GolangSocketOffset + 0x7f,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -63,7 +63,7 @@ func (s *golangHooks) installHooks(bpfObjects *tlsTapperObjects, ex *link.Execut
|
|||||||
|
|
||||||
// Relative offset points to
|
// Relative offset points to
|
||||||
// [`net/http.(*persistConn).Read+92`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/http/transport.go#L1929)
|
// [`net/http.(*persistConn).Read+92`](https://github.com/golang/go/blob/fe4de36198794c447fbd9d7cc2d7199a506c76a5/src/net/http/transport.go#L1929)
|
||||||
s.golangReadProbe, err = ex.Uprobe(golangWriteSymbol, bpfObjects.GolangNetHttpReadUprobe, &link.UprobeOptions{
|
s.golangReadProbe, err = ex.Uprobe(golangReadSymbol, bpfObjects.GolangNetHttpReadUprobe, &link.UprobeOptions{
|
||||||
Offset: offsets.GolangReadOffset + 0x5c,
|
Offset: offsets.GolangReadOffset + 0x5c,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -67,10 +67,10 @@ func findGolangOffsets(filePath string) (golangOffsets, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return golangOffsets{
|
return golangOffsets{
|
||||||
|
GolangDialOffset: dialOffset,
|
||||||
|
GolangSocketOffset: socketOffset,
|
||||||
GolangWriteOffset: writeOffset,
|
GolangWriteOffset: writeOffset,
|
||||||
GolangReadOffset: readOffset,
|
GolangReadOffset: readOffset,
|
||||||
GolangSocketOffset: socketOffset,
|
|
||||||
GolangDialOffset: dialOffset,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +172,16 @@ func (p *tlsPoller) pollGolangReadWrite(rd *ringbuf.Reader, emitter api.Emitter,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if connection.GotRequest && connection.GotResponse {
|
if connection.GotRequest && connection.GotResponse {
|
||||||
|
// TODO: Remove these comments
|
||||||
|
// fmt.Printf("\n\nconnection.Pid: %v\n", connection.Pid)
|
||||||
|
// fmt.Printf("connection.ConnAddr: 0x%x\n", connection.ConnAddr)
|
||||||
|
// fmt.Printf("connection.AddressPair.srcIp: %v\n", connection.AddressPair.srcIp)
|
||||||
|
// fmt.Printf("connection.AddressPair.srcPort: %v\n", connection.AddressPair.srcPort)
|
||||||
|
// fmt.Printf("connection.AddressPair.dstIp: %v\n", connection.AddressPair.dstIp)
|
||||||
|
// fmt.Printf("connection.AddressPair.dstPort: %v\n", connection.AddressPair.dstPort)
|
||||||
|
// fmt.Printf("connection.Request:\n%v\n", unix.ByteSliceToString(connection.Request))
|
||||||
|
// fmt.Printf("connection.Response:\n%v\n", unix.ByteSliceToString(connection.Response))
|
||||||
|
|
||||||
tcpid := p.buildTcpId(&connection.AddressPair)
|
tcpid := p.buildTcpId(&connection.AddressPair)
|
||||||
|
|
||||||
tlsEmitter := &tlsEmitter{
|
tlsEmitter := &tlsEmitter{
|
||||||
@ -188,7 +198,7 @@ func (p *tlsPoller) pollGolangReadWrite(rd *ringbuf.Reader, emitter api.Emitter,
|
|||||||
extension: p.extension,
|
extension: p.extension,
|
||||||
emitter: tlsEmitter,
|
emitter: tlsEmitter,
|
||||||
counterPair: &api.CounterPair{},
|
counterPair: &api.CounterPair{},
|
||||||
reqResMatcher: p.reqResMatcher,
|
reqResMatcher: p.extension.Dissector.NewResponseRequestMatcher(),
|
||||||
}
|
}
|
||||||
|
|
||||||
stream := &tlsStream{
|
stream := &tlsStream{
|
||||||
@ -211,6 +221,7 @@ func (p *tlsPoller) pollGolangReadWrite(rd *ringbuf.Reader, emitter api.Emitter,
|
|||||||
SrcPort: reader.tcpID.DstPort,
|
SrcPort: reader.tcpID.DstPort,
|
||||||
DstPort: reader.tcpID.SrcPort,
|
DstPort: reader.tcpID.SrcPort,
|
||||||
}
|
}
|
||||||
|
reader.progress = &api.ReadProgress{}
|
||||||
|
|
||||||
err = p.extension.Dissector.Dissect(bufio.NewReader(bytes.NewReader(connection.Response)), reader, options)
|
err = p.extension.Dissector.Dissect(bufio.NewReader(bytes.NewReader(connection.Response)), reader, options)
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user