2012-02-12 5 views
4

netfilterフックで簡単なパケット検査を処理しようとしています。C - saddrにアクセスできない

unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb, 
      const struct net_device *in, 
      const struct net_device *out, int (*okfn)(struct sk_buff *)) 
{ 

    struct iphdr *iph = (struct iphdr *)skb_network_header(skb); 

} 

そして私は、ネットワークヘッダ

iph->protocol == IPPROTO_TCP

しかし

iph->saddr

は失敗のプロトコル部分にアクセスすることができます。

宣言はかなり簡単そうです。助言がありますか?私は、これが私の部分にかなり単純な誤りであるように感じますが、すべての例は、このいずれかの方法に従うか、彼らは単に私は両方の方法で同じ動作を得る

struct iphdr *iph = ip_hdr(skb);

使用しています。私はskbuff.hを通してあらゆる手がかりを見てきましたが、運がなかったのです。

EDIT:

これは、彼らが道私はそれをアクセスしていますがとしなければならないだろうか?今デバッグのために私は、単に使用して値をプリントアウトしようとしています:あなたはおそらく無効なメモリを読んでいるよう

printk(KERN_DEBUG "%pI4", iph->saddr);

+0

エラーメッセージが表示されますか?それは何ですか? –

+0

それはマシンを殺します。私は通常、私のVMでスナップショットをリセットします。コンパイル時にエラーはありません。カーネルクラッシュ後にエラーメッセージを表示する方法はありますか? – kevgliss

答えて

2

%pI4は、アドレスを取ります。代わりに&iph->saddrを使用してください。

+0

これはそれでした!キャッチをありがとう。 – kevgliss

関連する問題