我有一个 tcp 客户端程序,当它通过发送 SYN 启动与远程 tcp 服务器的 3 次握手时,它将接收来自服务器的 SYN/ACK,
可以读取SYN/ACK包的序号和确认序号吗?如果是这样,怎么办?顺便说一句,我正在研究 linux c 谢谢!
我有一个 tcp 客户端程序,当它通过发送 SYN 启动与远程 tcp 服务器的 3 次握手时,它将接收来自服务器的 SYN/ACK,
可以读取SYN/ACK包的序号和确认序号吗?如果是这样,怎么办?顺便说一句,我正在研究 linux c 谢谢!
使用原始 TCP 套接字。在创建原始套接字时有一个 IPPROTO_TCP 协议选项。这样,数据就是嵌入在链路层标头中的所有内容,因此您将看到 IP 标头,然后是 TCP 标头,然后是接收到的每个数据包的有效负载数据。您需要从中解析序列。
您可以使用linux 或wireshark中的tcpdump找出 TCP 序列或 ACK 号。之后,只需分析数据包,您就可以弄清楚。
但是,要构建自己的程序来查找 TCP 序列或 ACK 号,则需要使用 C 中的pcap库来捕获所有数据包,然后编写代码以仅嗅探数据包中的 TCP 序列和 ACK 号。
您可以设置自己的 TCP 序列和 ACK 号,前提是您构建自己的数据包。您可以使用Libnet来完成,构建自己的数据包或使用RAW 套接字。
如果您不熟悉pcap库,那么您可以编写一个简单的 bash 脚本,将所有数据包捕获的数据重定向到一个文件中,然后使用 AWK / SED 过滤技术找出 TCP 序列和 ACK 号。