我有一个tcp客户端程序,当它通过发送SYN来启动与远程tcp服务器的3次握手时,它将从服务器接收SYN/ACK。
是否可以读取SYN/ACK数据包的序列号和确认序列号?如果是,该怎么做呢?顺便说一句,我正在开发linux c,谢谢!
发布于 2013-03-18 18:34:38
是的,这是可能的,但它并不像传统的套接字编程那样容易。这对你隐藏了握手的舞台。
您应该使用像pcap这样的工具来捕获您需要的内容。或者,Raw sockets。
发布于 2013-03-18 18:37:51
使用原始TCP套接字。在创建原始套接字时有一个IPPROTO_TCP协议选项。这样,数据就是嵌入在链路层报头中的所有内容,因此您将看到IP报头,然后是TCP报头,然后是接收到的每个数据包的有效负载数据。您需要从它解析序列。
对TCP Header Formatter的引用
发布于 2018-09-12 20:53:33
您可以使用linux中的tcpdump或wireshark找到TCP序列或确认号。然后,只需分析数据包,您就可以弄清楚了。
但是,要构建自己的程序来找出TCP序列或确认号,则需要使用C语言中的pcap库来捕获所有数据包,然后编写代码仅嗅探数据包中的TCP序列和确认号。
您可以设置自己的TCP序列和ACK编号,前提是您构建了自己的数据包。你可以使用Libnet来做这件事,构造你自己的数据包,或者使用原始套接字。
如果您不熟悉TCP 库,那么可以编写一个简单的bash脚本,将捕获的所有数据包重定向到一个文件中,然后使用AWK / SED过滤技术找出序列和ACK号。
https://stackoverflow.com/questions/15474466
复制相似问题