Last active 1 month ago

One program, to listen to all TCP ports. It actually doesnt listen, but sniff them. - Based on http://maycon.hacknroll.io/hacking-tricks/2019/11/05/trick-check-outgoing-ports.html

Revision 654529aea3d16d2f4729efc562c3b82e1eaec2b2

onelisten.go Raw
1package main
2
3import (
4 "fmt"
5 "github.com/google/gopacket"
6 "github.com/google/gopacket/layers"
7 "github.com/google/gopacket/pcap"
8 "time"
9)
10
11// Filter for syn packets
12const filter = "(tcp[tcpflags] & tcp-syn != 0)"
13
14func handlePacket(handle *pcap.Handle, packet gopacket.Packet) {
15 eth := packet.LinkLayer().(*layers.Ethernet)
16 ipv4 := packet.NetworkLayer().(*layers.IPv4)
17 tcp := packet.TransportLayer().(*layers.TCP)
18 fmt.Printf("[%s] SYN packet received from %s on port %d. Replying with SYN+ACK...\n", time.Now().String(), ipv4.SrcIP, tcp.DstPort)
19
20 // Build syn+ack response
21 buf := gopacket.NewSerializeBuffer()
22 err := gopacket.SerializeLayers(buf, gopacket.SerializeOptions{},
23 &layers.Ethernet{
24 DstMAC: eth.SrcMAC,
25 SrcMAC: eth.DstMAC,
26 },
27 &layers.IPv4{
28 SrcIP: ipv4.DstIP,
29 DstIP: ipv4.SrcIP,
30 },
31 &layers.TCP{
32 SrcPort: tcp.DstPort,
33 DstPort: tcp.SrcPort,
34 Seq: tcp.Ack,
35 Ack: tcp.Seq + 1,
36 SYN: true,
37 ACK: true,
38 })
39 if err != nil {
40 panic(err)
41 }
42 err = handle.WritePacketData(buf.Bytes())
43 if err != nil {
44 panic(err)
45 }
46}
47
48func main() {
49 handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever) // Change eth0 for your device
50 if err != nil {
51 panic(err)
52 }
53 _ = handle.SetBPFFilter(filter)
54 packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
55 for packet := range packetSource.Packets() {
56 handlePacket(handle, packet)
57 }
58}
59