tcpdump -i <网卡名称> tcp and port <端口号> -n -nn -v -vv -w cache -W 1000:1000个文件 -C 50:文件大小50M -s 80 -Z <用户名称如root>
tcpdump -i en0 tcp and port 6379 -n -nn -v -vv -w cache -W 1000 -C 50 -Z root
tcpdump -i eth0 port 80 and host nghtt2.org -w h2c.pcap
tcpdump -iany tcp and “port 8888 or port 8088”
如何使用tcpdump分析网络报文
这节课我们将介绍,如何在服务器端使用tcpdump进行抓包。
BPF过滤器:Wireshark捕获过滤器
- Berkeley Packet Filter, 在设备驱动级别提供抓包过滤接口,多数抓包工具都支持此语法
- expression表达式: 由多个原语组成。
Expression表达式
- primitives原语: 由名称或数字(红色),以及描述它的多个限定词组成
- qualifiers限定词
- Type(蓝色): 设置数字或者名称所指示类型,例如 host(蓝色) www.baidu.com(红色)
- Dir(绿色): 设置网络出入方向,例如 dst(绿色) port(蓝色) 80
- Proto(黄色): 指定协议类型,例如 udp(黄色)
- 其他
- 原语运算符(紫色)
- 与: &&或者and
- 或: ||或者or
- 非: !或者not
- 例如: src(绿色) or(绿色) dst(绿色) portrange(蓝色) 6000-8000(红色) &&(紫色) tcp(黄色) or(紫色) ip6(黄色)
- qualifiers限定词
限定词
-
Type: 设置数字或者名称所指示类型
- host、 port
- net,设定子网,net 192.168.0.0 mask 255.255.255.0 等价于 net 192.168.0.0/24
- portrange, 设置端口范围,例如portrange 6000-8000
-
Dir: 设置网络出入方向
- src, dst, src or dst, src and dst
- ra, ta, addr1, addr2, addr3, addr4 (仅对 IEEE 802.11 Wireless LAN有效)
-
Proto: 指定协议类型
- ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp, udp, icmp, igmp, igrp, pim, ah, esp, vrrp
-
其他
- gateway: 指明网关IP地址,等价于ether host ehost and not host host
- broadcast: 广播报文,例如ether broadcast 或者 ip broadcast
- multicast: 多播报文,例如ip multicast 或者 ip6 multicast
- less, greater: 小于或者大于
基于协议域过滤
- 捕获所有TCP中的RST报文(不是正常的关闭tcp连接,而是直接关闭了连接)
- tcp[13]&4 == 4
- 抓取HTTP GET报文
- port 80 and tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x47455420
- 注意: 47455420是ASCII码的16禁止,表示"GET" hex和ascii编码转换的网站: https://www.rapidtables.com/convert/number/ascii-to-hex.html
- TCP报文可能不只20字节,data offset提示了承载数据的偏移,但它以4字节为单位
- port 80 and tcp[((tcp[12:1] & 0xf0) » 2):4] = 0x47455420
Byte |0 |1 |2 |3 |
Offset +--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|-----
0| | | ^ ^
| Source Port | Destination Port | | |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| | |
4| | | |
| Sequence Number | 20 |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| | |
8| | | |
| Acknowledgment Number(If ACK set) | | Offset
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| | |
12| | | TCP Flags | | | |
| Offset | Reserved | C E U A P R S F| Window | | |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--| | |
16| | | | |
| Checksum | Urgent Pointer | V |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|-- |
20| | |
| TCP Option(variable length, optional) | V
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|-----
|0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9 30 1
捕获及停止条件
- -D 列举所有网卡设备
- -i 选择网卡设备
- -c 抓取多少条报文
- –time-stamp-precision指定捕获时的时间精度,默认毫秒micro,可选纳秒nano
- -s 指定每条报文的最大字节数,默认262144字节
文件操作
- -w 输出结果至文件
- -C 限制输入文件的大小,超出后,以后缀加1等数字的形式递增。 注意单位是1,000,000字节 tcpdump -C 1 -W 3 -w abc
- -W 指定输出文件的最大数量,到达后会重新覆写第1个文件
- -G 指定每隔N秒就重新输出至新文件,注意w参数应基于strftime参数指定文件名,(strftime是一个格式化时间的命令行参数) tcpdump -G 3 -w def%M-%S
- -r 读取一个抓包文件
- -V 将待读取的多个文件名写入一个文件中,通过读取该文件同时读取多个文件
说明符 | 替换为 |
---|---|
%a | 缩写的星期几名称 |
%A | 完整的星期几名称 |
%b | 缩写的月份名称 |
%B | 完整的月份名称 |
%c | 日期和时间表示法 |
%d | 一月中的第几天(01-31) |
%H | 24小时格式的小时(00-23) |
%I | 12小时格式的小时(01-12) |
%j | 一年中的第几天(001-366) |
%m | 十进制数表示的月份(01-12) |
%M | 分 (00-59) |
%p | AM或PM名称 |
%S | 秒 (00-61) |
%U | 一年中第几周,以第一个星期日作为第一周的第一天(00-53) |
%w | 十进制数表示的星期几,星期日表示为0 (0-6) |
%W | 一年中的第几周,以第一个星期一作为第一周的第一天(00-53) |
%x | 日期表示法 |
%X | 时间表示法 |
%y | 年份,最后两个数字(00-99) |
%Y | 年份 |
%Z | 时区的名称或缩写 |
%% | 一个%符号 |
输出时间戳格式(输出到屏幕中的时间戳格式)
- -t 不显示时间戳
- -tt 自1970年1月1日0点至今的秒数
- -ttt 显示邻近两行报文间经过的秒数
- -tttt 带日期的完整时间
- -ttttt 自第一个抓取的报文起经历的秒数
分析信息详情
- -e 显示数据链路层头部
- -q 不显示传输层信息
- -v 显示网络层头部更多的信息,如TTL、id等
- -n 显示IP地址、数字端口代替hostname等
- -S TCP 信息以绝对序列号替代相对序列号
- -A 以ASCII方式显示报文内容,适用HTTP分析
- -x 以16进制方式显示报文内容,不显示数据链路层
- -xx 以16进制方式显示报文内容,显示数据链路层
- -X 同时以16进制及ASCII方式显示报文内容,不显示数据链路层
- -XX 同时以16进制及ASCII方式显示报文内容,显示数据链路层
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。