Lucas Teske ha revisionato questo gist 4 years ago. Vai alla revisione
1 file changed, 3 insertions, 1 deletion
onelisten.go
| @@ -8,6 +8,7 @@ import ( | |||
| 8 | 8 | "time" | |
| 9 | 9 | ) | |
| 10 | 10 | ||
| 11 | + | // Filter for syn packets | |
| 11 | 12 | const filter = "(tcp[tcpflags] & tcp-syn != 0)" | |
| 12 | 13 | ||
| 13 | 14 | func handlePacket(handle *pcap.Handle, packet gopacket.Packet) { | |
| @@ -16,6 +17,7 @@ func handlePacket(handle *pcap.Handle, packet gopacket.Packet) { | |||
| 16 | 17 | tcp := packet.TransportLayer().(*layers.TCP) | |
| 17 | 18 | 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 | ||
| 20 | + | // Build syn+ack response | |
| 19 | 21 | buf := gopacket.NewSerializeBuffer() | |
| 20 | 22 | err := gopacket.SerializeLayers(buf, gopacket.SerializeOptions{}, | |
| 21 | 23 | &layers.Ethernet{ | |
| @@ -44,7 +46,7 @@ func handlePacket(handle *pcap.Handle, packet gopacket.Packet) { | |||
| 44 | 46 | } | |
| 45 | 47 | ||
| 46 | 48 | func main() { | |
| 47 | - | handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever) | |
| 49 | + | handle, err := pcap.OpenLive("eth0", 1600, true, pcap.BlockForever) // Change eth0 for your device | |
| 48 | 50 | if err != nil { | |
| 49 | 51 | panic(err) | |
| 50 | 52 | } | |
Lucas Teske ha revisionato questo gist 4 years ago. Vai alla revisione
Nessuna modifica
Lucas Teske ha revisionato questo gist 4 years ago. Vai alla revisione
Nessuna modifica
Lucas Teske ha revisionato questo gist 4 years ago. Vai alla revisione
1 file changed, 56 insertions
onelisten.go(file creato)
| @@ -0,0 +1,56 @@ | |||
| 1 | + | package main | |
| 2 | + | ||
| 3 | + | import ( | |
| 4 | + | "fmt" | |
| 5 | + | "github.com/google/gopacket" | |
| 6 | + | "github.com/google/gopacket/layers" | |
| 7 | + | "github.com/google/gopacket/pcap" | |
| 8 | + | "time" | |
| 9 | + | ) | |
| 10 | + | ||
| 11 | + | const filter = "(tcp[tcpflags] & tcp-syn != 0)" | |
| 12 | + | ||
| 13 | + | func 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 | + | ||
| 46 | + | func 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 | + | } | |