前言
tcpdump工具简介:tcpdump是Linux操作系统中的字符界面的数据抓包分析软件,tcpdump可以将网络中传送的数据包完全截获下来提供分析。
tcpdump是一个用于截取网络分组,并输出分组内容的工具。用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
tcpdump基于底层libpcap库开发,tcpdump存在于基本的 FreeBSD系统中,由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。
tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。
tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。
tcpdump是Linux中强大的网络数据采集分析工具之一。
tcpdump抓包工具从筛选条件来分类,主要有三大类:
针对关键字:譬如主机名(HOST)、网段(NET)、端口(PORT);
针对包的方向:譬如源地址(src)、目的地址(dst),且可以支持逻辑运算符号(src and dst、src or dst)
针对协议进行抓包:譬如抓取tcp/udp/imcp等协议的数据包。
tcpdump安装
Ubuntu:apt-get install tcpdump
Centos:yum install tcpdump
tcpdump参数
常用参数选项说明:
tcpdump 常用命令参数:
-D :展示可供抓包的端口
-n :将网络地址以数字形式展示
-nn :不进行端口名称的转换
-i :后面跟端口,针对该端口进行抓包
-w :后面跟文件名,将抓取的数据包保存至某个文件(一般保存为.pcap/.cap文件格式)
-v :展示数据包详细详细
-vv :展示数据包更详细的信息
-e :展示数据链路层信息,主要是mac地址
-c :要抓取的数据包数量
-C :在将一个原始包写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。
-r :从指定的文件中读取包(这些包一般通过-w生成)
-t :不在每一行中输出时间戳。
tcpdump使用实例
(1) 截获主机收到和发出的所有数据包
命令:tcpdump
tcpdump工具截取包默认显示数据包的头部。
普通情况下,直接启动tcpdump工具将监视第一个网络接口上所有流过的数据包。
基础格式:时间 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息
按下Ctrl+C会终止tcpdump命令。且会在结尾处生成统计信息。
(2)指定抓包数量:-c参数后跟抓包数量
命令:tcpdump -c 2 指定抓取2个数据包
(3) 将抓包信息写入文件:-w参数后跟文件路径
命令:tcpdump -c 10 -w tcpdump_test.log 抓10个包并写入tcpdump_test.log文件中。
(4)读取记录文件:-r参数后面跟抓包文件名
命令:tcpdump -r tcpdump_test.log
(5)打印出所有可工作的接口:-D参数
命令:tcpdump -D
(6) 指定监控的网卡:-i参数
命令:tcpdump -i ens192 -c 10 抓取ens192经过的10个数据包
(7)显示更详细的数据包信息:-v或-vv参数
命令:tcpdump -i ens192 -c 10 -vv
(8)不使用域名反解:-n参数
使用-n参数后,tcpdump工具会直接显示IP地址,不会显示域名(与netstat命令相似)
命令:tcpdump -i ens192 -c 10 -n
(9)增加抓包时间戳:-tttt参数
tcpdump工具的所有输出打印行中都会默认包含时间戳信息; 时间戳信息的显示格式如下:
hh:mm:ss.frac (nt: 小时:分钟:秒.)
此时间戳的精度与内核时间精度一致, 反映的是内核第一次看到对应数据包的时间;而数据包从物理线路传递到内核的时间, 以及内核花费在此包上的中断处理时间都没有算进来;
命令:tcpdump -i ens192 -c 10 -n -tttt
(10)显示MAC地址:-e参数
命令:tcpdump -i ens192 -c 10 -n -tttt -e
tcpdump条件过滤
(1)过滤:指定需要抓取的协议
tcpdump可以只抓某种协议的包,支持指定以下协议:ip、ip6、arp、tcp、udp、wlan等。
命令: tcpdump -i ens192 -c 10 -vv -n -tttt -e icmp
tcpdump udp/icmp/tcp/arp
(2)过滤:指定协议的端口
使用port参数,用于指定端口号
命令: tcpdump -i ens192 -c 10 -vv tcp port 80
使用portrange参数,用于指定端口范围
命令: tcpdump -i ens192 -c 10 -vv tcp portrange 1-1024
(3)过滤:指定源与目标
src 表示源:src port;src host
dst 表示目标:dst port;dst host
指定源IP端口
命令:tcpdump src port 8080
指定目标IP端口
命令:tcpdump dst port 80
指定源IP地址
命令:tcpdump src host 172.16.1.166
指定目标IP地址
命令:tcpdump dst host 172.16.1.166
(4)过滤:指定特定主机的消息包
使用host指定需要监听的主机
命令: tcpdump host 192.168.99.11
(5)过滤:指定数据包大小
使用greater(大于)与less(小于)可以指定数据包大小的范围。
例1:只抓取大于1000字节的数据包。
命令:tcpdump greater 1000
例2:只抓取小于10字节的数据包。
命令:tcpdump less 10
(6)过滤:指定网段进行抓包
例:抓取源IP从192.168.0.0/24网段来的,访问本机80端口的数据包。
命令:tcpdump -i eth0 port 80 and src net 192.168.0.0/24
(7)过滤:根据mac地址进行抓包
src 00:0c:29:ae:89:5d :是指源mac地址为00:0c:29:ae:89:5d
ether:指icmp协议中没有源ip和目的ip,所以需要依赖于ether 协议。
命令:tcpdump -i eth0 ether src 00:0c:29:ae:89:5d
tcpdump逻辑表达式
(1)逻辑与
逻辑与关系,使用and。
命令:
tcpdump tcp and host 192.168.1.112
tcpdump tcp and src 192.168.1.112 and port 8080
(2)逻辑或
逻辑或关系,使用or。
命令:tcpdump host 192.168.1.112 or 192.168.1.113
(3)逻辑非
逻辑非关系,使用not,也可以使用 ! 。
注意:若使用 ! 必须与其后面的字符隔开一个空格。
例:当通过ssh协议远程使用tcpdump时,为了避免ssh的数据包的输出,所以一般需要禁止ssh数据包的输出。
命令:
#tcpdump not tcp port 22
#tcpdump ! tcp port 22
(4)括号
括号需要使用在引号内,或转意使用。否则会报错。
例:抓取非22端口,且主机为192.168.1.112 和 192.168.1.113的TCP数据包。
命令:
#tcpdump not tcp port 22 and host 192.168.1.112or192.168.1.113#tcpdump "not tcp port 22 and host (192.168.1.112 or 192.168.1.113)"
#tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)"