tcpdump高级示例
使用下三种组合方式,可以添加多个条件,使tcpdump可以过滤需要的流量
逻辑与 : and 或者 &&
逻辑或者 : or 或者 ||
取反 : not 或者 !
以下是组合命令的一些示例。
1. 来自特定 IP 且目的地为特定端口
让我们找到从 10.5.2.3 到端口 3389 上任何主机的所有流量。
# tcpdump -nnvvS src 10.5.2.3 and dst port 3389
2. 从一个网络到另一个网络
让我们查找所有来自 192.168.x.x 并流向 10.x 或者 172.16.x.x 网络的流量,我们将显示没有主机名解析和一级另外详细信息的十六进制输出。
# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
3. 非 ICMP 流量进入特定 IP
这将向我们显示所有流向 192.168.0.2 的非 ICMP 流量。
# tcpdump dst 192.168.0.2 and src net and not icmp
4. 来自不在特定端口上的主机的流量
这将向我们显示来自主机的所有不是 SSH 流量的流量(假设使用默认端口)。
# tcpdump -vv src mars and not dst port 22
什么是 tcpdump
tcpdump 是功能最强大且使用最广泛的命令行数据包嗅探器或者包分析器工具,用于捕获或者过滤通过网络在特定接口上接收或者传输的 TCP/IP 数据包。
它在大多数基于 Linux/Unix 的操作系统下可用。
tcpdump 还为我们提供了将捕获的数据包保存在文件中以供将来分析的选项。
它以 pcap 格式保存文件,可以通过 tcpdump 命令或者基于开源 GUI 的工具 Wireshark(网络协议分析器)查看该文件,该工具读取 tcpdump pcap 格式文件。
tcpdump 最常见的用途之一是确定我们是否正在获得基本的双向通信。
缺乏沟通可能是由于以下原因:
- 路由错误
- 数据包流中设备的接口、电缆故障
- 由于软件未安装或者启动,服务器未侦听端口
- 数据包路径中的网络设备正在阻塞流量;常见的罪魁祸首是防火墙、带有访问控制列表的路由器,甚至是运行 iptables 的 Linux 机器。
tcpdump基本示例
1. 基本通讯
通过查看所有接口,看看发生了什么。
# tcpdump -i any
2. 特定接口
查看特定接口上发生的事情。
# tcpdump -i eth0
3. 原始输出视图
详细输出,不解析主机名或者端口号、绝对序列号和人类可读的时间戳。
# tcpdump -ttttnnvvS
4. 通过 IP 查找流量
最常见的查询之一,这将显示来自 1.2.3.4 的流量,无论是源还是目的地。
# tcpdump host 1.2.3.4
5. 使用十六进制输出查看更多数据包
当我们想查看有问题的数据包的内容时,十六进制输出很有用,并且通常最好在我们隔离几个候选对象以进行仔细审查时使用。
# tcpdump -nnvXSs 0 -c1 icmp
6. 按来源和目的地过滤
使用 src 和 dst 根据源或者目标隔离流量非常容易。
# tcpdump src 2.3.4.5 # tcpdump dst 3.4.5.6
7. 通过网络查找数据包
要查找进出特定网络的数据包,请使用 net 选项。
我们也可以将其与 src 或者 dst 选项结合使用。
# tcpdump net 1.2.3.0/24
8. 显示与特定端口相关的流量
我们可以使用端口选项后跟端口号来查找特定端口流量。
# tcpdump port 3389 # tcpdump src port 1025
9. 显示一个协议的流量
如果我们正在寻找一种特定类型的流量,我们也可以使用 tcp、udp、icmp 和许多其他流量。
# tcpdump icmp
10. 只显示 IP6 流量
我们还可以使用协议选项查找所有 IP6 流量。
# tcpdump ip6
11. 使用端口范围查找流量
我们还可以使用一系列端口来查找流量。
# tcpdump portrange 21-23
12. 根据数据包大小查找流量
如果我们正在寻找特定大小的数据包,我们可以使用这些选项。
我们可以使用我们期望从数学中得到的更少、更大或者它们相关的符号。
# tcpdump less 32 # tcpdump greater 64 # tcpdump <= 12
13. 将捕获写入文件
将数据包捕获保存到文件中以供将来分析通常很有用。
这些文件被称为 PCAP (PEE-cap) 文件,它们可以被数百个不同的应用程序处理,包括网络分析器、入侵检测系统,当然还有 tcpdump 本身。
在这里,我们使用 -w 开关写入名为 capture_file 的文件。
# tcpdump port 80 -w capture_file
14. 阅读 PCAP 文件
我们可以使用 -r 开关读取 PCAP 文件。
请注意,我们可以在读取文件时使用 tcpdump 中的所有常规命令;我们只能受到以下事实的限制:我们无法捕获和处理文件中不存在的内容。
# tcpdump -r capture_file
如何在 Linux 中安装 tcpdump
许多 Linux 发行版已经附带了 tcpdump 工具,如果系统上没有它,我们可以使用以下用于 RedHat Based linux 的 Yum 命令安装它。
# yum install tcpdump
在系统上安装 tcpdump 工具后,我们可以继续浏览以下命令及其示例。
tcpdump 语法
以下是配置 tcpdump 时可以使用的几个选项。
它们很容易忘记和/或者与其他类型的过滤器(例如 Wireshark)混淆,因此希望此页面可以作为参考,就像我一样。
以下是我喜欢记住的主要内容,具体取决于我在看什么。
# tcpdump --help tcpdump version 4.1-PRE-CVS_2016_11_02 libpcap version 1.4.0 Usage: tcpdump [-aAdDefhIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ] [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ] [ -i interface ] [ -j tstamptype ] [ -M secret ] [ -Q|-P in|out|inout ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z command ] [ -Z user ] [ expression ]
选项:
-i any :监听所有接口,看看你是否看到任何流量。
-i eth0 :监听 eth0 接口。
-D : 显示可用接口列表
-n :不解析主机名。
-nn :不解析主机名或者端口名。
-q :输出不那么冗长(更安静)。
-t :提供人类可读的时间戳输出。
-tttt :提供最大程度的人类可读时间戳输出。
-X : 以十六进制和 ASCII 显示数据包的内容。
-XX :与 -X 相同,但也显示以太网标头。
-v, -vv, -vvv :增加返回的数据包信息量。
-c : 只获取 x 个数据包然后停止。
-s :以字节为单位定义捕获的快照长度(大小)。
使用 -s0 获取所有内容,除非我们有意减少捕获量。
-S :打印绝对序列号。
-e :也获取以太网标头。
-q :显示较少的协议信息。
-E :通过提供加密密钥来解密 IPSEC 流量。
为什么使用 TCPDUMP?
tcpdump 是面向信息安全专业人员的首要网络分析工具。
任何想要彻底了解 TCP/IP 的人都必须牢牢掌握这个超级强大的应用程序。
许多人更喜欢使用更高级别的分析工具,例如 Wireshark,但我认为这通常是一个错误。
当使用以更自然(原始)方式显示网络流量的工具时,分析的负担直接由人而不是应用程序承担。
这种方法培养了对 TCP/IP 套件的持续和提升的理解,因此,我强烈建议尽可能使用 tcpdump 而不是其他工具。
表达式
在 tcpdump 中,表达式允许我们修剪各种类型的流量并准确找到我们要查找的内容。
掌握表达式并学习创造性地组合它们是使 tcpdump 真正强大的原因。
表达式主要分为三种类型: type 、 dir 和 proto 。
- 类型选项是:主机、网络和端口。
- Direction 允许我们执行 src、dst 及其组合。
- Proto(col) 允许我们指定:tcp、udp、icmp、ah 等等。