掌握Tcpdump

为了更好的分析网络,常见客户机的Windows操作系统可以安装Wireshark等抓包软件抓取数据流进行分析。那么服务器常用的Linux等系统如何抓取接口报文分析网络呢?

一、Tcpdump简介 

Tcpdump是一个强大的网络数据包捕获工具,其名称来源于其两个主要功能:“tcp”代表传输控制协议,位于传输层;“dump”则意为导出。它使用libpcap库来捕获数据包,可以对网络上传输的数据包进行嗅探,并保存成文件,也可对嗅探到的数据包进行过滤、统计和分析。

Tcpdump适用于大多数的类Unix系统 操作系统:包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在这些系统中,Tcpdump 需要使用libpcap这个捕捉数据的库。其在Windows下的版本称为WinDump;它需要WinPcap驱动,相当于在Linux平台下的libpcap。

二、Tcpdump安装介绍  

在Linux操作系统中安装tcpdump,你可以通过以下步骤进行:

  1. 打开终端:在Linux系统中,你可以通过点击终端图标或使用快捷键(通常是Ctrl+Alt+T)来打开终端。

  2. 使用包管理器安装tcpdump:根据你的Linux发行版,选择对应的包管理器来安装tcpdump。以下是一些常见的发行版和对应的包管理器:

    Ubuntu/Debian:使用apt-get命令安装。在终端中输入以下命令并按回车键:

sudo apt-get update
sudo apt-get install tcpdump

         CentOS/Fedora:使用yum命令安装。在终端中输入以下命令并按回车键:


sudo yum update
sudo yum install tcpdump

        Arch Linux:使用pacman命令安装。在终端中输入以下命令并按回车键:


sudo pacman -Sy tcpdump

        请注意,安装过程中可能需要输入管理员密码进行确认。

  1. 等待安装完成:安装过程可能需要一些时间,系统会自动下载并安装tcpdump及其依赖包。

  2. 验证安装:安装完成后,你可以通过在终端中输入以下命令来验证安装是否成功:


tcpdump --version

如果输出tcpdump的版本信息,则说明安装成功。

这样,你就成功在Linux操作系统中安装了tcpdump。接下来,你可以使用tcpdump命令来捕获和分析网络数据包了。记得在使用tcpdump时,可能需要使用sudo或以root用户身份运行,以便获取足够的权限来捕获数据包。

三、Tcpdump基本用法

通过命令:tcpdump -help,可查看tcpdump工具命令选项:

Tcpdump的基本命令格式是:  tcpdump [选项] [表达式] 

-a:将网络地址和广播地址转变成名字
-A:以ASCII码格式打印出所有数据包,并将链路层的头部最小化
-B:用于设置操作系统捕捉缓冲大小
-c:指定抓取数据包的数量
-C:此选项用于配合-w选项使用,如果保存文件大小超过阈值则关闭当前文件,并启用新文件继续保存数据(分多个固定大小的文件保存抓包数据,利于长期抓包的场景)
-d  将匹配到的数据包以人们能够理解的汇编格式输出
-dd:以C语言的形式打印出包匹配码.
-ddd:以十进制数的形式打印出包匹配码
-D:打印系统中所有支持抓包的网络接口
-e:在输出行打印出数据链路层的头部信息
-E:解密IPsec ESP分组。具体来说,它使用spi@ipaddr algo:secret的格式来解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。这样,tcpdump可以捕获并显示经过IPsec加密的数据包内容,帮助用户更好地分析和理解网络流量
-f :将外部的因特网地址以数字的形式打印出来
-F:使用file文件作为过滤条件表达式的输入
-i:指定监听网络接口
-l:对标准输出进行行缓冲
-L:列出指定网络接口所支持的数据链路层的类型后退出
-m:通过module 指定的file 装载SMI MIB 模块
-n:不把网络地址转换成名称,即直接显示IP地址而不是主机名
-N:不打印出host 的域名部分
-nn:不进行端口名称的转换
-O:不启用进行包匹配时所用的优化代码
-p:不让网络接口进入混杂模式
-q:快速简短打印输出
-R:设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825而不是RFC1829
-r:从文件file 中读取包数据
-s:数据包抓取长度,如果不设置默认将会是68字节
-S:打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号
-t:在每行输出中不打印时间戳
-tt:不对每行输出的时间进行格式处理
-ttt:tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)
-tttt:在每行打印的时间戳之前添加日期的打印
-u:打印出未加密的NFS句柄
-U:使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步
-v:分析和打印产生详细的输出
-vv:产生比-v更详细的输出
-vvv:产生比-vv更详细的输出
-w:把包数据直接写入文件而不进行分析和打印输出
-W:设置输出文件的最大数目
-x:以十六进制的形式打印每个数据包的头部数据,但是不包括数据链路层的头部
-xx:以十六进制的形式打印每个数据包的头部数据,并且包括数据链路层的头部
-X:以ASCII码格式显示输出,但是不包括数据链路层的头部
-XX:以ASCII码格式显示输出,并且包括数据链路层的头部
-y:只捕获数据链路层协议类型是datalinktype的数据包

  四、Tcpdump常见捕获方式  

