1

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

可以读取SYN/ACK包的序号和确认序号吗?如果是这样,怎么办?顺便说一句,我正在研究 linux c 谢谢!

4

3 回答 3

1

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

你应该使用pcap 之类的东西来捕获你需要的东西。或者,原始套接字

于 2013-03-18T10:34:38.180 回答
0

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

参考TCP 标头格式化程序

于 2013-03-18T10:37:50.633 回答
0

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

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

您可以设置自己的 TCP 序列和 ACK 号,前提是您构建自己的数据包。您可以使用Libnet来完成,构建自己的数据包或使用RAW 套接字

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

于 2018-09-12T12:53:33.243 回答