Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。所以,今天我们就来看看Linux中强大的网络数据采集分析工具——TcpDump。用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具.作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。 

下面就介绍一下tcpdump的常用用法。本文的演示中,服务器是在虚拟机中安装的,地址为:192.168.0.72;宿主机地址为:192.168.0.237。在此说明这些是为了便于读者理解演示图片中的信息。
tcpdump的语法:
tcpdump  [选项][协议][流向][主机][逻辑操作符]  
 
一、常用选项
(1)指定监听端口选项:-i
 -i选项可以明确指定要监听的物理网卡。不指定则表示监听所有的网卡。
如:tcpdump -i  eth0
(2)以数字的形式显示主机名选项:-n
  以数字形式显示主机名和端口选项:-nn
如:要抓取进出eth0的数据,并以数字的形式显示主机名和端口。
tcpdump -nn -i eth0
(3)指定要监听的端口选项:port
默认情况下,tcpdump会抓取所有端口的数据。使用port选项便可有目的性的抓包。如图1所示:
tcpdump用法大全_traffic

此外还有一个port的扩展选项portrange,它可以指定端口范围,这样便可以抓取指定范围的数据。
(4)显示详细信息选项:-v,-vv,-vvv      //v越多信息越详细   如下图2所示:
tcpdump用法大全_数据采集_03
 这是加上了一个-v的效果,是不是详细了很多。那就赶紧试试-vvv的效果吧!哈哈

(5)以ASCII的形式解码数据选项:-A
-A选项可以抓取ASCII解码后的数据信息。比如若用户登陆了没有设置安全机制的邮件服务,便可以获取用户的登陆账号和密码。
(6)以十六进制和ASCII的形式解码选项:-X
 此外还有-XX选项,它的用法同-X,但是还能显示帧首部信息。如图3所示:
tcpdump用法大全_tcpdump_04

(7)指定抓取数据包个数选项:-c #
-c选项可以抓取指定数量的数据,之后便自动退出。如图4所示:
tcpdump用法大全_tcpdump_05

(8)指定抓取数据包的长度选项:-s #
此选项我们在前面就已经使用了,它表示抓取数据包的长度。而"-s 0 "则表示抓取数据的全部长度。下图5是以10字节为例:
tcpdump用法大全_traffic_06

(9) 明确说明要抓取帧首部选项:-e 
加上-e后的效果如图6所示:
tcpdump用法大全_traffic_07
由图可知,显示了帧首部信息。可与图1做比较。

(10)可以把抓取的包保存在文件中的选项:-w  /path/
这个选项可以使得符合条件的包保存在指定的文件中。此外还可以使用它的标准输出对输出数据进行过滤。如下图7所示:
tcpdump用法大全_tcpdump_08
借助文本过滤工具使得输出内容只与“USer-Agent”有关。

(11)从文件中读取抓取结果选项:-r
我们可以先使用-w保存数据,然后使用-r读取保存的内容。如下图8所示:
tcpdump用法大全_tcpdump_09

(12)转换易读时间选项:-tttt
使用此选项可明确显示时间。如下图9所示:
tcpdump用法大全_tcpdump_10

(13)静默模式选项:-p
它的作用与-v相反,只显示信息的概略信息。如图10所示:
tcpdump用法大全_数据采集_11
可与显示结果与-v的显示结果做对比。

二、常用协议
基本的网络协议tcpdump都可是使用。没有明确指定时则抓取所有协议的数据。
协议:tcp,udp,ip, fddi, arp, rarp, decnet, lat, sca, moprc, mopdl 
如果想要抓取tcp协议的数据。则效果如下图11所示:
tcpdump用法大全_traffic_12
其他协议用法同上,在此不再做详细演示。

三、数据流向参数和主机参数
众所周之,数据是有流向的。对于某特定主机而言,它可以是数据的接收者,也可以是数据的发送者。因此流向的取值便有:src(源),dst(目的),src  and dst,src or dst。省略时默认情况下为''src or dst''。所以我可以根据数据流向实际情况抓取我们所需要的数据。

在此源或者目的都是相对于某网络、主机或端口而言的,所以提到数据流向我们不得不说说“主机”。主机选项中的取值可以是net, port, host和portrange。但省略的情况下,会默认为host。如"src 10.1.1.1"会默认为 "src host 10.1.1.1"。
数据流向参数和主机参数可以多次使用。
如果我们想抓取从主机192.168.0.237访问本机80端口的数据。则应为如下图12所示:
tcpdump用法大全_数据采集_13

想抓取到主机192.168.0.237的数据。如下图13所示:
tcpdump用法大全_traffic_14

由以上例子可知,此时省略了主机类型时便默认为了host。

四、逻辑操作符
其实上述例子中我们已经使用了逻辑操作符(图12和图13)。这里的逻辑操作符和bash中的使用方法一样。常用的操作符有:与(and,&&),或(or,||) 和非(not,!)。
逻辑操作符的具体使用方法在此就不再赘述了。在具体操作中你就会慢慢的体会到它们的使用了。

至此,tcpdump的常用知识点以做了全面的盘点。当然还有一些不常用的选项在本文中没有涉及到,一些知识也点没有做具体的演示。在此只是想让各位亲自动手操作,因为那样的效果会更加直观、深刻。最重要的是希望本文可以给大家一个启示。这样博主就很满足了。