前端必会计算机基础之TCP抓包的工具tcpdump的安装和使用

931 阅读5分钟

前言

tcpdump是一个最基本重要的网络分析工具, 掌握好这个工具, 对于学习tcp/ip协议也是很有帮助的. 理解了tcp/ip协议栈的知识, 分析调优网络的能力才会更高. 所以使用tcpdump相比其它的工具, 更能帮我们理解协议.

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获 下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

了解如何使用Tcpdump来捕获感兴趣的数据包是一项必须掌控的基本功。

tcpdump 安装

可到“www.tcpdump.org”下载最新的Tcpdump源码包。

注意⚠️:

tcpdump的运行需要pcap的支持,所以最好先行安装pcap软件包,另外还要注意软件的版本问题,建议按照网站上匹配的软件包tcpdumppcap一同下载。

我们以最新版本tcpdump-4.9.2,libpcap-1.9.0为例:

在编译Tcpdump之前,应先确定pcap库(libpcap)已安装完毕。这个库是编译Tcpdump时所必需的。

安装过程非常简单:

tar -zxvf libpcap-1.9.0.tar.gz 

 cd libpcap-1.9.0

./configure

make 

make install

该库已安装完毕,下面执行下面的命令来编译并安装Tcpdump:

tar -zxvf tcpdump-4.9.2.tar.gz 

cd tcpdump-4.9.2

 ./configure

make

make install

Tcpdump的命令行选项

Tcpdump是个命令行方式的网络嗅探器。他通过使用命令选项来过滤网卡截获的数据包,假如不进行过滤,过多数量的包会使网络管理员很难理清头绪。Tcpdump的命令格式如下:

tcpdump [ -adeflnNOpqRStuvxX ] [ -c 数量 ] [ -C 文档尺寸 ] [ -F 文档名 ] [ -i 网络接口 ] [ -m 文档名 ] [ -r 文档名 ] [ -s 长度 ] [ -T 类型 ] [ -w 文档名 ] [ -E algo:secret ] [ 表达式 ]

表1 Tcpdump常用命令行选项

命令行 描述
-a 将网络地址和广播地址转变成容易识别的名字
-d 将已截获的数据包的代码以人容易理解的格式输出;
-dd 将已截获的数据包的代码以C程式的格式输出;
-ddd 将已截获的数据包的代码以十进制格式输出;
-e 输出数据链路层的头部信息;
-f 将internet地址以数字形式输出;
-l 将标准输出变为行缓冲方式;
-n 不将网络地址转换成易识别的主机名,只以数字形式列出主机地址(如IP地址),这样能够避免DNS查询;
-t 不输出时间戳;
-v 输出较周详的信息,例如IP包中的TTL和服务类型信息;
-vv 输出详尽的报文信息;
-c 在捕获指定个数的数据包后退出;
-F 从指定的文档中读取过滤规则,忽略命令行中指定的其他过滤规则;
-i 指定监听的网络接口;
-r 从指定的文档中读取数据包(该文档一般通过-w选项产生);
-w 将截获的数据包直接写入指定的文档中,不对其进行分析和输出;
-T 将截获的数据包直接解释为指定类型的报文,现在支持的类型有cnfp、rpc、rtp、snmp、vat和wb。

表1给出了一些常用的Tcpdump命令行选项,使用这些选项能够过滤出真正感兴趣的数据包。

默认启动

sudo tcpdump

普通情况下,直接启动 tcpdump将监视第一个网络接口上所有流过的数据包。

监视指定网络接口的数据包

查看网卡名称:

tcpdump -i lo0 

指定ip

例如截获所有192.168.131.131 的主机收到的和发出的所有的数据包

tcpdump host 192.168.131.131 -i lo0 (必须加上网卡名称)

抓取数据,保存为pcap文件(可用wireshark软件打开)

tcpdump tcp -i lo0  -t -s 0 -c 100  -w /tmp/target.pcap

监听指定的主机

tcpdump -i eth0 -nn 'host 192.168.168.2'

这样的话,192.168.168.2这台主机接收到的包和发送的包都会被抓取.

tcpdump -i eth0 -nn 'src host 192.168.168.2'

这样只有192.168.168.2这台主机发送的包才会被抓取。

tcpdump -i eth0 -nn 'dst host 192.168.168.2'

这样只有192.168.168.2这台主机接收到的包才会被抓取。

监听指定端口

tcpdump -i eth0 -nnA 'port 80'

上例是用来监听主机的80端口收到和发送的所有数据包,结合-A参数,在web开发中,真是非常有用。

监听指定主机和端口

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

多个条件可以用and,or连接。上例表示监听192.168.168.2主机通过80端口发送的数据包。

抓取特定目标ip和端口的包

tcpdump host 192.168.168.2 and tcp port 8000

使用tcpdump抓取HTTP包

tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

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

Wireshark

下载地址:www.wireshark.org/download/

使用

使用方法:jingyan.baidu.com/article/156…

打开我们之前保存的文件。

一些常用的使用方法:常用语法规则

参考: 各种工具使用手册

linux抓包工具tcpdump

使用wireshark常用的过滤命令

Wireshark数据抓包教程之认识捕获分析数据包

Wireshark抓包工具使用以及数据包分析

然后我们就可以愉快的抓包了。