Tshark使用笔记
记录tshark常用命令
查看tshark版本
bash
tshark -v
查看网络接口
bash
tshark -D
实际使用,只需要网络接口对应的序号即可。
不用root和sudo
bash
sudo dpkg-reconfigure wireshark-common
选「是」,然后使用root运行:
bash
usermod -a -G wireshark ht
chmod +x /usr/bin/dumpcap
chmod +s /usr/sbin/tcpdump
chmod的两条命令可选,尝试如果不行再全部执行,可能要注销或重启生效;一般这样执行后就可以直接以普通用户执行tshark命令了。
tshark常用命令
捕获过滤器,存入文件
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap
只能手动停止。
注意截图左下角,有显示数据包的数量。
参数解释:
- -nn 不解析ip和端口,显示原始ip和端口
- -i 序号为1的网络接口
- -f 捕获过滤器,在双引号内请遵从BPF的语法。
- -w 抓包结果存储到文件
指定数据包大小和数量
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap -s 100-c 100
-s 指定每个数据包的大小,单位字节 -c 表示数据包的数量,抓够100个数据包会自动停止。
指定文件大小的抓包
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap -a filesize:512
抓够512字节后会自动停止。
指定抓包时间
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap -a duration:10
抓包10秒就自动停止。
保存为多个大小相同文件
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap -b filesize:1024
单位:KB 保存的文件命名为: packets_00001_20240616230331.pcap packets_00002_20240616230353.pcap ...... 只能手动停止。
指定抓包时长保存相同大小
bash
tshark -nni 1 -f "icmp or port 443" -w packets.pcap -b filesize:1024 -a duration:600
抓包10分钟,每个文件1MB
读取数据包
bash
tshark -r packets.pcap -c 50
-c 指定读取数据包的数量,不加即读取全部。
显示过滤输出特定字段
bash
tshark -r packets.pcap -Y dns -T fields -e dns.qry.name -E separator="|"
每个字段前面都用-e参数
修改每个报文的大小并另存
bash
editcap -s 88 packets.pcap new.pcap
tshark统计相关
抓包文件的基本信息
bash
capinfos packets.pcap
包含抓包文件的报文数、文件大小、抓包时长等丰富的信息。它的功能跟 Wireshark 里 Statistics 下拉菜单里的 Capture File Properties 是类似的
专家信息
bash
tshark -r packets.pcap -z expert -q
比较慢,输出信息太多,还是下载pcap文件后使用wireshark GUI打开比较方便。
会话统计
bash
tshark -r packets.pcap -z conv,ip -q
tshark命令实现特定场景需求
找出数据包中所有dns域名
排序并去重示例:
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y dns -T fields -e dns.qry.name | sort | uniq
-Y 显示过滤 参数值可以用双引号扩起来 T fields -e 需要显示的字段 参数值可以用双引号扩起来
增加去查询的dns对应的IP:
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y dns -T fields -e ip.dst -e dns.qry.name | sort | uniq
这种方式无法区分具体的方向,也就无法去重。
统计总共有多少dns域名请求:
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y "dns" -T fields -e dns.qry.name | sort | uniq | wc -l
更多带dns查询的命令:
bash
tshark -r test.cap -T fields -e frame.time -e ip.src -e ip.dst -e dns.qry.name -R 'udp.dstport==53 || dns'
找出所有tls的SNI域名
排序并去重示例:
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y tls.handshake.type==1 -T fields -e tls.handshake.extensions_server_name | sort | uniq
统计tls总共有多少dns域名请求(client hello):
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y "tls.handshake.type==1" -T fields -e "tls.handshake.extensions_server_name" | sort | uniq | wc -l
追加提取目标的ip和端口:
bash
tshark -r 10271418-no-doh-no-proxy.pcapng -Y tls.handshake.type==1 -T fields -e ipv6.dst -e tcp.dstport -e tls.handshake.extensions_server_name -E separator="|" | sort | uniq
以上这种写法如果同时有ipv4和ipv6就不适用,都会缺失一部分。