首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取TCP头并使用RAW_SOCKET管理TCP连接

读取TCP头并使用RAW_SOCKET管理TCP连接
EN

Stack Overflow用户
提问于 2018-10-04 08:22:05
回答 1查看 1K关注 0票数 3

我试图在C++11中获取TCP连接的TCP头,阅读已经存在的StackOverflow问题(herehereherehere),似乎需要打开一个RAW_SOCKET或编写一个Linux (LKM)才能访问它。

据我所理解,打开原始套接字意味着处理整个TCP协议(握手、窗口大小等)。是否有一种方法可以获得TCP报头并让内核管理TCP协议(“手动”或使用某种框架)?

我知道我可以使用libpcap来捕获数据包,但这意味着我的应用程序可以从TCP套接字中的传入数据包和从libpcap捕获的数据包中进行某种匹配。虽然这是一个可能的解决方案,但这将是一个麻烦的解决方案(我不想这么做)。

任何帮助都是感激的,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-04 09:10:42

“快速和脏”的方法可能使用两个连接,一个到远程主机的外部连接和一个纯内部连接。当然,这并不是最有效的方法,但是很容易(而且快速)实现( QAD“解决方案”的核心特性.):

代码语言:javascript
复制
socket ext_raw  ------- socket remote, TCP (likely, at least)
socket int_raw  ---
                   |    (loop back connection)
socket int_tcp  ---

ext_rawint_raw上的任何传入消息都只是从一个转发到另一个(而ext_raw上的传入消息可以检查TCP ),而所有正常的TCP处理都是由内部TCP完成的。因此,在某种程度上,您将通过您的两个原始套接字隧道TCP连接。

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

https://stackoverflow.com/questions/52642185

复制
相关文章

相似问题

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