使用libpcap来实现tcp listen()

时间:2013-04-12 14:23:06

标签: tcp network-programming libpcap raw-sockets

我的研究工作需要tcp修改 我想实现我的TCP listen()函数版本 我的想法是使用libpcap从特定端口捕获所有TCP SYN数据包 然后使用raw socket创建/发送SYN / ACK和以下ACK数据包

我的问题是

  1. 如何实现传统/常规TCP堆栈listen(),任何人都可以简要描述一下这种机制吗?
  2. 我的想法可以实现吗?有什么技巧/障碍吗?
  3. 是否有其他库/源代码片段可用于实现我的需求?
  4. 谢谢!

2 个答案:

答案 0 :(得分:0)

如果你想知道如何实现listen()那么你应该只看一下自由操作系统中实现的源代码,但基本上它的工作是在内核的数据结构中设置一个标志套接字,以便将来的传入SYN数据包将获得SYN|ACK响应(并配置在应用程序使用{{1}从应用程序中排出它们之前它应该回答多少这样的SYN })。

您的想法是可实现的,但它需要做很多工作:它相当于在用户空间中实现TCP堆栈。如果您只需要为研究打开和关闭连接,那么您可以避免必须实现大部分工作(包括慢启动,窗口缩放以及TCP堆栈应该具有​​的所有数据传输功能)但它仍然是一份大工作。

您需要的一件事是防火墙规则,以防止内核回复传入的TCP数据包,以便您的代码可以响应它们。

答案 1 :(得分:0)

你不能这样做。 Libpcap没有为您提供阻止数据包进一步处理的方法,因此每个数据包仍将由TCP / IP堆栈的其余部分处理。因此,SYN将被确认,对SYN / ACKS的ACK将创建TCP连接,FIN将终止它们等等。