2

でアプリケーションを作成しますnetfilter hooks

関数が正しく計算されないようですskb_transport_header(常にではありませんが):

struct tcphdr* tcp_header = NULL;
tcp_header = (struct tcphdr*)skb_transport_header(skb); // somtimes incorrect address.
tcp_header = (struct tcphdr*)((char*)ip_header + (ip_header->ihl * 4));// always correct address.

私の間違いはどこですか?

4

2 に答える 2

4

ここで確認できます: http://www.roman10.net/how-to-filter-network-packets-using-netfilterpart-2-implement-the-hook-function/ 問題は、ネットワーク層での netfilter の実装です。パケットが物理層から上がった場合、tcp層に到達する前にパケットをキャッチすると、一部の機能が処理されません。

于 2013-05-01T11:56:20.123 に答える
0

カーネル バージョンは非常に重要な情報です。Linux ネットワーク カーネルでは、SKB の transport_header (およびその他の多くのプロパティ) は、(ドライバーによって) 最初に作成されたときに設定されず、SKB のデータ ポインターが移動される間、レイヤーごとに SKB が処理されます。したがって、フックが低い場合、つまり BRIDGE レベルにある場合は、アクセスしたときに設定されていない可能性があります。

于 2012-05-08T13:07:48.097 に答える