以下是一个使用C++编写的简单程序,用于抓取网络数据包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include <iostream> #include <pcap.h>
void packetHandler(unsigned char* userData, const struct pcap_pkthdr* pkthdr, const unsigned char* packetData) { std::cout << "Packet captured!" << std::endl; }
int main() { pcap_t* handle; char errbuf[PCAP_ERRBUF_SIZE];
handle = pcap_open_live("eth0", 65536, 1, 1000, errbuf); if (handle == nullptr) { std::cerr << "Error opening device: " << errbuf << std::endl; return 1; }
struct bpf_program fp; std::string filter = "tcp port 80"; if (pcap_compile(handle, &fp, filter.c_str(), 0, PCAP_NETMASK_UNKNOWN) == -1) { std::cerr << "Error compiling filter: " << pcap_geterr(handle) << std::endl; pcap_close(handle); return 1; } if (pcap_setfilter(handle, &fp) == -1) { std::cerr << "Error setting filter: " << pcap_geterr(handle) << std::endl; pcap_close(handle); return 1; }
pcap_loop(handle, 0, packetHandler, nullptr);
pcap_close(handle);
return 0; }
|
这个程序使用了 pcap 库来进行网络数据包的抓取。首先,它打开了一个网络设备,然后可以设置过滤器来选择特定类型或端口的数据包进行捕获。在 packetHandler 函数中,可以处理抓到的每个数据包。这里只是简单地输出一条消息,你可以根据自己的需求对数据包进行相应的处理。
请注意,由于需要访问网络设备,因此执行此程序可能需要管理员权限。还要确保已安装 libpcap 库和相应的开发包。具体的编译和运行方式可能会有所不同,具体取决于你所使用的操作系统和编译环境。