Во-первых, я новичок, так что будьте осторожны … Я использую обертку для библиотеки 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 (однако в той же программе я получаю постоянные уведомления о маяках с точками кадра11). Когда я использую одно и то же устройство для подключения к своей сети, а я наблюдаю за ним с помощью 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 (...) {
}
}
};
ура
Хорошо, это было не так сложно, я инициализировал мой сниффер с включенным режимом монитора, чтобы прослушивать ARP-запросы, у сниффера не должен быть включен режим монитора. Мой код инициализации отсутствует в исходном вопросе, и это делает невозможным решение из кода, который я разместил — моя ошибка.
Я решил эту проблему, проверив еще раз с помощью Wirecast и заметив, что когда я получал уведомления о запросе arp, мой Wi-Fi не был в режиме монитора.
Других решений пока нет …