我可以在Linux中使用原始套接字创建侦听TCP套接字吗?

时间:2010-12-01 11:17:40

标签: sockets network-programming

我想创建一个侦听TCP套接字,在收到来自客户端的初始SYN数据包之后,我可以控制第一个SYN + ACK响应客户端。

我想这样做是为了引入一些延迟或忽略一些初始SYN数据包。我现在可以使用iptables做到这一点,但我想知道是否可以使用OS套接字接口来完成。

请注意,如果我使用普通的TCP套接字,一旦服务器在套接字描述符上调用listen(),操作系统将在客户端连接到它时建立连接。

我想知道我是否可以使用原始套接字来实现此行为。到目前为止,我看到的关于原始套接字的所有示例都是关于活动套接字(客户端到服务器)而不是被动套接字(监听套接字)。

3 个答案:

答案 0 :(得分:3)

理论上,您可以在原始套接字上编写自己的TCP实现。但是,在原始套接字获取副本之前,内核仍将响应任何传入的TCP数据包。所以你必须通过使用iptables或其他东西阻止内核看到你感兴趣的数据包来解决这个问题。

我认为通过netfilter接口在内核模块中执行此操作会更容易(这可能是您已经在做的事情)。如果你真的想在用户空间中这样做,你也可以查看libnetfilter_queue可能有效。

答案 1 :(得分:1)

看看Honeynet项目,他们实现了具有基本IP堆栈的低成本虚拟机,以调整TCP协议操作。

https://projects.honeynet.org/sebek/browser/linux-2.6/trunk/src

答案 2 :(得分:0)

我不明白为什么不。你面前有很多工作;-)我想现有的包装或产品已经可以做到这一点。