2012-02-12 3 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를 보았지만 운이 없었습니다.

편집 :

이 그들이 방법 내가 접근하고 함께해야 할 수 있을까? 지금 디버깅을 위해 나는 단지 사용하여 값을 출력하는 것을 시도하고있다 : 당신이 가능하게 잘못된 메모리를 읽고 있도록

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

+0

오류 메시지가 나타 납니까? 이게 뭐야? –

+0

그것은 기계를 죽입니다. 저는 보통 내 VM에서 스냅 샷을 재설정합니다. 컴파일 시간 오류가 없습니다. 커널 충돌 후 오류 메시지가 표시되는 방법이 있습니까? – kevgliss

답변

2

%pI4는 주소를합니다. 대신 &iph->saddr을 사용하십시오.

+0

이것은 그 것이었다! 캐치를 가져 주셔서 감사합니다. – kevgliss

관련 문제