Última actividad 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

Revisión 03faa254255214cde526bad905e9f1acecb21de5

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