学习自:Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收! - Linux云计算网络 - SegmentFault 思否
tcpdump命令详解_tcpdump抓包命令-CSDN博客
1、用途
tcpdump是一个Linux平台抓包工具。
它可以抓取涵盖整个TCP/IP协议族的数据包,支持对网络层、协议、主机、端口的过滤,并提供and、or、not等逻辑语句来过滤无用的信息。
2、用法
①tcpdump [选项 参数] [not] [过滤器]
3、说明
1)[选项 参数]
选项后边紧跟着这个选项的参数
选项 |
参数(不写代表无参) |
说明 |
-A |
|
只用ASCII打印报文的全部数据。 与参数-X冲突。 |
-b | ip、arp、rarp、ipx | 在数据链路层上选择协议,包括ip、arp、rarp、ipx等 |
-c | 数字 | 抓包数量 |
-D | 列出OS所有可用于抓包的接口 | |
-e | 打印链路层的报文首部 | |
-i |
网卡名、any |
-i 网卡名:指定监听网卡 -i any:监听所有网卡 |
-n |
不解析主机名,直接用IP显示。 默认用hostname显示 |
|
-nn |
不解析主机名和端口,直接用Port显示。 默认显示Port对应的服务名。 |
|
-p | 关闭接口的混杂模式 | |
-P |
in、out、inout |
指定抓取的包是进入还是流出的,可选参数有in、out、inout。 默认inout。 |
-q | 快速打印输出,只输出少量的协议相关信息。 | |
-s | 数字 |
设置要抓取的包长,默认96B。 如果-s 0,会截取全部内容 |
-S | 以绝对值形式输出TCP序列号,缺省时以相对值形式输出 |
|
-t | 不打印时间戳 | |
-vv | 输出详细信息 | |
-w | 某个pcap文件的路径 | 输出到指定pcap文件 |
-X | 同时用hex和ascii显示报文头 | |
-XX | 同-X,但同时显示以太网首部 |
2)过滤器
用途:对抓取的包进行过滤,排除无用包
用法:tcpdump [选项 参数] [过滤器 参数]
参数:参数可以是多个合法参数的逻辑组合(使用and、or、!)
类型:
- proto:协议
- dir:报文方向
- type:类型
不同类型的过滤器可以同时使用,但此时需要用逻辑运算符(and、or、!)来表示它们之间的关系
过滤器类型 | 选项及后跟参数 | 说明 |
proto |
ip、arp、rarp、tcp、udp、icmp、ether。默认全部。 单独使用,无参 |
|
dir |
src、dst、src and dst、src or dst(默认) 单独使用,无参。 |
该项不能用于修饰proto,只能用于修饰type |
type |
host IP net 网段前缀 port 端口 portrange(端口范围) |
3)过滤器的例子
①过滤主机
a)抓取主机172.18.82.173上所有收到、发出的数据包
tcpdump host 178.18.82.173
b)抓取主机172.18.82.173上经过指定网卡eth0的所有包
tcpdump -i eth0 host 172.18.82.173
3)抓取经过网卡eth0,从主机172.18.82.173发出的包、发往主机172.18.82.173的包
tcpdump -i eth0 src host 172.18.82.173 tcpdump -i eth0 dst host 172.18.82.173
4)抓取200.200.200.1和(200.200.200.2或200.200.200.3)通信的包
抓取200.200.200.1和除了200.200.200.2之外所有主机通信的包
说明:
-
1)host之后的表达式中要用到逻辑关系;
-
2)表达式中的特殊符号如括号()需要加转义符,或者用单引号
tcpdump host 200.200.200.1 and \(200.200.200.2 or 200.200.200.3\) tcpdump host 200.200.200.1 and '(200.200.200.2 or 200.200.200.3)' tcpdump ip host 200.200.200.1 and ! 200.200.200.2
②筛选端口
tcpdump port 22 tcpdump src port 22 tcpdump dst port 22 tcpdump -i eth0 port 22
#发送到host 172.18.82.173的网卡eth0,接收端口为22的包
tcpdump -i eth0 dst host 172.18.82.173 and port 22
③筛选网段
tcpdump net 172.18.82 tcpdump src net 172.18.82 tcpdump dst net 172.18.82
④筛选协议
tcpdump -i eth0 icmp tcpdump -i eth0 ip tcpdump -i eth0 tcp tcpdump -i eth0 udp tcpdump -i eth0 arp
协议是双向的,不能用src、dst修饰。
4)参数的例子
①-n和-nn
-n:不显示主机名,显示通信协议。将主机名用IP表示。
-nn:不显示主机名和通信协议,将主机名用IP表示,将通信协议用通信端口表示
#只接收一个包 tcpdump -c 1 10:32:45.830452 IP hostname.ssh > 172.29.94.103.57782 #-n tcpdump -c 1 -n 10:32:45.830452 IP 172.29.198.119.ssh > 172.29.94.103.57782 #-nn tcpdump -c 1 -n 10:32:45.830452 IP 172.29.198.119.22 > 172.29.94.103.57782
②序列号 -S
TCP通信时有两种序列号,seq和ack。
-S代表了以绝对值或相对值的形式显示这两种序列号,通常情况下绝对值序列号会是一个很大的数。
tcpdump -nS
…… seq 2589090780:2589090988 ack 4014984328……
tcpdum -n
…… seq 288:704 ack 1
③逻辑表达式
tcpdump -c 5 tcp and port 22 and dst host 172.29.198.119
如果用到了括号,需要用转义符或单引号,其中单引号更方便一些:
tcpdump -i eth0 -nntvv '((dst net 172.18) and (not dst host 172.18.82.173) and (tcp) and (not port 22))' tcpdump -i eth0 -nntvv \(dst port 22 and host 172.198.10.22 \)
4、结合wireshark
tcpdump抓包时,默认打印到屏幕,这在包很多的时候会来不及看清内容。
此时可以用参数-w把抓取到的数据保存到文件:
tcpdump [选项 参数] [过滤选项 参数] -w 文件名.pcap
.pcap文件需要用wireshark工具查看,不能用vim或cat。
有时候我们为了对抓取的包进行区分,通常把文件名中加入时间、日期等变量,此时上式可以写为:
tcpdump [选项 参数] [过滤选项 参数] -w /tmp/%Y%m%d_%H%M.pcap
其中的%Y、%m、%d、%H、%M为各时间项的格式化表示形式(完整版如下)。
%y 两位数的年份表示 (00-99) %Y 四位数的年份表示 (0000-9999) %m 月(01-12) %d 日(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟(00-59) %S 秒(00-59) %a 星期几,简写 %A 星期几,完整 %b 月份,简写 %B 月份,完整 %c 本地的日期、时间表示 %j 一年第几天 (001-366) %p 本地A.M.或P.M.等价符 %U 一年第几周(00-53),星期天为一周开始 %w 星期几,数字(0-6) %W 一年第几周(00-53),星期一为一周开始 %x 本地日期 %X 本地时间,13:22:44这种形式 %Z 当前时区名称 %% 转义% %f 微秒
标签:dst,host,Linux,172.18,tcpdump,200.200,抓包,eth0 From: https://www.cnblogs.com/ShineLeBlog/p/18135595