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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有可能在TCP 3路握手中获取SYN / ACK数据包的TCP序列号?相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

另一答案

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

参考TCP Header Formatter

另一答案

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

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

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

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

以上是关于是否有可能在TCP 3路握手中获取SYN / ACK数据包的TCP序列号?的主要内容,如果未能解决你的问题,请参考以下文章

容易理解的tcp三次握手总结

TCP为啥需要3次握手与4次挥手

三次握手

TCP三次握手四次挥手

TCP三次握手

tcp三次握手