tcpdump抓包那些事

  前言

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)"

 

               

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值