我有一项需要tcp修改的研究工作,我想要实现我的TCP侦听()函数,我的想法是使用libpcap从一个特定的端口捕获所有TCP SYN数据包,然后使用原始套接字创建/发送SYN/ACK和下面的ACK数据包
我的问题是
谢谢!
发布于 2013-04-12 14:52:41
如果您想知道listen()是如何实现的,那么您应该只看一下免费操作系统中实现的源代码,但基本上它的工作是在内核的数据结构中设置一个与套接字相关联的标志,以便将来传入的SYN数据包将得到一个SYN|ACK响应(并在应用程序使用accept()将它们从队列中删除之前,配置它应该回答多少这样的SYN)。
您的想法是可实现的,但这需要大量的工作:它相当于在用户空间中实现TCP堆栈。如果您只需要为您的研究打开和关闭连接,那么您可以不必执行大部分工作(包括缓慢启动、窗口缩放和TCP堆栈应该具有的所有数据传输功能),但这仍然是一项艰巨的任务。
您需要的一件事是防火墙规则,以防止内核应答传入的TCP数据包,这样您的代码就可以对它们做出响应。
发布于 2013-04-12 23:02:16
你不能这么做。Libpcap没有为您提供阻止数据包被进一步处理的方法,因此每个数据包仍将由TCP/IP堆栈的其余部分处理。因此,SYN将被确认,ACKs到SYN/ACKS将创建TCP连接,FINs将终止它们等等。
https://stackoverflow.com/questions/15973862
复制相似问题