tcpdump
tcpdump抓包命令,tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。
tcpdump命令格式
tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae] [-qX] [-r 文件] [所欲捕获的数据内容]
-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。
tcpdump选项
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
~]# tcpdump -vv
不带参数的tcpdump会收集网络中所有的信息包头,数量巨大,必须过滤。
[opotion]
- -A: 以ascii格式打印出所有分组,并将链路层的头最小化
- -c: 在收集到指定数量的分组后,tcpdump就会停止
- -D: 打印出系统中所有可以用tcpdump截取包的网络接口
- -e: 在输出行打印出数据链路层的头部信息
- -i: 指定监听的网络接口
- -b: 在数据链路层选择协议,包括arp、rarp,ipx
- -n: 不把网络地址装换成名字
- -nn:不进行端口名称的转换
- -t: 在输出的每一行不打印时间戳
- -P: 不把接口设置成混杂模式
- -q:快速输出,只输出较少的协议信息
- -r:从指定的文件中读取包(一般通过-w选项产生)
- -w:写入到文件中,一般以.pcap结尾
- -v:输出稍微详细的信息
- -vv:输出详细的报文信息
tcpdump表达式
- 第一种是关于类型的关键字:主要包括host,net,port。
- 第二种是确定chuan传输方向的关键字:主要包括src,dst,dst or src,dst and src。
- 第三种是协议的关键字:主要包括fddi,ip,arp,icmp,tcp,udp等
输出结果介绍
- 数据链路层的信息
1
tcpdump -e host 10.211.55.24
2
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t 0:0(0) ack 22535 win 8760 (DF)
3
可以得到数据链路层mac地址的通信过程
- icmp包的tcpdump输出信息
1
[root@localhost ~]#tcpdump icmp
2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
3
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
4
08:16:17.876094 IP node1 > 10.211.55.24: ICMP echo request, id 10800, seq 1, length 64
5
08:16:17.876125 IP 10.211.55.24 > node1: ICMP echo reply, id 10800, seq 1, length 64
- tcp包的输出信息
1
src > dst: flags data-seqno ack window urgent options
2
src > dst:表明从源地址到目的地址, flags是TCP报文中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是报文中的数据 的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明 报文中是否有紧急指针。 Options是选项。
- udp包的输出信息
1
oute.port1 > ICE.port2: udp lenth
2
UDP十分简单,上面的输出行表明从主机route的port1端口发出的一个UDP报文 到主机ICE的port2端口,类型是UDP, 包的长度是lenth。
举例
(1) 想要截获所有210.27.48.1 的主机收到的和发出的所有的分组:
1 | tcpdump host 210.27.48.1 |
(2) 想要截获主机源地址210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(注意:括号前的反斜杠是必须的):
1 | tcpdump src host 210.27.48.1 and dst \( 210.27.48.2 or 210.27.48.3 \) |
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
1 | tcpdump ip host 210.27.48.1 and ! 210.27.48.2 |
(4) 如果想要获取主机192.168.228.246接收或发出的ssh包,并且不转换主机名使用
1 | tcpdump -nn -n host 192.168.228.246 and port 22 and tcp |
(5) 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示
1 | tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn |
(6) 过滤源主机物理地址为XXX的报头:
1 | tcpdump ether src 00:50:04:BA:9B |