MCPcopy
hub / github.com/dreadl0ck/netcap / Decode

Method Decode

decoder/stream/socks/socks_reader.go:76–123  ·  view source on GitHub ↗

Decode parses SOCKS protocol from the stream.

()

Source from the content-addressed store, hash-verified

74
75// Decode parses SOCKS protocol from the stream.
76func (s *socksReader) Decode() {
77 if Decoder.Writer == nil {
78 socksLog.Error("SOCKS Decoder.Writer is nil")
79 return
80 }
81
82 var clientBuf, serverBuf bytes.Buffer
83
84 for _, d := range s.conversation.Data {
85 if d.Direction() == reassembly.TCPDirClientToServer {
86 clientBuf.Write(d.Raw())
87 } else {
88 serverBuf.Write(d.Raw())
89 }
90 }
91
92 clientData := clientBuf.Bytes()
93 serverData := serverBuf.Bytes()
94
95 if len(clientData) == 0 {
96 return
97 }
98
99 version := clientData[0]
100
101 var msg *types.SOCKS
102 switch version {
103 case SOCKS5:
104 msg = s.parseSOCKS5(clientData, serverData)
105 case SOCKS4:
106 msg = s.parseSOCKS4(clientData, serverData)
107 }
108
109 if msg != nil {
110 msg.SrcIP = s.conversation.ClientIP
111 msg.DstIP = s.conversation.ServerIP
112 msg.SrcPort = int32(s.conversation.ClientPort)
113 msg.DstPort = int32(s.conversation.ServerPort)
114 msg.CommunityID = s.conversation.CommunityID
115
116 err := Decoder.Writer.Write(msg)
117 if err != nil {
118 socksLog.Error("failed to write SOCKS record", zap.Error(err))
119 } else {
120 atomic.AddInt64(&Decoder.NumRecordsWritten, 1)
121 }
122 }
123}
124
125func (s *socksReader) parseSOCKS5(clientData, serverData []byte) *types.SOCKS {
126 msg := &types.SOCKS{

Callers

nothing calls this directly

Calls 7

parseSOCKS5Method · 0.95
parseSOCKS4Method · 0.95
BytesMethod · 0.80
DirectionMethod · 0.65
WriteMethod · 0.65
RawMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected