首页 > 代码库 > tcpdump
tcpdump
tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s
snaplen ] [ -T type ] [ -w file ] [ 捕捉条件 ]
常用选项:
-S
-e 显示链路层头 tcpdump -Se
-vv 显示详细的协议信息 tcpdump -Sevv
-n 不把地址转换成名字 tcpdump -Sevvn
-f 数字形式显示外部的互联网地址 tcpdump -Sevvnf
-i 接口名 指定监听的接口 tcpdump -i eth0
-s 抓包的大小,tcpdump默认只抓68字节 tcpdump -s 1518
-c 数字 指定抓多少个包 tcpdump -Sevvnfc 100 -i eth0
-l > 文件路径 将结果保存到指定文件 tcpdump -Sevvnflc > /tcp.txt 100 -i eth0
-w 文件路径 将原始报文保存到指定文件(不显示) tcpdump -Sevvfnw /tcp.txt -c 100 -i eth0
若指定文件为-则标准输出(即能看到) tcpdump -w -
-r 文件路径 读取以-w保存的文件 tcpdump -r /tcp.txt
若指定文件为-则从标准输入读取 tcpdump -r -
-x 以十六进制显示每个报文,可以显示较小的完整报文(redhatenterprise下测试最多82个字节,)
,可配合其它使用(不含链路层信息从IP头开始)
tcpdump -rx
其它选项用到时可以再去查手册
可配合过滤语法:可通过“and/or/not”组合使用
根据地址类型匹配
srcip地址
dstip地址
ip地址ip地址
src net网络号
dst net网络号
网络号网络号
网络号 网络号 掩码掩码
net网络号/掩码长度
ether dstMAC地址
ether srcMAC地址
ether 原MAC目的MAC
etherbroadcast //二层广播
ipbroadcast //三层广播
ethermulticast //二层多播
ipmulticast //三层多播
gatewayip地址 //若报文将该IP当做网关就匹配
根据端口匹配
src port端口
dst port端口 //不分tcp、udp
源端口目的端口
tcp src port端口
根据报文长度匹配
less长度 //报文长度小于等于指定就匹配
len <=长度
greater长度 //大于等于该长度就匹配
len >=长度
根据协议匹配 :协议可以写数字的协议号也可以直接写协议名字,但需要用\或\\转义
proto协议 //各种协议
ip proto协议号 //基于IP的协议
ether proto协议号 //基于二层的协议
tcpdump常用的选项:
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议;)
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
(2) 想要截获主机210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(在命令行中适用括号时,一定要)
#tcpdump host 210.27.48.1 and \\ (210.27.48.2 or 210.27.48.3\\)
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包 ,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
数据链路层头信息:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60:h219.33357 > ice. telnet
t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该 数据包,eth0>表示从网络接口设备
发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它 表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC
地址,表示该数据包的 目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >ice. telnet 表明
该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535表明对序列号是222535的包进行响应. win 8760
表明发送窗口的大小是8760.
ARP包头信息:
tcpdump arp
22:32:42.802509 eth0 > arp who-has route tell ice(0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66(0:90:27:58:af :1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 ARP请求包,who-has route tell ice
表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。
TCP包头信息:
src >dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P(PUSH) , R (RST) "." (没
有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小,urgent表明数据包
中是否有紧急指针. Options是选项.
UDP包头信息:
route.port1> ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 ICE的port2端口,类型是UDP,包的长
度是lenth
tcpdump