免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 7332 | 回复: 33
打印 上一主题 下一主题

关于netfilter中5个垂钓点的疑问! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-19 21:08 |只看该作者 |倒序浏览
在netfilter中设置了5个垂钓点,请问这5个垂钓点在协议栈中个处于什么位置?(不知道这么问对不对)
比如我想取得接收包中的MAC地址,在哪个地方设置钩子函数才可以得到? 是 NF_IP_LOCAL_IN 吗?
如果我想处理接收到的包,是不是在 NF_IP_PRE_ROUTING ,NF_IP_LOCAL_IN 这两个地点处理?  
而发出的包是在  NF_IP_FORWARD ,NF_IP_LOCAL_OUT ,NF_IP_POST_ROUTING 这三个地点处理?

问的问题或许很火星,不过还是希望有朋友能告诉我一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-04-19 21:16 |只看该作者
netfilter 是工作在 IP 层的
skb->data 指向 L3 结构
MAC 地址需要利用 skbuff 里的结构来指向,2.4、2.6 不同,2.6.23 之后也与之前不同
如果想看来包的 MAC,那么个人建议放在 NF_IP_PRE_ROUTING 上

论坛徽章:
0
3 [报告]
发表于 2008-04-19 21:55 |只看该作者
恩。知道了!谢谢你的回答!
在2.6中取得MAC地址
struct ethhdr *ethh = eth_hdr(skb);
通过读取 ethh 结构中的 ethh->h_source 来得到! 是这样的吧!

论坛徽章:
0
4 [报告]
发表于 2008-04-20 00:07 |只看该作者
原帖由 kimguobin 于 2008-4-19 21:55 发表
恩。知道了!谢谢你的回答!
在2.6中取得MAC地址
struct ethhdr *ethh = eth_hdr(skb);
通过读取 ethh 结构中的 ethh->h_source 来得到! 是这样的吧!

你用的内核 >= 2.6.23 吧?
如果是,这样做是对的

论坛徽章:
0
5 [报告]
发表于 2008-04-20 10:44 |只看该作者
原帖由 platinum 于 2008-4-20 00:07 发表

你用的内核 >= 2.6.23 吧?
如果是,这样做是对的


恩  2.6.24
谢谢!

论坛徽章:
0
6 [报告]
发表于 2008-04-21 21:22 |只看该作者
再麻烦一下

netfilter工作在 IP层,那它能得到 包的MAC地址吗??  MAC地址信息在链路层没有被处理吗?

还有我写的这段代码:hook是在 NF_IP_PRE_ROUTING
if(iph->protocol==6)
{
struct tcphdr *tcph = tcp_hdr(skb);
printk("A TCP packet from: %d.%d.%d.%d:%u to %d.%d.%d.%d%u",NIPQUAD(iph->saddr),tcph->source,NIPQUAD(iph->daddr),tcph->dest);
}
源地址,目的地址能显示正确,但端口号好像是错误的,不管收到什么包,显示的源端口号都是69,而目的端口号也就是我的端口号总在变化,而且都是5位数,如(13312,46085,16640,.....)如果我刷新一下火狐浏览器,目的端口应该是80吧!

论坛徽章:
0
7 [报告]
发表于 2008-04-21 21:30 |只看该作者
原帖由 kimguobin 于 2008-4-19 21:55 发表
恩。知道了!谢谢你的回答!
在2.6中取得MAC地址
struct ethhdr *ethh = eth_hdr(skb);
通过读取 ethh 结构中的 ethh->h_source 来得到! 是这样的吧!

在2.6.22以后sk_buff才发生了变化,但是我想不管在那个点上都可以得到MAC地址的,这是由sk_buff中的数据来决定的!

论坛徽章:
0
8 [报告]
发表于 2008-04-21 21:33 |只看该作者
原帖由 kimguobin 于 2008-4-21 21:22 发表
再麻烦一下

netfilter工作在 IP层,那它能得到 包的MAC地址吗??  MAC地址信息在链路层没有被处理吗?

还有我写的这段代码:hook是在 NF_IP_PRE_ROUTING
if(iph->protocol==6)
{
struct tcphdr *tcph ...

这你可以看看我的这个例子。在这里不管是ip地址还是端口号都需要进行网络字节序的转换。
http://blog.chinaunix.net/u2/65841/showart_529452.html

[ 本帖最后由 helight 于 2008-4-21 21:35 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-04-21 21:40 |只看该作者
谢谢!
我现在就去看一下,
我的毕业设计是防火墙,天啊。。连基本的包过滤都搞不明白。哎。。问题是一个接一个!

论坛徽章:
0
10 [报告]
发表于 2008-04-21 22:26 |只看该作者

回复 #7 helight 的帖子

我按你的方法试了下,当我定义 struct sk_buff *pskb=*skb;  用 pskb 处理的时候内核就会死掉,编译能通过,也可以加载模块,
但是一抓包的时候就会死机...没有网络通讯的时候没问题。
这是什么问题?是不是我的内核配置有问题?我用的是ubuntu 8.04beta   内核版本是 2.6.24-16-generic
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP