我试图在C++11中获取TCP连接的TCP头,阅读已经存在的StackOverflow问题(here、here、here和here),似乎需要打开一个RAW_SOCKET或编写一个Linux (LKM)才能访问它。
据我所理解,打开原始套接字意味着处理整个TCP协议(握手、窗口大小等)。是否有一种方法可以获得TCP报头并让内核管理TCP协议(“手动”或使用某种框架)?
我知道我可以使用libpcap来捕获数据包,但这意味着我的应用程序可以从TCP套接字中的传入数据包和从libpcap捕获的数据包中进行某种匹配。虽然这是一个可能的解决方案,但这将是一个麻烦的解决方案(我不想这么做)。
任何帮助都是感激的,谢谢!
发布于 2018-10-04 09:10:42
“快速和脏”的方法可能使用两个连接,一个到远程主机的外部连接和一个纯内部连接。当然,这并不是最有效的方法,但是很容易(而且快速)实现( QAD“解决方案”的核心特性.):
socket ext_raw ------- socket remote, TCP (likely, at least)
socket int_raw ---
| (loop back connection)
socket int_tcp ---ext_raw和int_raw上的任何传入消息都只是从一个转发到另一个(而ext_raw上的传入消息可以检查TCP ),而所有正常的TCP处理都是由内部TCP完成的。因此,在某种程度上,您将通过您的两个原始套接字隧道TCP连接。
https://stackoverflow.com/questions/52642185
复制相似问题