@@ -11,7 +11,6 @@ import (
1111 "net/http"
1212 "os/exec"
1313 "strings"
14- "syscall"
1514 "time"
1615
1716 gnfqueue "github.com/florianl/go-nfqueue"
@@ -62,40 +61,35 @@ func craftReplyPacketBytes(keyAuth string, inputpacket gopacket.Packet) []byte {
6261 httplayer := gopacket .Payload (craftkeyauthresponse (keyAuth ))
6362 tcplayer := & layers.TCP {
6463 // we reply back so reverse src and dst ports
65- SrcPort : inputTcp .DstPort ,
66- DstPort : inputTcp .SrcPort ,
67- Ack : inputTcp .Seq + uint32 (len (inputTcp .Payload )),
68- Seq : inputTcp .Ack - 1 ,
69- DataOffset : 5 ,
70- PSH : true ,
64+ SrcPort : inputTcp .DstPort ,
65+ DstPort : inputTcp .SrcPort ,
66+ Ack : inputTcp .Seq + uint32 (len (inputTcp .Payload )),
67+ Seq : inputTcp .Ack ,
68+ PSH : true ,
69+ ACK : true ,
7170 }
71+ // log.Infof("dstp: %s, srcp %s", tcplayer.DstPort.String(), tcp)
7272 //check network layer
7373 // this is reply so we reverse sorce and dst ip
7474 iplayer := & layers.IPv4 {
7575 SrcIP : inputIPv4 .DstIP ,
7676 DstIP : inputIPv4 .SrcIP ,
7777 }
7878 tcplayer .SetNetworkLayerForChecksum (iplayer )
79- gopacket .SerializeLayers (outbuffer , opt , iplayer , tcplayer , httplayer )
79+ gopacket .SerializeLayers (outbuffer , opt , tcplayer , httplayer )
8080
8181 return outbuffer .Bytes ()
8282}
8383
84- func sendPacketv4 (packet []byte , DstIP net.IP ) {
84+ func sendPacketv4 (packet []byte , DstIP * net.IP ) {
8585 var err error
86- DstIP = DstIP .To4 ()
87- dst := [4 ]byte {DstIP [0 ], DstIP [1 ], DstIP [2 ], DstIP [3 ]}
88- sk , err := syscall .Socket (syscall .AF_INET , syscall .SOCK_RAW , syscall .IPPROTO_RAW )
86+ con , err := net .Dial ("ip:6" , DstIP .String ())
8987 if err != nil {
90- panic (err )
88+ log . Fatal (err )
9189 }
92- addr := syscall.SockaddrInet4 {
93- Port : 0 ,
94- Addr : dst ,
95- }
96- err = syscall .Sendto (sk , packet , 0 , & addr )
90+ _ , err = con .Write (packet )
9791 if err != nil {
98- log .Fatal ("Sendto:" , err )
92+ log .Fatal (err )
9993 }
10094}
10195
@@ -134,12 +128,13 @@ func (w *HTTPProvider) serve(domain, token, keyAuth string) error {
134128 payload := gopacket .NewPacket (* a .Payload , layers .LayerTypeIPv4 , opt )
135129 ipL := payload .Layer (layers .LayerTypeIPv4 )
136130 srcip := ipL .(* layers.IPv4 ).SrcIP
137- log .Infof ("%s" , srcip .String ())
131+ log .Infof ("%s, %s " , srcip .String ())
138132 if tcpLayer := payload .Layer (layers .LayerTypeTCP ); tcpLayer != nil {
139133 // Get actual TCP data from this layer
140134 inputTcp , _ := tcpLayer .(* layers.TCP )
141135 log .Infof ("From src port %d to dst port %d\n " , inputTcp .SrcPort , inputTcp .DstPort )
142- log .Infof ("layer under P %s" , inputTcp .Payload )
136+ log .Infof ("Payload: %s" , inputTcp .Payload )
137+ log .Infof ("tcp header: %s" , inputTcp .LayerContents ())
143138 // this should be HTTP payload
144139 httpPayload , err := http .ReadRequest (bufio .NewReader ((bytes .NewReader (inputTcp .LayerPayload ()))))
145140 if err != nil {
@@ -157,7 +152,7 @@ func (w *HTTPProvider) serve(domain, token, keyAuth string) error {
157152 //dial validation agent
158153 // Send the modified packet back into the session
159154 log .Infof (string (replypacket ))
160- sendPacketv4 (replypacket , srcip )
155+ sendPacketv4 (replypacket , & srcip )
161156 // packet sent, end of function
162157 return 0
163158 } else {
0 commit comments