是否有可能在TCP 3路握手中获取SYN / ACK数据包的TCP序列号?

问题描述 投票:0回答:3

我有一个tcp客户端程序,当它通过发送SYN启动与远程tcp服务器的3向握手时它将从服务器接收SYN / ACK,

是否可以读取SYN / ACK数据包的序列号和确认序列号?如果是的话,该怎么做?顺便说一下,我正在研究linux c谢谢!

c tcp network-programming
3个回答
1
投票

是的,这是可能的,但它不像传统的套接字编程那么容易。它隐藏了你的握手阶段。

你应该使用像pcap这样的东西来捕捉你需要的东西。或者,Raw sockets


0
投票

使用Raw TCP套接字。创建原始套接字时有一个IPPROTO_TCP协议选项。这样,数据就是链接层标题中嵌入的所有内容,因此您将看到IP标头,后跟TCP标头,然后是接收到的每个数据包的有效负载数据。您需要从中解析序列。

参考TCP Header Formatter


0
投票

您可以在linux或wireshark中使用tcpdump找出TCP序列或ACK号。然后,只需分析数据包,你就可以搞清楚。

但是,要构建自己的程序以查找TCP序列或ACK编号,则需要使用C中的pcap库捕获所有数据包,然后编写代码以仅嗅探数据包中的TCP序列和ACK编号。

如果构建自己的数据包,则可以设置自己的TCP序列和ACK编号。您可以使用Libnet来构建自己的数据包或使用RAW套接字。

如果您不熟悉pcap库,那么您可以编写一个简单的bash脚本,将所有数据包捕获的数据重定向到一个文件中,然后使用AWK / SED过滤技术找出TCP序列和ACK号。

© www.soinside.com 2019 - 2024. All rights reserved.