tcpdump:运行在命令行下的嗅探工具

来源:互联网 发布:中行中银淘宝信用卡 编辑:程序博客网 时间:2024/06/06 00:23

这里写图片描述


简介

tcpdump 是一个运行在命令行下的嗅探工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包,即tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。tcpdump 是一个在BSD许可证下发布的自由软件。

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


用途

tcpdump能够分析网络行为,性能和应用产生或接收网络流量。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息,从而使用户能够进一步找出问题的根源。

也可以使用 tcpdump 的实现特定目的,例如在路由器和网关之间拦截并显示其他用户或计算机通信。通过 tcpdump 分析非加密的流量,如Telnet或HTTP的数据包,查看登录的用户名、密码、网址、正在浏览的网站内容,或任何其他信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

有很多用户喜欢使用柏克莱数据包过滤器来限制 tcpdump 产生的数据包数量,这样BPF会只把“感兴趣”的数据包到上层软件,可以避免从操作系统 内核向用户态复制其他数据包,降低抓包的CPU的负担以及所需的缓冲区空间,从而减少丢包率。


简单参考手册

tcpdump采用命令行方式,它的命令格式是:

tcpdump [-n] [-i 端口] [-w 存储文件名] [-c 抓包数量] [-Aa] [-qX] [-r读取文件] [想要捕获的数据内容(数据包)]

1.参数介绍

1.1 不转换主机名、端口号等

# tcpdump -n

tcpdump 默认输出主机名词,-n 选项是输出 IP 地址。

1.2 输出详细信息

# tcpdump -vor# tcpdump -vvor# tcpdump -vvv

tcpdump 的详细信息有三个等级,你可以通过在命令行增加 v 标记的个数来获取更多的信息。

1.3 指定网络接口

# tcpdump -n -i eth1or# tcpdump -n -i any

any 表示任意端口,不加-i选项的话,默认从第一个网络设备号抓取信息。

1.4 写入文件

# tcpdump -w /path/to/file

写出的是 tcpdump 固有的格式,需要用 tcpdump 命令查看该文件。

1.5 读取文件

# tcpdump  -r /path/to/file

1.6 指定抓包大小

# tcpdump  -s 100

1.7 指定抓包数量

# tcpdump  -c 10

不加 -c 选项的话,会默认一直抓包。

1.8 汇总命令

#  tcpdump  -nvvv -i any -c 100 -s 100

从任意网络接口抓取100个包的前100个字节。

2.过滤器

tcpdump 可以通过各式各样的表达式,来过滤所截取或者输出的数据。

2.1 查找特定主机的流量

#  tcpdump  -nvvv -i any -c 3 host 10.0.3.1

2.2 只显示源地址为特定主机的流量

#  tcpdump  -nvvv -i any -c 3 src host 10.0.3.1

2.3 过滤源和目的端口

#  tcpdump  -nvvv -i any -c 3 port 22 and port 60738

2.4 查找两个端口号的流量

#  tcpdump  -nvvv -i any -c 20 'port 80 or port 443'

2.5 查找两个特定端口和来自特定主机的数据流

#  tcpdump  -nvvv -i any -c 20 '(port 80 or port 443) and host 10.0.3.169'

3.理解输出结果

3.1 判断数据包类型

10.0.3.246.56894 > 192.168.0.92.22: Flags [S], cksum 0xcf28 (incorrect -> 0x0388), seq 682725222, win 29200, options [mss 1460,sackOK,TS val 619989005 ecr 0,nop,wscale 7], length 0

从上面的例子,我们可以判断这个数据包是一个 SYN 数据包。
Flags 类型介绍:

[S] – SYN (开始连接)
[.] – 没有标记
[P] – PSH (数据推送)
[F] – FIN (结束连接)
[R] – RST (重启连接)
[S.] - SYN-ACK 数据包

4.数据包检查

4.1 用十六进制和 ASCII 码打印数据包

#  tcpdump  -nvvv -i any -c 1 -XX 'port 80 and host 10.0.3.1'

排查应用程序网络问题的通常做法,就是用 tcpdump 的 -XX 标记打印出 16 进制和 ASCII 码格式的数据包。

4.2 只打印 ASCII 码格式的数据包

#  tcpdump  -nvvv -i any -c 1 -A 'port 80 and host 10.0.3.1'

你可以通过 -A 标记来打印 ASCII 码格式的数据包。

5.抓取非 TCP 数据流

tcpdump 不是只能抓 TCP 数据包。它还可以用来获取其他类型的数据包,例如 ICMP、 UDP 和 ARP 包。

5.1 ICMP 数据包

# tcpdump -nvvv -i any -c 2 icmp

5.2 UDP 数据包

# tcpdump -nvvv -i any -c 2 udp

6.举例

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

抓取回环网口的包:tcpdump -i lo

6.2 监视指定主机的数据包

截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname

截获主机192.168.0.112 和主机192.168.0.113或192.168.0.114的通信
tcpdump host 192.168.0.112 and \ (192.168.0.113 or 192.168.0.114 )

如果想要获取主机192.168.0.112除了和主机192.168.0.113之外所有主机通信的ip包,使用命令:
tcpdump ip host 192.168.0.112 and ! 192.168.0.113


借鉴URL:

tcpdump官方网站:http://www.tcpdump.org/

http://hao.jobbole.com/tcpdump/

http://blog.csdn.net/cjfeii/article/details/48577149

0 0
原创粉丝点击