Я использую сетевой фильтр для захвата UDP-пакета и получения пакета на стороне приложения при обратном вызове. ниже я дал функцию обратного вызова. Я обрабатываю данные в функции обратного вызова, но в основном пакеты пропускаются, но в драйвере все пакеты добавляются в NF_QUEUE
Я использую сетевой фильтр для захвата UDP-пакета и получения пакета на стороне приложения при обратном вызове. ниже я дал функцию обратного вызова. Я обрабатываю данные в функции обратного вызова, но в основном пакеты пропускаются, но в драйвере все пакеты добавляются в NF_QUEUE [code]int device::filter_fn(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg, struct nfq_data *nfa, void *data) { int id;
struct nfqnl_msg_packet_hdr *ph; ph = nfq_get_msg_packet_hdr(nfa); id = ntohl(ph->packet_id); printf("filter function id=%d\n",id);
unsigned char *pktData; int len = nfq_get_payload(nfa, &pktData);
if ( id % 3 == 0) return nfq_set_verdict(qh, id, NF_DROP, 0, NULL);
return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL); } [/code] Как избежать потери пакетов? Я пытался решить эту проблему, реализовав потоки для обработки данных, но после этого у меня возникла та же проблема п>