文档章节

tcpdump 和 wireshark 联合调试问题

-10
 -10
发布于 2015/02/04 17:48
字数 738
阅读 25
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

遇到的问题

今天同事遇到一个问题,在是用 solr 搜索时,在程序中搜索出来的结果没有,但是使用 solr 提供的网页搜索界面搜索出来但是有 2 条结果。跟踪程序源代码时发现程序中也是通过 httpclient 发送的 http 请求,那么理论上也该能够搜索出结果,所以初步怀疑是 httpclient get 请求时参数太长被截断了,因为我们在 solr 中的 fq 字段填入了如下数据:

<pre> network:52a05d2d1a06f6672bc4b912 network:52a05ca71a06f6672bc4b883 network:52a05c701a06f6672bc4b863 network:52a05c5b1a06f6672bc4b842 network:52a05b081a06f6672bc4b6d7 network:52a05a7e1a06f6672bc4b648 network:51dd272e24ac20158506aa00 network:4f2a3e6324ac69d59b32c7fd network:52aedac224acbf6fe02c5a4c network:449305 network:323445 network:5346617f24acefd56b02b7f9 network:5316d87824acaeca0a3f4bfd network:54ade69ae4b02c4d220cdedf network:383cee68-cea3-4818-87ae-24fb46e081b1 network:54c5acb1e4b0b519b1987e22 network:54c0c53ce4b0adbfbaa2b1cb network:54c0c252e4b00697574616ff network:54c0c07ce4b017e0c9c26631 network:54c0bb59e4b0a37dc616a789 network:54bcb0cfe4b0b8e8f7f6cca8 network:54a2043de4b06930e0ed4137 network:54a20403e4b06930e0ed411a network:54a20428e4b06930e0ed4129 network:547d68c1e4b0651f9fbd4c25 network:493003 network:325310 participants:4e420a24cce7a2ad930fc948 </pre>

既然是这样那么我们只需要比对 solr 网页端的 tcp 包和程序发送的 tcp 包是不是一样就应该能找出问题。

windows http 请求包

在 windows 上我们抓取 http 请求的方法有很多,如:

  • chrome,firefox 自带的调试工具
  • httpwatch 专业的代理工具,专业版收费
  • charles
  • windows 抓包神器 wireshark

我们就使用 firefox 自带的调试工具就可以了。

linux 下的抓包软件 tcpdump

在 linux 和 unix 下首推的就是 tcpdump 这个抓包软件,至于这个命令如何使用,可以参考 man 手册。我们使用在如下命令抓取 tcp 的包:

<pre> tcpdump -i lo dst port 10195 -o solr.cap </pre>

  • -i:指定 lo 网卡
  • dst port 10195:指定抓取目标端口为 10195 的包
  • -o solr.cap:将抓到的包写入 solr.cap 文件中

为什么这里使用 lo 这个本地网卡,是因为我们的 solr 和 服务器都部署在一个台机器上,即使我们使用的 192.168.x.x 这个 ip,还是会走 lo 这个本地网卡。

linux 下抓到的包可视化

当我们在 linux 下使用 tcpdump 抓到包后就剩下分析,我们使用 wireshark 在 windows 下来分析,首先我们将 linux solr.cap 文件拷贝到 windows 下,使用 wireshark 打开。有时候我们可能抓到的包会很多,这个时候就需要使用 wireshark 的过滤功能找到我们要的信息,不清楚可以 google。现在我们先来看看在 firefox 下的 http 请求的格式:

注意右边面板中 params 中的 fq 参数,这里是只有一个 fq 参数。

而在 linux 服务器上的 http 请求格式是:

注意红色部分标示的,这里的 fq 参数变成了多个了,这显然是使用 java httpclient 发送请求时参数格式拼写错误了。修改程序代码后使用网页端接口和程序的搜索结果就一致了,至此问题也就完美解决了。

http://hushi55.github.io/2015/02/04/tcpdump-wireshark/

© 著作权归作者所有

-10

-10

粉丝 10
博文 10
码字总数 14996
作品 0
深圳
高级程序员
私信 提问
tcpdump+wireshark 调试网络应用

过去调试c/c++ 的socket代码,一般都只会打日志,打日志,其实这样的调试方法太慢,太低效~ 本文介绍一种现在普遍在用的调试手段,落地成文,也给自己一个记录。 【工具】tcpdump、wireshark...

彼得
2013/12/02
285
0
当tcpdump遇到Wireshark

当tcpdump遇到Wireshark,会撞出什么火花呢? Wireshark is a network packet analyzer(网络报文分析器),用于解决网络问题,安全问题,调试协议。运行于window PC下可将报文可视化和流量统计...

robot_test_boy
2017/12/30
0
0
使用tcpdump+wireshark抓包分析网络数据包

最近和学弟在调试一个GPRS通信模块,需求是通过GPRS模块通过http协议发送数据到服务器,但是http协议一直失败,服务器返回400,通过查询http状态码得知,http400错误是请求无效,因为GPRS模块没有实...

紫葡萄0
2018/12/16
0
0
HTTP 什么时候重新建立TCP连接

客户部署的线上AEMS系统发生一个诡异的问题. 说下环境, 客户的系统部署于客户内网环境, 在外网网关做了端口映射, 客户使用的是贵州电信的网络; 公司使用的是浙江联通的网络. 问题的现象: 客户...

xiaocao000
2013/11/04
1K
7
Wireshark和TcpDump抓包分析心得

Wireshark与tcpdump介绍 ?Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工作环境中的L...

糖糖豆豆
2014/10/28
716
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊rocketmq producer的batch

序 本文主要研究一下rocketmq producer的batch batch rocketmq-client-4.6.0-sources.jar!/org/apache/rocketmq/client/producer/DefaultMQProducer.java public class DefaultMQProducer ex......

go4it
昨天
4
0
Delphi中的延时

开发过程中经常会需要使用到延时功能,Delphi中有不少实现延时的方法,网上已有不少文章做过说明和分析,但本着实践出真知的态度,还是亲自动手研究一番心里比较踏实。 常用的延时方法 Slee...

天朝八阿哥
昨天
4
0
001-Consul

Consul安装(单节点) mkdir -p /data/consulcd /data/consulwget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zipunzip consul_1.6.2_linux_amd64.zip复制c......

伟大源于勇敢的开始
昨天
5
0
nginx + frp 搭建内网穿透

上一个项目是开发微信公众号,由于微信的各种烦人操作,只能到处找内网映射工具 ngrok也用过,花生壳也用过 都不怎么稳定,无意间听说了frp,本着一颗折腾的心搭建了一下,结果发现很不错,就...

lineasy
昨天
7
0
构建CRD工程 - 程序员学点xx 43 k8s

Kubernetes -3- <!--more--> <center>这是yann的第98篇分享</center> [TOC] 本日状态: 帮同事排了一天bug。 Kubernetes -3- <!--more--> 这是yann的第98篇分享 第 1 部分 承前 昨天用视屏的方......

tmp4
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部