请教tcp_hdrlen 问题
在Ubuntu 10.10 2.6.35-22-generic版本下,通过netfilter hook截获本机发出去的包tcp_hdrlen 返回的tcp头长度是32。而在本机做为代理服务器,截获到接收的包 tcp_hdrlen 返回的是48。怎么回事的? 抓包看下,是否是option的问题? 抓包看下,是否是option的问题?
yanhaofeng 发表于 2011-11-11 09:58 http://bbs.chinaunix.net/images/common/back.gif
抓包过了应该不是option的问题了,把tcp头的数据打印出来,多出来的16字节是应用层的数据了。 回复 1# renminbi
看一下该接口的实现吧。
此外,数据包在 IP 层时, skb->data 指针仍然指向 IP 头部。 回复 1# renminbi
要确定在网络层调用 tcp_hdrlen 这个接口是否有效 回复renminbi
看一下该接口的实现吧。
此外,数据包在 IP 层时, skb->data 指针仍然指向 IP 头部。
Godbach 发表于 2011-11-11 10:47 http://bbs.chinaunix.net/images/common/back.gif
正像版主说的那样。netfilter hook分别在NF_INET_LOCAL_IN 和 NF_INET_LOCAL_OUT,在这些hook点怎么才能正确获取mac,ip,tcp信息呢 回复 6# renminbi
这两个 hook 点都在 IP 层。
skb 有指向 MAC 头和 IP 头的成员,都是有效的,可以直接使用,应该也有接口可以获取。
至于 TCP header,需要自己实现:
tcph = (struct tcphdr *)((unsigned char *)iph + iph->ihl * 4) 回复renminbi
这两个 hook 点都在 IP 层。
skb 有指向 MAC 头和 IP 头的成员,都是有效的,可以直接使 ...
Godbach 发表于 2011-11-12 08:30 http://bbs.chinaunix.net/images/common/back.gif
谢谢版主指点。
总结如下,若有误,请大家指出。
NF_INET_LOCAL_OUT 从本地发出的包
用tcp_hdr可以返回正确的tcp头,MAC头还没有填。
NF_INET_LOCAL_IN 接收的包
tcph = (struct tcphdr *)((unsigned char *)iph + iph->ihl * 4)。
可以这样获得tcp头。
eth_hdr(skb)返回MAC头。 回复 8# renminbi
感谢分享。
根本上就是需要了解数据包在各个协议层的一些关键变化 NF_INET_LOCAL_IN这里怎么获得sk_buff的data应该指向来哪里呢?
页:
[1]
2