我有一个tcp客户端程序 当它通过发送SYN启动与远程tcp服务器的3向握手时 它将从服务器收到SYN / ACK,
是否可以读取SYN / ACK数据包的序列号和确认序列号? 如果是的话,该怎么做? 顺便说一下,我正在研究linux c 谢谢!
答案 0 :(得分:1)
是的,它可能但传统的套接字编程并不容易。它隐藏了你的握手阶段。
您应该使用类似pcap的内容来捕捉您需要的内容。 或者,Raw sockets。
答案 1 :(得分:0)
使用Raw TCP套接字。创建原始套接字时有一个IPPROTO_TCP协议选项。这样,数据就是链接层标题中嵌入的所有内容,因此您将看到IP标头,后跟TCP标头,然后是接收到的每个数据包的有效负载数据。你需要从中解析序列。
答案 2 :(得分:0)
您可以在Linux或 wireshark 中使用 tcpdump 找出TCP序列或ACK编号。然后,只需分析数据包,就可以弄清楚。
但是,要构建自己的程序来找出TCP序列或ACK编号,则需要使用C中的 pcap 库捕获所有数据包,然后编写代码以仅嗅探TCP序列数据包中的ACK号码。
如果您构建自己的数据包,则可以设置自己的TCP序列和ACK编号。您可以使用 Libnet 进行操作,构造自己的数据包或使用 RAW套接字。
如果您不熟悉 pcap 库,则可以编写一个简单的bash脚本,该脚本将所有数据包捕获的数据重定向到文件中,然后使用AWK / SED过滤技术找出TCP序列和ACK号码。