codewar
有关netfilter 收到的数据包check不变的问题
写了个小程序,在pre_routing local_out挂了两个函数
local 那里,判断目的ip为指定hook掉的,就修改目的ip,port
pre那里,判断源ip为修改的,就改回hook前的
在pre那里ip包校验出现了问题,tcpdump每次都是bad_hlen,
检查之后,发现不管是在pre那里还是在local_in那里,同一
个站点的ip包的tcp->check都是一个固定值...
实在是不解...求达人指教
环境:虚拟机:redhat 9.0 2.4.20
codewar
这是在pre那里的hook函数
if(iph->protocol == IPPROTO_TCP)
{
if (iph->saddr == in_aton(app_ip)){
iph->saddr == in_aton(hook_ip);
ip_send_check(iph);
size = ntohs(iph->tot_len) - (iph->ihl * 4);
doff = th->doff << 2;
psk->csum = 0;
csum = csum_partial( psk->h.raw + doff, size - doff, 0 );
psk->csum = csum;
printk("---1@@@@@the incomme is %x/n",ntohs(th->check));//不知道为什么总是7f00或是ca08
th->check = 0;
th->check = csum_tcpudp_magic(psk->nh.iph->saddr,psk->nh.iph->daddr,size,IPPROTO_TCP,
csum_partial((char*)th,size,0));
测试中,是将指向192.168.2.1重定向到192.168.1.1的web服务器上,回来时在重定向ip,但是主机抓包发现回包虚拟机没收到,丢帧。
[[i] 本帖最后由 codewar 于 2008-6-8 13:14 编辑 [/i]]