Tcpdump 命令介绍

一、介绍

  • tcpdump命令用于倾倒网络传输数据。
    
  • tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
    
    tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
    

二、语法格式

  • 使用说明
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

三、相关参数说明

-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。

四、类型关键字

  • 过滤表达式大体可以分成三种过滤条件,“类型”、“方向”和“协议”

    • 类型
    host, net, port, portrange
    
    例如:host 192.168.201.128 , net 128.3, port 20, portrange 6000-6008'
    
    • 方向
    src, dst, src or dst, src and dst
    
    举例说明:
    src 210.45.114.211 指明ip包中源地址是210.45.114.211
    dst net 210.11.0.0 指明目的网络地址是210.11.0.0  。
    
    • 协议
    tcp, udp , icmp,若未给定协议类型,则匹配所有可能的类型
    

五、操作实例

(1)只想查目标机器端口是21或80的网络包,其他端口的我不关注:
sudo tcpdump -i eth0 -c 10 'dst port 21 or dst port 80'
(2) 想要截获主机172.16.0.11 和主机210.45.123.249或210.45.123.248的通信,使用命令(注意括号的使用):
sudo tcpdump -i eth0 -c 3 'host 172.16.0.11 and (210.45.123.249 or210.45.123.248)'
(3)想获取使用ftp端口和ftp数据端口的网络包
sudo tcpdump 'port ftp or ftp-data'
(4) 如果想要获取主机172.16.0.11除了和主机210.45.123.249之外所有主机通信的ip包,使用命令
sudo tcpdump ip ‘host 172.16.0.11 and ! 210.45.123.249’
(5) 抓172.16.0.11的80端口和110和25以外的其他端口的包
sudo tcpdump -i eth0 ‘host 172.16.0.11 and! port 80 and ! port 25 and ! port 110’
(6)抓取主机10.37.63.255和主机10.37.63.61或10.37.63.95的通信:
tcpdump host 10.37.63.255 and (10.37.63.61 or 10.37.63.95)
(7)抓取主机10.37.63.3所有在TCP 80端口的数据包:
tcpdump -i eth1 host 10.37.63.3 and tcp port 80
(8)抓 HTTP GET 数据,”GET “的十六进制是 0x47455420
tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'
(9)抓取网站www.baidu.com
tcpdump -A -i eth1 host www.baidu.com
(10)
tcpdump -i eth0 src port 80 -xx -Xs 0 -w test.pcap

-i:指定网卡
src:指明包的来源
port:指明端口号
-xx:指抓到的包以16进制显示
-X:指以ASCII码显示
-s 0:指明抓整个包
-w:写到文件中