【默认启动】

tcpdump监视系统第一个网络接口上所有流过的数据包。


tcpdump

【抓取网卡eth0】

抓取网卡eth0上所有报文


tcpdump -i eth0

【抓取指定MAC】

抓取ath10接口上包含MAC地址为11:22:33:44:55:66的数据包,并保存为ath10.pcap于当前路径下:


tcpdump –i ath10 –w ath10.pcap ether host 11:22:33:44:55:66

抓取ath10接口上源MAC地址为11:22:33:44:55:66的数据包,并保存为ath10.pcap于当前路径下:


tcpdump –i ath10 –w ath10.pcap ether src 11:22:33:44:55:66

抓取ath10接口上目的MAC地址为11:22:33:44:55:66的数据包,并保存为ath10.pcap于当前路径下:

tcpdump –i ath10 –w ath10.pcap ether dst 11:22:33:44:55:66

【抓取指定的主机】

抓取eth0网卡上IP为192.168.168.2的所有报文:


tcpdump -i eth0 -nn 'host 192.168.1.2'

抓取eth0网卡上源IP为192.168.168.2的所有报文:


tcpdump -i eth0 -nn 'src host 192.168.1.2'

抓取eth0网卡上目的IP为192.168.168.2的所有报文:

tcpdump -i eth0 -nn 'dst host 192.168.1.2'

【抓取指定端口】

抓取eth0网卡上端口号为80的所有报文


tcpdump -i eth0 -nnA 'port 80'

【抓取指定主机和端口】

抓取eth0网卡上IP为192.168.1.2且端口号为80的所有报文


tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.2'

【抓取除某个端口外的其它端口】

排除某个端口或者主机可以使用“!”符号,上例表示监听非22端口的数据包。

tcpdump -i eth0 -nnA '!port 22'

【协议过滤】

可过滤ip6、arp、icmp、tcp、udp、igmp等协议


tcpdump –i ath10 –w ath10.pcap tcp and ether host 88:bf:e4:fc:26:19

该命令可以抓取ath10接口上包含MAC地址为88:bf:e4:fc:26:19的tcp数据包,保存于ath10.pcap文件中。

【组合过滤】

过滤规则可以通过逻辑运算符组合使用,注意协议的预过滤规则要放在第一位。


tcpdump –i eth0 –w eth0.pcap tcp and src ‘(192.168.96.54 or 192.168.96.7)’

该命令可以抓取eth0接口上源地址为192.168.96.54及192.168.96.7的tcp数据包,保存于eth0.pcap文件中。注:小括号 () 需与转义符 ’ 搭配使用。

五、 注意事项:

  1. tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

  2. 使用tcpdump可能会遇到我们ctrl+c或者ctrl+z结束了抓包,但是tcpdump应用没有完全关闭的情况,此时会导致系统内存被占用较高导致出现异常。可使用ps | grep tcpdump过滤看是否有残留进程,若有则使用killall tcpdump命令将进程全部杀掉

  3. 使用tcpdump抓的pcap文件需要及时清除,避免文件一直放着占用内存。在tcpdump抓包的目录输入命令ls –la | grep pcap可过滤出所有的pcap文件并看到其占用的内存大小。输入 rm xxx.pcap可删除相关文件(xxx.pcap中的xxx为抓包文件的命名)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值