linux下的抓包工具tcpdump

来源:互联网 发布:喇叭战法主图公式源码 编辑:程序博客网 时间:2024/06/03 02:57

1、tcpdump抓包工具介绍

Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。
tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的 FreeBSD系统中,由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
基本上tcpdump的总的输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数

tcpdump windows、linux版本均有tcpdump工具。

linux版本可以在以下网站下载:www.tcpdump.org.

2、tcpdump命令使用

(1)获取网络适配器列表

tcpdump -D 获取网络适配器列表,以下是在windows上获取到的结果:

1.\Device\PssdkLoopback (PSSDK Loopback Ethernet Emulation Adapter)
2.\Device\{CF587901-C85F-4FD6-896F-D977DEFE76EC} (Intel(R) PRO/100 VE Network Co
nnection) 

(2)监控网络适配器

tcpdump -i <需要监控的网络适配器编号>,例如我想监控lo(127.0.0.1),即上面列表中的1.\Device\PssdkLoopback: (windows上特有的,linux不适用)

tcpdump -i 1
 如果不使用-i来定义监控适配器的话,默认使用列表中的第一个;

(3)监控主机的端口和协议数据包

监控主机为192.9.200.59上8000端口的tcp协议:

 tcpdump host 192.9.200.59 and tcp port 8000

(4)监控数据包的内容

如果想要显示数据包的内容,需要使用-X参数,如我想要显示捕获的http数据包http header的内容:

tcpdump -X host 192.9.200.59 and tcp port 8000
显示结果如下:
22:13:19.717472 IP testhost59.12535 > liujuan59.8000: . 1:330(329) ack 1 win 3278
0x0000: 4500 0171 e616 0000 8006 cb2b 0000 0000 E..q.......+....
0x0010: c009 c83b 30f7 1f40 0000 0002 0000 0002 ...;0..@........
0x0020: 5010 8000 b066 0000 504f 5354 202f 2048 P....f..POST./.H
0x0030: 5454 502f 312e 310d 0a43 6f6e 7465 6e74 TTP/1.1..Content
0x0040: 2d54 7970 653a 2074 6578 742f 786d 6c3b -Type:.text/xml;
0x0050: 2063 .c
可以看到该结果只显示了http头的一部分,没有显示全,是因为tcpdump默认将显示的数据长度截断了,可以使用-s后面加数据长度,来设置数据显示长度:
tcpdump -X -s 0 host 192.9.200.59 and tcp port 8000
以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。

(5)记录数据内容到文件

捕获的数据太多,不断刷屏,可能需要将数据内容记录到文件里,需要使用-w参数:

tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000
则将之前显示在屏幕中的内容,写入tcpdump可执行文件同级目录下的aaa文件中。
文件查看方式如下,需要使用-r参数:
tcpdump -X -s 0 -r aaa host 192.9.200.59 and tcp port 8000
如果这样写:
tcpdump -r aaa
则只能看到最简单的数据传输交互过程,看不到数据包内容,查看时也需要使用相应的参数。

(6)tcpdump参数

tcpdump的参数分两个部分,选项(Options)和表达式(expression):
tcpdump[-adeflnNOpqRStuvxX] [-ccount]
[-Cfile_size] [-Ffile]
[-iinterface] [-mmodule] [-rfile]
[-ssnaplen] [-Ttype] [-wfile]

[-Ealgo:secret] [expression]

(7)长期捕抓报文

tcpdump -i eth1 -s 0 -w k.cap &
最后增加&是为了使此命令在后台长期执行,否则关闭ssh client之后
tcpdump命令就会自行停止。  www.2cto.com  
之后重新登录linux,执行下面操作-bash-3.00# ps -ef|grep tcpdump
pcap      3660     1  0 10:48 ?        00:00:00 tcpdump -i eth1 -s 0 -w k.cap
root      3721  3680  0 10:48 pts/1    00:00:00 grep tcpdump
-bash-3.00# kill 3660
-bash-3.00# ls -l
-rw-r--r--  1 root root 33714 Mar 29 10:49 k.cap
将此报文下载到本地即可进行分析。补充说明:-s 0表示捕获报文的大小不做限制。
使用此命令必须注意硬盘剩余空间(df -h),以免文件过大影响系统的正常使用。

原创粉丝点击