首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >usng libpcap实现tcp ()

usng libpcap实现tcp ()
EN

Stack Overflow用户
提问于 2013-04-12 14:23:05
回答 2查看 335关注 0票数 0

我有一项需要tcp修改的研究工作,我想要实现我的TCP侦听()函数,我的想法是使用libpcap从一个特定的端口捕获所有TCP SYN数据包,然后使用原始套接字创建/发送SYN/ACK和下面的ACK数据包

我的问题是

  1. 传统/常规TCP协议栈stack ()是如何实现的,谁能简单描述一下这种机制呢?
  2. 我的想法能实现吗?有什么诀窍/障碍吗?
  3. 还有其他库/源代码片段可以用来实现我所需要的吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-04-12 14:52:41

如果您想知道listen()是如何实现的,那么您应该只看一下免费操作系统中实现的源代码,但基本上它的工作是在内核的数据结构中设置一个与套接字相关联的标志,以便将来传入的SYN数据包将得到一个SYN|ACK响应(并在应用程序使用accept()将它们从队列中删除之前,配置它应该回答多少这样的SYN)。

您的想法是可实现的,但这需要大量的工作:它相当于在用户空间中实现TCP堆栈。如果您只需要为您的研究打开和关闭连接,那么您可以不必执行大部分工作(包括缓慢启动、窗口缩放和TCP堆栈应该具有的所有数据传输功能),但这仍然是一项艰巨的任务。

您需要的一件事是防火墙规则,以防止内核应答传入的TCP数据包,这样您的代码就可以对它们做出响应。

票数 0
EN

Stack Overflow用户

发布于 2013-04-12 23:02:16

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15973862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档