gpt4 book ai didi

c++ - 使用 RAW_SOCKET 读取 TCP header 并管理 TCP 连接

转载 作者:可可西里 更新时间:2023-11-01 02:34:39 30 4
gpt4 key购买 nike

我正在尝试获取 C++11 中 TCP 连接的 TCP header 。通读现有的 StackOverflow 问题(herehereherehere),我似乎必须打开一个 RAW_SOCKET 或编写一个 Linux 内核模块 (LKM) 来可以访问它。

据我所知,打开原始套接字意味着处理整个 TCP 协议(protocol)(​​握手、窗口大小等)。有没有办法获取 TCP header 并让内核管理 TCP 协议(protocol)(​​“手动”或使用某些框架)?

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

感谢任何帮助,谢谢!

最佳答案

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

socket ext_raw  ------- socket remote, TCP (likely, at least)
socket int_raw ---
| (loop back connection)
socket int_tcp ---

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

关于c++ - 使用 RAW_SOCKET 读取 TCP header 并管理 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52642185/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com