为什么我的程序在打开网络设备时遇到问题

问题描述 投票:0回答:1

我看了libtins,并在示例中找到了[[ARP Monitor示例] >>。示例代码在这里:#include <tins/tins.h> #include <map> #include <iostream> #include <functional> using std::cout; using std::endl; using std::map; using std::bind; using namespace Tins; class arp_monitor { public: void run(Sniffer& sniffer); private: bool callback(const PDU& pdu); map<IPv4Address, HWAddress<6>> addresses; }; void arp_monitor::run(Sniffer& sniffer) { sniffer.sniff_loop( bind( &arp_monitor::callback, this, std::placeholders::_1 ) ); } bool arp_monitor::callback(const PDU& pdu) { // Retrieve the ARP layer const ARP& arp = pdu.rfind_pdu<ARP>(); // Is it an ARP reply? if (arp.opcode() == ARP::REPLY) { // Let's check if there's already an entry for this address auto iter = addresses.find(arp.sender_ip_addr()); if (iter == addresses.end()) { // We haven't seen this address. Save it. addresses.insert({ arp.sender_ip_addr(), arp.sender_hw_addr()}); cout << "[INFO] " << arp.sender_ip_addr() << " is at " << arp.sender_hw_addr() << std::endl; } else { // We've seen this address. If it's not the same HW address, inform it if (arp.sender_hw_addr() != iter->second) { cout << "[WARNING] " << arp.sender_ip_addr() << " is at " << iter->second << " but also at " << arp.sender_hw_addr() << endl; } } } return true; } int main(int argc, char* argv[]) { if(argc != 2) { cout << "Usage: " <<* argv << " <interface>" << endl; return 1; } arp_monitor monitor; // Sniffer configuration SnifferConfiguration config; config.set_promisc_mode(true); config.set_filter("arp"); try { // Sniff on the provided interface in promiscuous mode Sniffer sniffer(argv[1], config); // Only capture arp packets monitor.run(sniffer); } catch (std::exception& ex) { std::cerr << "Error: " << ex.what() << std::endl; } }

我在这里运行此代码:

myprogram.exe eth0

结果是:

错误:打开适配器时出错:系统找不到给定的设备。 (20)

[以上词语的定义:

eth0:我的网络设备

libtins:高级,多平台C ++网络数据包嗅探和制作库

ARP:地址解析协议

我在Windows上仅对一个名为“ Shadow”的用户运行过它>

Image of the Users Directory

我查看了libtins,并在示例中找到了ARP Monitor示例。示例代码在这里是这样的:#include

#include #include #...

c++ libpcap libtins
1个回答
0
投票
基于te OP上传的图像,我只能得出结论,我认为他在Windows上运行该程序是正确的,所以我只从libtins's documentation复制:

为了在Windows上捕获数据包,您可以首先列出所有网络接口。您可以使用NetworkInterface类轻松地做到这一点:

© www.soinside.com 2019 - 2024. All rights reserved.