免费注册 查看新帖 |

Chinaunix

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

netfilter sk_buff tcphdr 端口屏蔽问题?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-07 11:01 |只看该作者 |倒序浏览
我是想屏蔽某些端口 (21)

  1. static unsigned char *deny_port = "\x15\x00";//port 21


  2.    struct sk_buff *sb = skb;
  3.    struct tcphdr  *tcph;
  4.   
  5.       tcph=tcp_hdr(sb);
  6.      if(tcph->source==*(__be16 *)deny_port)
  7.       {
  8.        printk(KERN_INFO "Packet from port 21 Droped\n");
  9.    return NF_DROP;
  10.       }


复制代码
然后我测试连接21端口
#nc -v xx.xx.xx.xx 21
没有成功,还是连接上了,端口没被屏蔽
然后我用printk查看具体端口号
插入三天printk


printk(KERN_INFO "Packet from source port %d \n",tcph->dest);
printk(KERN_INFO "Packet from dest port %d \n",tcph->source);
printk(KERN_INFO "Packet from match port %d \n",*(__be16 *)deny_port);

  1.    struct sk_buff *sb = skb;
  2. struct tcphdr  *tcph;
  3.    
  4.       tcph=tcp_hdr(sb);

  5. printk(KERN_INFO "Packet from source port %d \n",tcph->dest);
  6. printk(KERN_INFO "Packet from dest port %d \n",tcph->source);
  7. printk(KERN_INFO "Packet from match port %d \n",*(__be16 *)deny_port);

  8.      if(tcph->source==*(__be16 *)deny_port)
  9.       {
  10.        printk(KERN_INFO "Packet from port 21 Droped\n");
  11.    return NF_DROP;
  12.       }
复制代码
打印结果如下
命令
nc -v xx.xx.xx.xx 21


[14004.353389] Packet from source port 5376 //源端口
[14004.353394] Packet from dest port 1934 //目的端口
[14004.353397] Packet from match port 21  //我要批评的端口
[14004.431504] Packet from source port 5376
[14004.431508] Packet from dest port 1934
[14004.431510] Packet from match port 21


这是什么原因呢?

论坛徽章:
0
2 [报告]
发表于 2010-11-07 11:22 |只看该作者
0x1500 == 0x0015
对楼主极度无语

论坛徽章:
0
3 [报告]
发表于 2010-11-07 12:14 |只看该作者
回复 2# beyond_touch


    是你没看清楚吧!我用的是 网络字节序难度不对吗??

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2010-11-07 14:30 |只看该作者
回复 1# Linux386
char *deny_port = "\x15\x00";
明显低地址存的是0x15,所以这是主机字节序的21。应该用网络字节序或者加个htons。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2010-11-07 14:51 |只看该作者
static unsigned char *deny_port = "\x15\x00";//port 21





   struct sk_buff *sb = skb;

   struct tcphdr  *tcph;

  

      tcph=tcp_hdr(sb);

     if(tcph->source==*(__be16 *)deny_port)

这段代码之前已经判断过是 TCP 报文了吗

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2010-11-07 14:55 |只看该作者
如果你想屏蔽端口的话,可以直接使用 iptables,除非你是想学习 NF 的编程。

另外,处理数据包的时候要注意的一个细节就是字节序的问题。所以有 ntohl,htonl,ntohs和 htons 来进行转换。
比较端口,直接用 tcph->source == hotns(21) 就可以了,而且代码可读性比较好。不建议使用那些非常规的比较方式。

论坛徽章:
0
7 [报告]
发表于 2010-11-07 15:45 |只看该作者
回复 6# Godbach


    恩,谢谢,已经知道了

论坛徽章:
0
8 [报告]
发表于 2012-03-21 10:16 |只看该作者
如果我要反过来。 ntohs(tcphd->source) 这样可以得到 正确的端口吗?回复 6# Godbach


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2012-03-21 10:25 |只看该作者
回复 8# coconut-zj
数据包中的都是网络字节序,和实际的数值比较的话,需要做统一,只要统一就行。

但是,如果你要获取实际的值,那就需要将网络字节序转换为主机字节序。



   

论坛徽章:
0
10 [报告]
发表于 2012-03-22 09:53 |只看该作者
回复 9# Godbach


    用 ntohs?nothl?
系统是大小端字节编码的话有没有额外的影响?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP