排查利器:Tcpdump抓包 & Wireshark解析
在工作这一块,免不了和其他开发人员打交道。比如,和其他部门 or 公司联调,甚至是和自己部门的人联调的时候。这时候,对接问题就很容易暴露出来,特别是Tcp/Udp会话的时候,很容易就会呈现出公说公有理,婆说婆有理的现象,甚至我刚接触这行的时候,会和他们争论不休。自从我学会了这个排查利器之后,我和别人争论就再也没输过。因为我会先抓个包分析一下,可以清晰看到自己代码处理结果是否有错误,如果是自己错了,安静修改错误;如果不是自己的错,大可以把包丢出来,可以说抓到的包是个铁证。
一、讲正事,介绍一下Tcpdump命令(没安装的yum install tcpdump一下)。
Tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
讲白了,Tcpdump抓取的就是最底层的数据。
tcpdump的常见用法:
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络接口>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>]
例子:
1.抓取5个包
tcpdump -c 5
2.抓取5个主机端口以数字显示的包
tcpdump -c 5 -n
3.抓取5个主机端口以数字显示的完整包
tcpdump -c 5 -n -s0
4.抓取eth0网卡上的5个包
tcpdump -i eth0 -c 5 -n -s0
5.抓取eth0网卡上的5个tcp的包
tcpdump tcp -i eth0 -c 5 -n -s0
6.抓取eth0网卡上的5个tcp的包,并且这个包的源地址是10.10.10.2的
tcpdump tcp -i eth0 -c 5 -n -s0 and src net 10.10.10.2
7.抓取eth0网卡上的5个tcp的包,并且(这个包的源地址是10.10.10.2的,或者目标地址是10.10.10.2的)
tcpdump tcp -i eth0 -c 5 -n -s0 and src net 10.10.10.2 or dst net 10.10.10.2
8.抓取eth0网卡上的5个tcp的包,并且(这个包的源地址是10.10.10.2,源端口是12580的)
tcpdump tcp -i eth0 -c 5 -n -s0 and src net 10.10.10.2 or src port 12580
9.抓取eth0网卡上的5个tcp的包,并且(这个包的目标地址是10.10.10.2,目标端口是12580的)
tcpdump tcp -i eth0 -c 5 -n -s0 and dst net 10.10.10.2 or dst port 12580
10.抓取eth0网卡上的5个tcp的包,并且(这个包的源地址是10.10.10.2的,或者目标地址是10.10.10.2的),并且把抓到的包写到当前目录的target.cap文件中
tcpdump tcp -i eth0 -c 5 -n -s0 and src 10.10.10.2 or dst 10.10.10.2 -w ./target.cap
通过以上的这几个例子,可以发现这个tcpdump的选项很多,并且非常灵活实用。十分满足我们平常的使用需求。
二、介绍一下Wireshark
Wireshark是一个网络封包分析软件,可以显示出最为详细的网络封包资料,并且支持多种协议。通过这款软件,我们可以很好的排查网络问题。软件里提供的过滤规则十分强大,也是令我使用印象最深刻的,可以帮助我们过滤一些没用的干扰信息。
(下载地址:https://www.wireshark.org/#download)
一打开界面,看着就是功能很丰富的感觉:

它自身也携带了支持过滤器的抓包工具,点击 捕获-选项 就可以看到:

抓完之后,可以点击图标保存捕获文件,这样后面随时都可以通过保存的文件打开wireshark进行解析。

wireshark打开一个包之后,可以看到如下界面:

在报文结构与数据中:
Frame: 物理层的数据帧概况

Ethernet II: 数据链路层以太网帧头部信息

Internet Protocol Version 4: 网络层IP包头部信息

Transmission Control Protocol: 传输层的数据段头部信息

Data: 存放一些多余出来的wireshark自身无法解析的协议(这里一般是我们实际使用的报文数据)
如果要是使用过滤器的话,对于不是很经常使用wireshark的,可以使用以下方法节省时间:
比如 我要使用 192.168.0.33 这个source IP作为过滤条件,那我可以右键这一个单元--作为过滤器使用--选中/非选中,就可以查看过滤后的结果了,操作比较方便,多使用几次就可以自己手写过滤器规则了。

包括在底下的报文结构,也是可以作为条件过滤结果,图示如下。

还有一个比较常用的就是,我们实际使用的可能是自己内部的一些协议,比如加解密处理后的,我们需要把对应的十六进制报文复制下来,通过自己的程序进行解析。下列就是复制完整报文的步骤。如果是只需要我们加密的数据,可以 右键Data--复制--...as a Hex Stream 复制十六进制报文。

换编码:
在实际使用的过程中,有可能会出现wireshark协议识别错误,我们可以 右键数据包-Decode As... 选择我们自己需要的协议,如果没有的话,那就只能自己解析了。


三、总结
其他还有很多实用功能,我就不一一介绍了,留给大家使用过程中去了解。
在使用过程中,会发现网络的很多乐趣,以前书面上看到的一些网络知识很多都会在抓到的包中呈现,希望大家可以用心使用、用心体会。在遇到联调问题的时候,可以通过抓包的形式呈现数据,一般我们开发过程中,我们自己都会编写一套我们程序使用的解析工具。一来,给程序交互使用;二来,抓包的时候,复制十六进制可以直接解析出具体的报文。这可以很好地帮我们定位代码执行的最终输出是否可靠。
排查利器:Tcpdump抓包 & Wireshark解析的更多相关文章
- linux下利用tcpdump抓包工具排查nginx获取客户端真实IP实例
一.nginx后端负载服务器的API在获取客户端IP时始终只能获取nginx的代理服务器IP,排查nginx配置如下 upstream sms-resp { server ; server ; } s ...
- Wireshark和TcpDump抓包分析心得
Wireshark和 TcpDump抓包分析心得 1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...
- tcpdump 抓包让wireshark来分析
在linux下面用tcpdump 抓包非常方便, 但是抓的包要提取出来进行分析, 还是得用wireshark来过滤分析比较方便. 下面先介绍一下 TCPDUMP 的使用 例:tcpdump host ...
- 转 Wireshark和TcpDump抓包分析心得
1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话 ...
- Android利用tcpdump抓包,用wireshark分析包。
1.前言 主要介绍在android手机上如何利用tcpdump抓包,用wireshark分析包. android tcpdump官网: http://www.androidtcpdump.com/ t ...
- 转:tcpdump抓包分析(强烈推荐)
转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...
- tcpdump抓包工具的基本使用
为了更好的深入理解计算机网络等相关知识,例如TCP\UDP\IP等,我们就必须利用tcpdump.Wireshark等工具对网络进行分析.本篇博文主要记录一下tcpdump这个网络分析利器的一些基本使 ...
- tcpdump抓包命令
本文转自 : http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html http://www.itshouce.com.cn/l ...
- 抓包工具:tcpdump抓包命令详解
抓包工具:tcpdump抓包命令详解 简介: tcpdump全称:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以 ...
随机推荐
- WebPack系列--开启HappyPack之后,再将项目打包速度缩短5秒
效果展示 打包时间:缩短了 26.296s-20.586s=5.71s 先看两组测试数据,第一组是没有使用DllPlugin的打包测试数据,测量三次取平均值是26.296s(25.72+25.56+2 ...
- @unittest.skip(reason):强制跳转。reason是跳转原因
在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...
- 让vim显示空格,tab字符,及vim多行注释
1.显示 TAB 键 文件中有 TAB 键的时候,你是看不见的.要把它显示出来: :set list 现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里 ...
- Android平台的so注入--LibInject
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/53890315 大牛古河在看雪论坛分享的Android平台的注入代码,相信很多搞An ...
- Linux下磁盘分区、卸载和磁盘配额
目录 一:查看磁盘信息 二:Linux磁盘分区 三:Linux分区的卸载 四:Linux磁盘配额 一:查看磁盘信息 fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同时也能为每个 ...
- postgresql高级应用之合并单元格
postgresql高级应用之合并单元格 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14732172.html 1.写在前面✍ 继上一篇postgresql高 ...
- vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...
- .NET Core 服务诊断工具
前言: 前一篇文中介绍了.NET Core-全局性能诊断工具 的使用方法,那么接下来自己实现一个简单.NET Core的诊断工具. 该工具主要包括:.NET Core 程序进程信息查看.性能计数器结果 ...
- MySQL锁等待与死锁问题分析
前言: 在 MySQL 运维过程中,锁等待和死锁问题是令各位 DBA 及开发同学非常头痛的事.出现此类问题会造成业务回滚.卡顿等故障,特别是业务繁忙的系统,出现死锁问题后影响会更严重.本篇文章我们一起 ...
- python爬虫——《英雄联盟》英雄及皮肤图片
还记得那些年一起网吧开黑通宵的日子吗?<英雄联盟>绝对是大学时期的风靡游戏,即使毕业多年的大学同学相聚,难免不怀念一番当时一起玩<英雄联盟>的日子. 今天就给大家分享一下英雄及 ...