访问TCP头字段(没有原始套接字API)

时间:2016-06-15 15:17:16

标签: c sockets tcp

我正在编写一个需要访问TCP头字段的应用程序,例如序列号或TCP时间戳字段。

是否可以通过在套接字API上操作而不监听原始套接字来获取序列号(或其他头字段)? (我想避免过滤掉所有数据包)。

我正在查看TCP_INFO,但信息有限。

例如,在调用recvmsg()并获取数据缓冲区之后,是否可以知道在该接收数据缓冲区中传递最后一个字节的段的序列号?

由于

1 个答案:

答案 0 :(得分:2)

您可以尝试使用libpcap来捕获数据包。此lib允许使用与Wireshark中相同的语法指定数据包筛选器,因此您可以将捕获的数据包限制为仅一个连接。一个缺点是你必须以正常方式接收数据包,复杂的事情和额外的性能开销。

更新:您还可以使用套接字选项SO_ATTACH_FILTER打开原始套接字并在其上设置Berkeley Packet Filter。更多详情请点击此处:https://www.kernel.org/doc/Documentation/networking/filter.txt。但是,您也必须在代码中实现IP堆栈的TCP部分。