读取 TCP 标头并使用RAW_SOCKET管理 TCP 连接
Reading a TCP header and managing a TCP connection with RAW_SOCKET
我正在尝试在 C++11 中获取 TCP 连接的 TCP 标头。通读已经存在的StackOverflow问题(这里,这里,这里和这里(,似乎我必须打开一个RAW_SOCKET
或编写一个Linux内核模块(LKM(才能访问它。
据我所知,打开原始套接字意味着处理整个TCP协议(握手,窗口大小等(。有没有办法获取TCP标头并让内核管理TCP协议("手动"或使用某些框架(?
我知道我可以使用 libpcap 来捕获数据包,但这意味着我的应用程序以某种方式与 TCP 套接字中的传入数据包和来自 libpcap 捕获的数据包进行匹配。虽然这是一个可能的解决方案,但这将是一个繁琐的解决方案(我不想这样做(。
任何帮助不胜感激,谢谢!
"快速而肮脏"的方法可能是使用两个连接,一个是到远程主机的外部连接,另一个是纯内部连接。当然,这不是最有效的方法,但很容易(而且快速(实现(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连接...
相关文章:
- 为什么可以重复使用这个boost::asio::tcp::socket
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 如何使用已经存在的 tcp::socket 创建 tcp::iostream?
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 从 asio::ip::tcp::socket 直接写入 std::string
- 线程安全关闭同步使用的 boost::asio::ip::tcp::socket
- 移动构造函数不使用 boost::asio::ip::tcp::socket 调用
- 自定义套接字继承自boost::asio::ip::tcp::Socket
- boost::asio::tcp::socket 关闭并取消而不调用处理程序
- IMAP:从C++程序发送电子邮件时"Unable to create selectable TCP socket"
- 调用 boost::asio::tcp::socket 方法后async_read处理程序在服务器中返回错误
- TCP-Socket到虚拟机的IP地址
- 是否strand和io对象(如tcp::socket)需要担心相关联的io_service的生命周期?
- boost::asio::ip::tcp::socket中的async_read_some()实际上是如何工作的
- 通过TCP socket发送二进制文件
- Java客户端和c++服务器通过TCP Socket发送和接收
- Using boost::asio::ip::tcp::socket::cancel() and socket::clo
- boost::asio::ip::tcp::socket::cancel和socket::close之间有什么不同
- c++ boost asio tcp socket读取旧数据
- 客户端断开连接时,TCP Socket选择服务器分段错误