1
2.6 커널의 netfilter 커널 모듈을 사용하고 4.1.23으로 이식합니다. 내 후크 기능이 손상된 것 같습니다. 패킷 헤더를 검색 할 수 없습니다.Netfilter 커널 모듈을 4.1.23으로 마이그레이션 - ip 헤더를 가져올 수 없음
다음은 2.6 커널의 코드입니다. 이것은 오랜 시간 동안 생산되고 있습니다.
static unsigned int main_hook(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in,const struct net_device *out, int (*okfn)(struct sk_buff*))
{
//struct sk_buff *skb = (skb_p);
struct iphdr *ih = (struct iphdr *)(skb->data);
u32 saddr = ih->saddr;
u32 daddr = ih->daddr;
검사 netfilter.h하고 다음과 같이 4.1.23
static unsigned int main_hook(const struct nf_hook_ops *ops, struct sk_buff *skb, const struct nf_hook_state *state)
{
//struct sk_buff *skb = (skb_p);
struct iphdr *ih = (struct iphdr *)(skb->data);
u32 saddr = ih->saddr;
u32 daddr = ih->daddr;
등록 후크 다음에 도달하기 위해 인터넷을 검색.
netfilter_ops.hook = main_hook;
netfilter_ops.pf = PF_INET;
netfilter_ops.hooknum = NF_INET_FORWARD;
netfilter_ops.priority = NF_IP_PRI_FIRST;
netfilter_ops.owner = THIS_MODULE;
nf_register_hook(&netfilter_ops);
saddr 및 daddr에서 소스 및 대상 IP를 가져 오지 못했습니다.
결과 여기static unsigned int main_hook(const struct nf_hook_ops *ops, struct sk_buff *skb, const struct nf_hook_state *state)
{
struct iphdr *ip_header = (struct iphdr *) (skb->data);
unsigned int src_ip = (unsigned int)ip_header->saddr;
unsigned int dest_ip = (unsigned int)ip_header->daddr;
printk("IP addres = %pI4 DEST = %pI4\n", &src_ip, &dest_ip);
return NF_ACCEPT;
되어 다음
제거 모든과 노력
[37501.345997] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37506.337854] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37511.345295] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37516.337132] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37521.344589] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37526.336426] IP addres = 0.0.0.0 DEST = 0.0.0.0
[37531.343866] IP addres = 0.0.0.0 DEST = 0.0.0.0
buff = (unsigned char *) skb->data;
for (i=0;i<60;i++) printk("%d.", buff[i]);
printk("\n");
내가 데이터를 얻을 기능을 사용하여 시도 (skb_network_header) 정크 너무 다음하지만 점점 시도 , 심지어 hello world를 쓰려고 노력했다. 도와주세요.