2010-12-01 130 views
4

我想创建一个侦听的TCP套接字,当它从客户端收到初始SYN包后,我可以控制它何时响应客户端的第一个SYN + ACK。我可以使用Linux中的原始套接字创建一个侦听TCP套接字吗?

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

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

我想知道如果我可以使用原始套接字来实现这种行为。迄今为止关于原始套接字的所有示例都是关于活动套接字(客户端到服务器)而不是被动套接字(侦听套接字)。

回答

0

我不明白为什么不。你在你面前有很多工作;-)我想象那里已有的包或产品已经可以做这种事情了。

+0

这个答案非常广泛,甚至可以用作“我可以使用网络摄像头扫描lolcats的图片吗?”的答案。 – 2012-06-12 13:47:45

3

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

我认为通过netfilter接口在内核模块中执行此操作会更容易这可能是你现在正在做的)。你也可以检查出libnetfilter_queue,如果你真的想在用户空间中做到这一点,它可能会工作。

相关问题