我的研究工作需要tcp修改
我想实现我的TCP listen()函数版本
我的想法是使用libpcap从特定端口捕获所有TCP SYN
数据包
然后使用raw socket创建/发送SYN / ACK和以下ACK数据包
我的问题是
谢谢!
答案 0 :(得分:0)
如果你想知道如何实现listen()
那么你应该只看一下自由操作系统中实现的源代码,但基本上它的工作是在内核的数据结构中设置一个标志套接字,以便将来的传入SYN
数据包将获得SYN|ACK
响应(并配置在应用程序使用{{1}从应用程序中排出它们之前它应该回答多少这样的SYN
})。
您的想法是可实现的,但它需要做很多工作:它相当于在用户空间中实现TCP堆栈。如果您只需要为研究打开和关闭连接,那么您可以避免必须实现大部分工作(包括慢启动,窗口缩放以及TCP堆栈应该具有的所有数据传输功能)但它仍然是一份大工作。
您需要的一件事是防火墙规则,以防止内核回复传入的TCP数据包,以便您的代码可以响应它们。
答案 1 :(得分:0)
你不能这样做。 Libpcap没有为您提供阻止数据包进一步处理的方法,因此每个数据包仍将由TCP / IP堆栈的其余部分处理。因此,SYN将被确认,对SYN / ACKS的ACK将创建TCP连接,FIN将终止它们等等。