免费注册 查看新帖 |

Chinaunix

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

[C] 关于raw socket的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-30 10:39 |只看该作者 |倒序浏览
1、通过raw socket读取发送到指定UDP/TCP端口的 IP报文后,原本的上层UDP/TCP服务进程还能从其本身的UDP/TCP套接字中读到数据报么?

2、如何想通过raw socket实现防火墙,过滤报文,比如说让某个端口进程无法收到数据?

论坛徽章:
0
2 [报告]
发表于 2010-04-30 14:57 |只看该作者
1. 能.
2. 要在内核里做.

论坛徽章:
0
3 [报告]
发表于 2010-04-30 15:11 |只看该作者
回复 1# chinaltang


    1、可以,这个只是相当于一个拷贝,不影响正常数据。

    2、iptables中有一条链是可以与内核进行交互的,通过drop或者accept一个数据包来达到防火墙的目的。一般需要注意几个地方:
         --内核默认缓存的包队列长度是比较小,如果是防火墙,你需要把这个设置的大些,以便可以缓存更多的包,让你有足够的时间去处理
         --需要注意,一般来说捕获的数据大多数应该是http的,而TCP协议是可靠连接,就算你drop掉一个数据包之后,服务器还会重新发包,
            所以,记得在drop掉数据包后,伪造一个rst数据包,去断开与服务器的连接。

论坛徽章:
0
4 [报告]
发表于 2010-04-30 15:16 |只看该作者
回复 1# chinaltang


    呃,第二个问题看错了,
    你只是想过滤某个端口的包,不让某个端口接收到包,这个就更简单了。
   
    既可以在捕获到某个端口的包之后,将其丢弃,并断开连接。也可以直接设置iptables,

    只是感觉如果只是过滤某个端口的话,直接设置iptables就够了,还专门去写代码捕获数据包,再丢弃,似乎有点大材小用了,
    不知道你是不是在什么特殊环境下?

论坛徽章:
0
5 [报告]
发表于 2010-05-06 14:34 |只看该作者
回复 4# 雨夜流星


   代码还是得专们设计一下的,一个简单的现实需求是这样的:过滤某个UDP端口的报文,把指定Source IP的报文过滤掉,是上层服务进程无法接收。而且这个类似于防火墙的进程对于上层的服务进程必须是完全透明的。

  另外想问你一下:
  
  1、你提到捕获到报文后“drop”掉报文,具体函数操作是什么。貌似没有drop这样的函数啊。
  2、时间上 raw socket 如何保证比上层的 UDP/TCP 服务进程先捕获到报文呢?

论坛徽章:
0
6 [报告]
发表于 2010-05-06 17:47 |只看该作者
这个太用户层面上不太好解决吧。

我首先想到的也是你的raw socket如何保证比原来人家接收的程序要早获得报文呢。

还有,你得到的仅仅是这个数据报的一个拷贝。无法处理别人的包啊。

这个方法:(有点笨,但好像也能实现)

你的raw socket发现你要过滤的后,system()  或 popen()执行shell
在iptables 里做上规则断开。。。

这样不知道行不行...

反正开始的包他可能会收到开始的一两个。。。

论坛徽章:
0
7 [报告]
发表于 2010-05-06 18:01 |只看该作者
用户层防火墙可以用 NF_QUEUE 来做,效果不错,还能修改包的内容。不用 SOCK_RAW。

论坛徽章:
0
8 [报告]
发表于 2010-05-06 18:05 |只看该作者
可以看下Netfilter

论坛徽章:
0
9 [报告]
发表于 2010-05-10 17:20 |只看该作者
回复 5# chinaltang

不是用混杂模式,

如7楼所说,是iptables的NF_QUEUE
通过这个控制数据包的流向。

相当于你接管内核对数据包流向的控制,相当于下面的简易模型

数据包的流向是1-->2-->3

1、接收到的数据包都放在这里,等待你进行处理-------------------
|
|
2、你通过NF_QUEUE可以控制这里,你可以在这里决定是让数据包达到目的地,或者丢弃该数据包
|
|
3、数据包的目的地址---------------------

你可以在2的地方编程对到达的数据包进行判断,并决定该包的流向。
当需要断开某个链接时,丢弃该端口的数据包,并构造一个RST包发送给服务器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP