2015-12-23 68 views
0

首先,我是一个新手,所以要温柔....我正在使用libtins库的包装。我希望能够检测ARP请求并获取发件人的MAC地址。我已经链接了libtins并让我的代码正常运行,我能够检测到dot11frameBeacons并获取硬件地址,因此我拥有了一切结构良好的功能(我认为)。libtins ARP请求检测

这里是我的注册ARP代码请求

class ofxSnifferARPRequestFrame { 
public: 
    bool isValid = false; 

    string ssid; 
    HWAddress<6> addr; 

    ofxSnifferARPRequestFrame() {} 

    ofxSnifferARPRequestFrame(Packet packet) { 
     try { 
      packet.pdu()->rfind_pdu<Tins::ARP>(); 
      cout<<"ARP REQUEST RECEIVED"<<endl; 

      const Tins::ARP &data = packet.pdu()->rfind_pdu<Tins::ARP>(); 

      addr = get_dst_addr_ARP(data); 
      isValid = true; 
     } catch (...) { 
     } 
    } 
}; 

我没有得到任何回应时,我初始化WiFi设备(但在同一个程序我得到dot11帧的信标不变通知)。当我使用相同的设备连接到我的网络,同时使用wireshark监控它时,我看到了arp请求。任何我做错的线索都会很棒。我以为这一行

  packet.pdu()->rfind_pdu<Tins::ARP>(); 

会找到arp请求。

仅供参考,相关代码可用于获取dot11帧信标。

class ofxSnifferProbeRequestFrame { 
public: 
    bool isValid = false; 

    string ssid; 
    HWAddress<6> addr; 

    ofxSnifferProbeRequestFrame() {} 

    ofxSnifferProbeRequestFrame(Packet packet) { 
     try { 
      packet.pdu()->rfind_pdu<Tins::Dot11ProbeRequest>(); 


      const Tins::Dot11ManagementFrame &data = packet.pdu()->rfind_pdu<Tins::Dot11ManagementFrame>(); 
      ssid = data.ssid(); 
      addr = get_src_addr(data); 
      isValid = true; 
     } catch (...) { 
     } 
    } 
}; 

干杯

回答

0

好吧,这是没有那么复杂,我是我的初始化启用监控模式,嗅探器来听ARP请求嗅探器不应该启用监控模式。我的init代码不在最初的问题中,并且使得我无法从我发布的代码中解决 - 我的错误。

我解决了这个问题,通过再次检查wirecast并注意到当我收到arp请求通知时,我的wifi没有处于监视模式。