4

私は現在、iptables の NFQUEUE ターゲットでキューに入れられたパケットを変更するために、ユーザー空間で libnetfilter_queue のコードを使用しようとしています。しかし、私はそれを行う方法についてほとんど考えていません。

NFQNL_COPY_PACKET を使用してパケットをコピーするように設定しました。コピーされたパケットを変更すると、関数 nfq_set_verdict() によって自動的にカーネルに送り返されますか?

さらに、以前に pcap ファイルからパケットを抽出する作業を行ったことがありますが、nfq_get_payload() から取得したデータが非常に異なっているように見えることに気付きました。データを分析する方法を知っている人はいますか?

4

1 に答える 1

1

nfq_set_verdict で判定を NF_REPEAT に設定すると、パケット (変更されているかどうかにかかわらず) は再び iptables mangle OUTPUT チェーン、nat OUTPUT チェーン、フィルター OUTPUT チェーンなどに入ります (つまり、何らかのアプリが送信したかのように動作します)。

データを抽出するには、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 ヘッダー データが含まれるようになりました。

于 2011-10-14T11:32:41.210 に答える