使用wireshark查找socket连失败

本文介绍了在遇到socket连接失败且无错误信息时,如何利用Wireshark进行网络封包分析。通过抓包发现客户端发送的数据段因IP地址初始化错误导致服务器无法接收连接请求。内容涉及字节序、网络字节序的概念,以及如何转换字节序以确保跨平台数据交换的正确性。同时,分析了超时重传的时间规律。
摘要由CSDN通过智能技术生成

管他什么真理无穷,进一寸有一寸的欢喜

使用wireshark查找socket连失败

在实现《TCP/IP网络编程》第5章的计算器服务器端/客户端示例时,服务器端和客户端代码都已经实现好了,相关代码如下.根据代码,当客户端连上服务器时,服务器端会打印Connected...字符串, 客户端会打印Operand count:提示输入相关信息.但是当运行的时候发现服务器端和客户端都没有打印相关信息, 服务器端和客户端一直在阻塞,也没有提示相关错误.大概两分钟后,客户端提示connect() error.

找了好久的原因也没找到(缺少错误信息提示), 于是就想着使用wireshark抓包分析一下, 没想到一抓包就找到了问题.

超时重传

根据抓包信息,可以发现客户端发出的SYN数据段一直在超时重传.也就是服务器端一直收不到客户端的连接请求.再看Destination列发现, 客户端指定的服务IP居然是1.0.0.127, 很明显是客户端在网络地址初始化时出现了错误.查看客户端网络地址初始化的代码(如下):

// init network address
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(inet_addr(argv[1]));
server_addr.sin_port = htons(atoi(argv[2]));
client_sock = socket(PF_INET, SOCK_STREAM, 0);

与IP地址相关的是第4行代码, 运行时输入的是127.0.0.1,为什么会变成1.0.0.127了呢?这个与CPU在内存中保存数据的方式有关.

字节序与网络字节序

CPU向内存中保存数据有两种方式:

  • 大端序: 高位字节存放在低位地址(最高有效位对应实际地址)

Wireshark是一款流行的网络协议分析工具可以用于捕获和分析网络数据包。在Wireshark中搜索或查找字符串可以帮助我们找到特定的数据包或协议信息。如果你在使用Wireshark搜索/查找字符串时遇到了失败,可能是以下几个原因导致的: 1. 字符串不存在:首先,请确保你要搜索的字符串确实存在于捕获的数据包中。如果字符串不存在,那么搜索操作自然会失败。 2. 搜索选项设置错误:在Wireshark中,你可以设置搜索选项,如搜索类型(ASCII、十六进制等)、搜索方向(源到目的、目的到源等)等。请检查你的搜索选项是否正确设置。 3. 数据包过滤器错误:Wireshark提供了强大的过滤器功能,可以根据协议、IP地址、端口等条件过滤数据包。如果你在搜索时使用了过滤器,并且过滤器设置不正确,那么搜索结果可能为空。 4. 数据包捕获不完整:如果你的数据包捕获不完整,可能会导致搜索失败。请确保你已经正确配置了网络接口,并且捕获到了完整的数据包。 如果你已经确认了以上几点,但仍然无法成功搜索/查找字符串,你可以尝试以下方法: 1. 更新Wireshark版本:确保你使用的是最新版本的Wireshark,以获得更好的性能和功能支持。 2. 重新捕获数据包:如果可能的话,尝试重新捕获数据包,并再次进行搜索操作。 3. 使用其他搜索方式:除了Wireshark自带的搜索功能,你还可以尝试使用其他工具或命令行方式进行搜索,如grep命令、Wireshark的tshark命令等。 希望以上解答对你有帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值