Skip to content

Commit ff4bc78

Browse files
committed
fixed packet sender really this time
1 parent 81bb864 commit ff4bc78

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

providers/http/nfqueue/nfqueue.go

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)