tcpdump抓包及tshark解包方法介绍
tshark是wireshark的命令行工具,通过shell命令抓取、解析报文。tcpdump是Linux系统下的抓包工具。wireshark和tcpdump都共同使用 libpcap作为其底层抓包的库,tshark也可以抓取报文。
有时候需要在linux系统或者ARM开发板中进行抓包,使用tcpdump抓包更加方便,在这种场景下,一般使用tcpdump进行抓包,然后在Windows中使用wireshark来分析生成的包文件,在自动化分析或者自动化测试中,可以使用tshark来进行包解析。本文介绍使用tcpdump抓取报文后使用tshark进行报文解析。
安装
wireshark下载安装
wireshark官网:https://www.wireshark.org/download.html
# linux
yum -y install wireshark
yum -y install tcpdump
tcpdump抓包
tcpdump官方文档:https://www.tcpdump.org/index.html#documentation
抓包
抓取eth1网卡数据包,数据写入文件/tmp/packet.pcap
tcpdump -i eth1 -w /tmp/packet.pcap >/dev/null 2>&1 &
其中
- >/dev/null:将标准输出(控制台输出)重定向到/dev/null中,/dev/null代表 linux 的空设备文件。表示不输出内容
- 2>&1:重定向绑定,错误输出(2)和标准输出(1)输出到同一个地方
- >/dev/null 2>&1的作用就是丢弃标准输出和错误输出,不会输出任何信息到控制台。
也可以只抓取特定协议的报文,比如过滤tcp报文:
tcpdump -i eth1 tcp -w /tmp/packet.pcap >/dev/null 2>&1 &
停止抓包
如果没有限制 tcpdump 抓包的数量(-c 参数),tcpdump 会持续抓包。可以通过 Ctrl+C 来停止抓包,或者杀掉tcpdump进程:
killall -9 tcpdump
杀掉tcpdump进程后会停止抓包。
tshark命令解析数据包
抓包完成后对数据包进行解析,下面介绍使用tshark解析数据包。
tshark工具介绍
tshark参考文档:https://www.wireshark.org/docs/man-pages/tshark.html
如果要在windows命令行窗口使用tshark需要将Wireshark安装路径 C:\Program Files\Wireshark 添加到环境变量。

Linux系统和windows系统tshark使用方法一样
tshark命令解析数据包
常用参数:
- -r:指定需要解析的数据包
- -T:指定数据包解析输出格式,支持格式见解码所有数据,这里介绍
-T fields,一般与-e选项连用。 - -e:指定过滤的字段
- -E:可用于指定分隔符:
separator=,:默认分隔符为缩进(\t) - -Y:过滤指定报文
tshark [ -r <infile> ] -T fields [ -e <field> ] -E <field print option> -Y <displaY filter>
tshark -r packet.pcap -T fields -e 解析的字段 -E separator=,
需要解析的字段可以通过Wireshark查看:
选择要过滤的内容 -> 右键 -> Apply as Filter -> Selected

例1:过滤具有源IP和目的IP字段的所有报文
tshark -r packet.pcap -T fields -e ip.src -e ip.dst
例2:过滤源地址为fe80::ca3a:35ff:fe09:efa1的DHCPv6 Solicit报文,并读取UDP源端口号和IPv6目的地址。
$ tshark -r packet.pcap -T fields -E separator=, -Y dhcpv6.msgtype==1 -Y ipv6.src==fe80::ca3a:35ff:fe09:efa1 -e udp.srcport -e ipv6.dst
,ff02::2
,ff02::2
,ff02::16
546,ff02::1:2
546,ff02::1:2
546,ff02::1:2
546,ff02::1:2
$
过滤完成后进行进一步的分析
比如可以使用grep命令进一步提取满足条件的报文
过滤源地址或者目的地址为192.168.5.38的报文
# linux
tshark -r packet.pcap -T fields -e ip.src -e ip.dst | grep 192.168.5.38
# windows
tshark -r packet.pcap -T fields -e ip.src -e ip.dst | findstr 192.168.5.38

