- 论坛徽章:
- 0
|
原帖由 Godbach 于 2009-8-19 11:41 发表
可以的话,把你封装IP头的代码贴出来一部分看一下。
//在协议栈NF_IP_POST_ROUTING的hook处,放了一个封装自己ip头的程序,是数据变为ipip协议进行发送
static unsigned int packet_encapsulation(unsigned int hook, struct sk_buff **pskb, const struct net_device *indev, const struct net_device *outdev, int(* okfn)(struct sk_buff *))
{
struct sk_buff *skb = NULL;
struct iphdr *hdr = NULL;
struct iphdr *iph = NULL;
skb=*pskb;
hdr=skb->nh.iph;
skb_reserve(skb,skb->nh.iph->ihl* 4);//data,tail同时往后移20个字节
skb->h.raw = skb->nh.raw;//使h.raw指向nh.raw位置
skb->nh.raw = skb_push(skb, sizeof(struct iphdr));//将data指针上移20个字节,用于填充自己的ip时使用
iph = skb->nh.iph;
iph->version = hdr->version;
iph->ihl = hdr->ihl;
iph->tos = hdr->tos;
iph->tot_len = htons(ntohs(hdr->tot_len) + skb->nh.iph->ihl* 4);
iph->id = hdr->id;
iph->frag_off = hdr->frag_off;
iph->ttl = hdr->ttl;
iph->protocol = IPPROTO_IPIP;//ipip协议号
iph->daddr = dst;//自己制定的ip地址
iph->saddr = src;//自己制定的ip地址
iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
return NF_ACCEPT;
}
这是我程序大致的关键一部分,现在,我在tcpdump出来的包,只有一个ip头,而且这还是我自己定义的那个头,以前的ip头竟然不见啦,我的老天呀,怎么会这样,我也没清空呀也没丢弃呀,咋会这样的?
“Godbach”帮我看看,好嘛,不知道 是不是还有什么地方没想到,或是错啦。 |
|