如何在套接字编程中获取接收到的数据包的tcp报头?

如何在套接字编程中获取接收到的数据包的tcp报头?,tcp,network-programming,raw-sockets,Tcp,Network Programming,Raw Sockets,我想获得每个接收到的TCP数据包的TCP报头(目的地是一个特定的程序,即一个端口) 似乎不可能使用recv()或recvfrom()来使用常规套接字获取TCP头 所以,我想使用原始套接字 使用原始套接字,我可以使用recvfrom()接收所有发送到主机的IP数据包 如果主机收到大量数据包, 我需要检查每个数据包的端口号,以便查看它是否是所需的。 那么这可能是非常耗时和CPU消耗 while() { recvfrom(); check_port_number(); } 有没有什么好方法可以获取

我想获得每个接收到的TCP数据包的TCP报头(目的地是一个特定的程序,即一个端口) 似乎不可能使用recv()或recvfrom()来使用常规套接字获取TCP头

所以,我想使用原始套接字 使用原始套接字,我可以使用recvfrom()接收所有发送到主机的IP数据包 如果主机收到大量数据包, 我需要检查每个数据包的端口号,以便查看它是否是所需的。 那么这可能是非常耗时和CPU消耗

while()
{
recvfrom();
check_port_number(); 
}
有没有什么好方法可以获取接收到的tcp数据包的tcp报头? 我使用的是LinuxC,所以解决方案应该是基于LinuxC的。谢谢

您希望使用API,而不是套接字API。libpcap允许您直接从线路上读取数据包


另一个可以用来简化数据包解析的库是libnet。

用于什么目的?有一些API可以一个字段一个字段地获取大部分信息。我只想获取目标计算机上指定端口号的所有TCP数据包的TCP头。是否有一些好的文章或示例与我需要的内容直接相关?谢谢新闻部呢?行不行?