Во-первых, я новичок, так что будьте осторожны... Я использую оболочку для библиотеки libtins. Я хочу иметь возможность обнаруживать запросы arp и получать mac-адрес отправителя. Я связал libtins, и мой код работает, я могу обнаружить dot11frameBeacons и получить аппаратный адрес, поэтому у меня все структурно в порядке (я думаю).
Вот мой код для регистрации запросов 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 (...) {
}
}
};
Я не получаю ответа, когда инициализирую устройство Wi-Fi (однако в той же программе я получаю постоянные уведомления о маяках кадра 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 (...) {
}
}
};
Ваше здоровье