菜鸟科技网

snoop命令怎么用?能抓哪些包?

snoop 是一个在 Solaris illumos (如 OpenIndiana, SmartOS) 系列操作系统上非常强大的命令行网络数据包嗅探器(或称为“协议分析器”),它的工作原理类似于 Linux 系统上广为人知的 tcpdump,但 snoop 提供了一些自己独特的功能和语法。

snoop命令怎么用?能抓哪些包?-图1
(图片来源网络,侵删)

什么是 snoop

snoop 命令可以捕获通过网络接口进出系统的数据包,它允许你将这些数据包以原始或可读的形式显示在终端上,或者将它们保存到文件中以供后续分析,这对于网络故障排查、性能分析、安全审计和协议学习等任务至关重要。

基本语法

snoop 命令的基本语法如下:

snoop [选项] [捕获表达式]
  • 选项: 用于控制 snoop 的行为,例如输出格式、捕获数量、是否写入文件等。
  • 捕获表达式: 这是一个可选的过滤规则,用于只捕获符合特定条件的数据包,如果省略,snoop 会捕获所有经过网络接口的数据包。

常用选项

以下是一些最常用和重要的 snoop 选项:

选项 描述 示例
-i <文件> 从指定的文件中读取数据包,而不是从网络接口捕获。 snoop -i capture.pcap
-o <文件> 将捕获到的数据包写入到指定的文件中。 snoop -o capture.pcap
-d <设备> 指定要嗅探的网络接口。 snoop -d bge0
-s <snaplen> 设置快照长度(单位:字节),即每个数据包捕获的最大字节数,默认为 96,通常可以增大到 0(捕获完整数据包)或 65535。 snoop -s 0 (捕获完整数据包)
-c <数量> 在捕获指定数量的数据包后退出。 snoop -c 100 (捕获100个包后停止)
-v 显示详细信息(verbose),包括数据包的完整时间戳、IP ID、TTL等。 snoop -v
-x 以十六进制(和ASCII)形式显示数据包的负载内容。 snoop -x
-q 静默模式,只输出数据包的摘要信息,不显示数据包内容。 snoop -q
-n 不将主机名解析为可读名称,直接显示 IP 地址。 snoop -n
-P 在捕获数据包时,将网络接口设置为混杂模式,默认情况下,snoop 不会捕获非发给本机的包,此选项可以改变这一点。 snoop -P

捕获表达式

snoop 的表达式语法非常强大,类似于 tcpdump,你可以通过组合不同的协议、主机、端口和方向来精确地过滤你感兴趣的数据包。

snoop命令怎么用?能抓哪些包?-图2
(图片来源网络,侵删)

基本表达式结构:

[qualifier] primitive [and|or|not [qualifier] primitive ...]

  • 限定词: host, net, port, gateway, ip, tcp, udp, icmp 等。
  • 原语: IP 地址、网络地址、端口号等。
  • 逻辑运算符: and, or, not

常用表达式示例:

命令 描述
snoop host 192.168.1.10 捕获所有与 IP 地址 168.1.10 相关的数据包(无论源或目的)。
snoop src host 192.168.1.10 捕获所有源 IP 地址为 168.1.10 的数据包。
snoop dst port 80 捕获所有目的端口为 80 (HTTP) 的数据包。
snoop host 192.168.1.10 and port 22 捕获来自或发往 168.1.10 并且端口为 22 (SSH) 的数据包。
snoop tcp 捕获所有 TCP 协议的数据包。
snoop icmp 捕获所有 ICMP 协议的数据包(ping 命令使用的包)。
snoop arp 捕获所有 ARP 协议的数据包。
snoop net 192.168.1.0/24 捕获所有在 168.1.0 网络段内的数据包。
snoop 'tcp port 80 and host 10.0.0.1' 使用单引号包裹复杂的表达式,防止 shell 解释。

实用示例

示例 1:捕获所有流量并显示摘要

snoop -q

这会快速地显示每个数据包的摘要信息,如 168.1.10.12345 > 8.8.8.8.5353: ...,非常适合快速浏览流量。

示例 2:捕获所有发往或来自特定主机的 HTTP 流量

snoop host www.example.com and port 80

或者使用 IP 地址:

snoop host 93.184.216.34 and port 80

示例 3:捕获完整的 SSH 会话(包括用户名和密码)

警告: 此命令会捕获敏感信息,请务必在授权和网络允许的情况下使用。

snoop命令怎么用?能抓哪些包?-图3
(图片来源网络,侵删)
snoop -x -s 0 port 22
  • -s 0: 确保捕获完整的数据包,防止数据被截断。
  • -x: 以十六进制和 ASCII 显示数据负载,这样你就能看到明文的 SSH 协议交互内容。

示例 4:将捕获结果保存到文件

snoop -o traffic.pcap host 192.168.1.10

这个命令会将所有与 168.1.10 相关的流量保存到 traffic.pcap 文件中,你可以使用 Wireshark 等图形化工具打开这个文件进行更深入的分析。

示例 5:从保存的文件中读取并分析

snoop -i traffic.pcap -v

这会从 traffic.pcap 文件中读取数据,并以详细模式显示出来。

示例 6:查看 DNS 查询

snoop port 53

DNS 通常使用 UDP 端口 53,但有时也使用 TCP,这个命令会捕获所有 DNS 流量。


tcpdump 的对比

特性 snoop (Solaris/illumos) tcpdump (Linux/BSD/macOS)
操作系统 Solaris, illumos (如 OpenIndiana) Linux, BSD, macOS, Windows (with WinPcap/Npcap)
语法 类似,但有一些细微差别 业界标准,语法非常通用
输出格式 默认格式略有不同 格式更标准化,被广泛接受
功能 功能强大,是 Solaris/illumos 上的首选 功能极其强大,是 Linux 上的首选
读取文件 可以读取 .pcap 文件 可以读取 .pcap 文件
解析主机名 默认会解析,可用 -n 禁用 默认会解析,可用 -n 禁用

snoop 是 Solaris 和 illumos 系统管理员和网络工程师的必备工具,虽然 tcpdump 在 Linux 世界中更为流行,但 snoop 在其原生平台上同样高效且功能强大,掌握 snoop 的基本用法和过滤表达式,将极大地提升你在这些系统上进行网络分析和故障排除的能力。

分享:
扫描分享到社交APP
上一篇
下一篇