Модификация пакета с очередью netfilter? - PullRequest
2 голосов
/ 19 июля 2011

В настоящее время я пытаюсь использовать коды с libnetfilter_queue в пользовательском пространстве для изменения пакетов, которые были поставлены в очередь в целевом объекте NFQUEUE в iptables.Однако я мало представляю, как это сделать.

Я установил его для копирования пакета с помощью NFQNL_COPY_PACKET. Если бы я изменил скопированный пакет, он автоматически отправлялся обратно в ядро ​​с помощью функции nfq_set_verdict ()?

Кроме того, яРанее работал с извлечением пакетов из файла pcap, однако я заметил, что данные, которые я получаю с помощью nfq_get_payload (), похоже, сильно отличаются.Кто-нибудь знает, как анализировать данные?

1 Ответ

1 голос
/ 14 октября 2011

Если в nfq_set_verdict вы установите вердикт как NF_REPEAT, пакет (измененный или нет) снова войдет в цепочку OUTPUT mangle iptables, nat OUTPUT chane, цепочку OUTPUT фильтра и т. Д. (Другими словами, он будет действовать так, как будто какое-то приложение отправленоit)

Чтобы извлечь данные, используйте этот шаблон в обратном вызове обработчика NFQUEUE:

int queueHandle_input ( struct nfq_q_handle *qh, struct nfgenmsg *nfmsg, struct nfq_data *nfad, void *mdata ){

struct iphdr *ip;
int id;
struct nfqnl_msg_packet_hdr *ph = nfq_get_msg_packet_hdr ( ( struct nfq_data * ) nfad );
if ( ph ) id = ntohl ( ph->packet_id );
nfq_get_payload ( ( struct nfq_data * ) nfad, (char**)&ip );

Теперь ip содержит данные заголовка IP в сетевом порядке байтов.

...