mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-09-07 13:32:29 +00:00
Merge branch 'feat/extension-api' of github.com:up9inc/mizu into feat/extension-api
This commit is contained in:
@@ -42,20 +42,6 @@ type TcpID struct {
|
|||||||
Ident string
|
Ident string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TcpID) Swap() *TcpID {
|
|
||||||
srcIP := t.SrcIP
|
|
||||||
dstIP := t.DstIP
|
|
||||||
srcPort := t.SrcPort
|
|
||||||
dstPort := t.DstPort
|
|
||||||
|
|
||||||
return &TcpID{
|
|
||||||
SrcIP: dstIP,
|
|
||||||
SrcPort: dstPort,
|
|
||||||
DstIP: srcIP,
|
|
||||||
DstPort: srcPort,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type GenericMessage struct {
|
type GenericMessage struct {
|
||||||
IsRequest bool `json:"is_request"`
|
IsRequest bool `json:"is_request"`
|
||||||
CaptureTime time.Time `json:"capture_time"`
|
CaptureTime time.Time `json:"capture_time"`
|
||||||
|
@@ -91,7 +91,7 @@ func (d dissecting) Dissect(b *bufio.Reader, isClient bool, tcpID *api.TcpID, em
|
|||||||
}
|
}
|
||||||
success = true
|
success = true
|
||||||
} else if isClient {
|
} else if isClient {
|
||||||
err = handleHTTP1ClientStream(b, tcpID.Swap(), emitter)
|
err = handleHTTP1ClientStream(b, tcpID, emitter)
|
||||||
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
||||||
break
|
break
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
@@ -104,8 +104,7 @@ func (h *tcpReader) run(wg *sync.WaitGroup) {
|
|||||||
for _, extension := range extensions {
|
for _, extension := range extensions {
|
||||||
for _, isClient := range []bool{true, false} {
|
for _, isClient := range []bool{true, false} {
|
||||||
r.Reset(data)
|
r.Reset(data)
|
||||||
b := bufio.NewReader(r)
|
extension.Dissector.Dissect(bufio.NewReader(r), isClient, h.tcpID, h.Emitter)
|
||||||
extension.Dissector.Dissect(b, isClient, h.tcpID, h.Emitter)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,8 @@ type tcpStream struct {
|
|||||||
isDNS bool
|
isDNS bool
|
||||||
reader tcpReader
|
reader tcpReader
|
||||||
isTapTarget bool
|
isTapTarget bool
|
||||||
|
client tcpReader
|
||||||
|
server tcpReader
|
||||||
urls []string
|
urls []string
|
||||||
ident string
|
ident string
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
@@ -143,7 +145,11 @@ func (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.Ass
|
|||||||
// This is where we pass the reassembled information onwards
|
// This is where we pass the reassembled information onwards
|
||||||
// This channel is read by an tcpReader object
|
// This channel is read by an tcpReader object
|
||||||
statsTracker.incReassembledTcpPayloadsCount()
|
statsTracker.incReassembledTcpPayloadsCount()
|
||||||
t.reader.msgQueue <- tcpReaderDataMsg{data, ac.GetCaptureInfo().Timestamp}
|
if dir == reassembly.TCPDirClientToServer {
|
||||||
|
t.client.msgQueue <- tcpReaderDataMsg{data, ac.GetCaptureInfo().Timestamp}
|
||||||
|
} else {
|
||||||
|
t.server.msgQueue <- tcpReaderDataMsg{data, ac.GetCaptureInfo().Timestamp}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +157,8 @@ func (t *tcpStream) ReassembledSG(sg reassembly.ScatterGather, ac reassembly.Ass
|
|||||||
func (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool {
|
func (t *tcpStream) ReassemblyComplete(ac reassembly.AssemblerContext) bool {
|
||||||
Trace("%s: Connection closed", t.ident)
|
Trace("%s: Connection closed", t.ident)
|
||||||
if t.isTapTarget {
|
if t.isTapTarget {
|
||||||
close(t.reader.msgQueue)
|
close(t.client.msgQueue)
|
||||||
|
close(t.server.msgQueue)
|
||||||
}
|
}
|
||||||
// do not remove the connection to allow last ACK
|
// do not remove the connection to allow last ACK
|
||||||
return false
|
return false
|
||||||
|
@@ -50,7 +50,7 @@ func (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.T
|
|||||||
optchecker: reassembly.NewTCPOptionCheck(),
|
optchecker: reassembly.NewTCPOptionCheck(),
|
||||||
}
|
}
|
||||||
if stream.isTapTarget {
|
if stream.isTapTarget {
|
||||||
stream.reader = tcpReader{
|
stream.client = tcpReader{
|
||||||
msgQueue: make(chan tcpReaderDataMsg),
|
msgQueue: make(chan tcpReaderDataMsg),
|
||||||
ident: fmt.Sprintf("%s %s", net, transport),
|
ident: fmt.Sprintf("%s %s", net, transport),
|
||||||
tcpID: &api.TcpID{
|
tcpID: &api.TcpID{
|
||||||
@@ -65,9 +65,25 @@ func (factory *tcpStreamFactory) New(net, transport gopacket.Flow, tcp *layers.T
|
|||||||
outboundLinkWriter: factory.outboundLinkWriter,
|
outboundLinkWriter: factory.outboundLinkWriter,
|
||||||
Emitter: factory.Emitter,
|
Emitter: factory.Emitter,
|
||||||
}
|
}
|
||||||
factory.wg.Add(1)
|
stream.server = tcpReader{
|
||||||
|
msgQueue: make(chan tcpReaderDataMsg),
|
||||||
|
ident: fmt.Sprintf("%s %s", net, transport),
|
||||||
|
tcpID: &api.TcpID{
|
||||||
|
SrcIP: net.Dst().String(),
|
||||||
|
DstIP: net.Src().String(),
|
||||||
|
SrcPort: transport.Dst().String(),
|
||||||
|
DstPort: transport.Src().String(),
|
||||||
|
},
|
||||||
|
parent: stream,
|
||||||
|
isClient: true,
|
||||||
|
isOutgoing: props.isOutgoing,
|
||||||
|
outboundLinkWriter: factory.outbountLinkWriter,
|
||||||
|
Emitter: factory.Emitter,
|
||||||
|
}
|
||||||
|
factory.wg.Add(2)
|
||||||
// Start reading from channel stream.reader.bytes
|
// Start reading from channel stream.reader.bytes
|
||||||
go stream.reader.run(&factory.wg)
|
go stream.client.run(&factory.wg)
|
||||||
|
go stream.server.run(&factory.wg)
|
||||||
}
|
}
|
||||||
return stream
|
return stream
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user