也可以使用python、Java等高级语言进行进一步的分析,Python示例如下:
result = os.popen("tshark -r packet.pcap -T fields -e ip.src -e ip.dst“)
ret = result.read() #
for i, value in enumerate(ret.split("\n")):
处理value值
pass
解码所有数据
某些字段可能无法使用tshark过滤,这种情况下,可以先将pcap文件解码,tshark支持如下文件格式:
ek|fields|json|jsonraw|pdml|ps|psml|tabs|text
解码成xml和text格式文件:
tshark -r packet.pcap -V -T pdml > packet.xml
tshark -r packet.pcap -V -T text > packet.txt
- -V:输出数据包详细信息
- -T pdml:指定数据包解码输出格式为xml格式
xml文档可以使用python的ElementTree工具解析:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
问题:windows tshark命令无效
系统:windows10
tshark已加入环境变量中
输入tshark,显示:
C:\Users\DELL>tshark
The NPF driver isn't running. You may have trouble capturing or
listing interfaces.
Capturing on '鏈湴杩炴帴* 9'
WIreshark安装需要安装WinPcap,查看电脑已经安装了WinPcap。
接下来以管理员身份运行命令行串口,输入net start npf 启动NPF,出现如下报错信息:
C:\WINDOWS\system32>net start npf
服务名无效。
请键入 NET HELPMSG 2185 以获得更多的帮助。
卸载WinPcap10,下载安装winpcap4.1.3:https://www.winpcap.org/install/default.htm
重新输入net start npf 启动NPF:
C:\WINDOWS\system32>net start npf
请求的服务已经启动。
请键入 NET HELPMSG 2182 以获得更多的帮助。
启动成功!
tshark命令也可以正常使用了
--THE END--
文章标题:tcpdump抓包及tshark命令解包方法介绍
本文作者:hiyo
本文链接:https://www.cnblogs.com/hiyong/p/14288239.html
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
tcpdump抓包及tshark解包方法介绍的更多相关文章
- Android ROM包定制(解包,增删模块,打包)
1. 解包 假设有一个名为update.zip的ROM包,我们要在Ubuntu下对它进行定制.首先把system.transfer.list和system.new.dat.br(有些旧版的系统的镜像可 ...
- php操作memcache的用法、详解和方法介绍
1.简介 memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问. memcache也提供用于通信对话(sess ...
- DELPHI高性能大容量SOCKET并发(四):粘包、分包、解包
粘包 使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.粘包可能由发送方造成,也可能由接收方造成.TCP为提 ...
- C#高性能大容量SOCKET并发(五):粘包、分包、解包
原文:C#高性能大容量SOCKET并发(五):粘包.分包.解包 粘包 使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一 ...
- Python中的参数解包:`*`表达式和 `**`表达式
目录 1.参数解包:方法调用中的*表达式和**表达式 2.参数解包:方法定义中的*表达式和**表达式 3.在元组,列表,集合和字典中解包 4.Extended Unpacking:赋值表达式左边的*表 ...
- 在python中元组与列表的区别及序列解包
一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...
- Python - 解包的各种骚操作
为什么要讲解包 因为我觉得解包是 Python 的一大特性,大大提升了编程的效率,而且适用性很广 啥是解包 个人通俗理解:解开包袱,拿出东西 正确理解:将元素从可迭代对象中一个个取出来 python ...
- tar常用解包
(1)常见解压缩包 .tar解包 tar -xvf xxxx.tar 打包 tar -cvf xxxx .tar.bz2解包 bzip2 -d xxxx.tar.bz2 #会解压成. ...
- Python中的可变、不可变对象和赋值技巧序列解包
可变对象和不可变对象 在python中一切皆对象.在Python中不存在所谓的值传递调用,一切传递都是对象的引用,也可认为是传址. python中,对象分为可变(mutable)和不可变(immuta ...
随机推荐
- 22. Generate Parentheses生成指定个括号
生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边) 思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号 有点像 ...
- Android驱动学习-内部机制_回顾binder框架关键点
内部机制_回顾binder框架关键点server注册服务时, 对每个服务都提供不同的ptr/cookie,在驱动程序里对每个服务都构造一个binder_node, 它也含有ptr/cookie cli ...
- 事务的概念,以及事务在JDBC编程中处理事务的步骤
事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为原子性.一致性.隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务 .JDBC处理事务有如下操作: 1,con ...
- TurtleBot3 Waffle (tx2版华夫)(8)键盘控制
1)[Remote PC] 启动roscore $ roscore 2)[Turbot3] 启动turbot3 $ roslaunch turbot3_bringup minimal.launch 3 ...
- java 多态 向上造型
最近在读java 编程思想,在读多态一章时,遇到了一个问题,在此记录一下. 1 package main.demo; 2 3 class Super{ 4 public int filed =0; 5 ...
- 解决黑群晖"抱歉,您所指定的页面不存在"-记一次黑群晖修复案例
起因 搞了一个usb外接硬盘准备备份数,刚好看到群晖有个工具软件"USB Copy". 安装后设置拷贝docker文件夹,然后就悲剧了,nas主页抛出提示 一开始也是直接网上搜索标 ...
- Linux常用命令(df&dh)
在Linux下查看磁盘空间使用情况,最常使用的就是du和df了.然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊. du的工作原理 du命令会对待统计文件逐个调用fstat这个系统调用,获取文件 ...
- Java安全之Weblogic 2016-3510 分析
Java安全之Weblogic 2016-3510 分析 首发安全客:Java安全之Weblogic 2016-3510 分析 0x00 前言 续前面两篇文章的T3漏洞分析文章,继续来分析CVE-20 ...
- ASP.NET 上传文件到共享文件夹
创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 上传文件代码 web.config <!--上传文件配置,UploadP ...
- 2021超详细的HashMap原理分析,面试官就喜欢问这个!
一.散列表结构 散列表结构就是数组+链表的结构 二.什么是哈希? Hash也称散列.哈希,对应的英文单词Hash,基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出 这个映射的规则就是对 ...