Wireshark 是一种网络流量分析器或“嗅探器”,适用于 Linux、macOS、*BSD 和其他 Unix 和类 Unix 操作系统以及 Windows。它使用 Qt,一个图形用户界面库,以及 libpcap 和 npcap 作为数据包捕获和过滤库。
Wireshark 发行版还附带了 TShark,它是一个面向行的嗅探器(类似于 Sun 的 snoop 或 tcpdump),它使用与 Wireshark 相同的剖析、捕获文件读写和数据包过滤代码,以及 editcap,它是一个读取捕获文件并从该捕获文件写入数据包的程序,可能采用不同的捕获文件格式,并且可能从捕获中删除了一些数据包。
Wireshark 项目定期在以下平台上构建和测试:
Microsoft Windows 和 macOS 提供官方安装包。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
它作为许多流行操作系统和 Linux 发行版的标准或附加包提供,包括 Debian、Ubuntu、Fedora、CentOS、RHEL、Arch、Gentoo、openSUSE、FreeBSD、DragonFly BSD、NetBSD 和 OpenBSD。
此外,它还可以通过许多第三方打包系统获得,例如 pkgsrc、OpenCSW、Homebrew 和 MacPorts。
它应该可以在其他 Unix-ish 系统上运行而不会遇到太多麻烦。
在某些情况下,当前版本的 Wireshark 可能不支持您的操作系统。Windows XP 就是这种情况,它受 Wireshark 1.10 及更早版本的支持。在其他情况下,Wireshark 的标准包可能只是旧的。Solaris 和 HP-UX 就是这种情况。
构建 Wireshark 需要 Python 3。需要 AsciiDoctor 来构建文档,包括手册页。生成一些源代码需要 Perl 和 flex。
因此,您必须在缺少它们的系统上安装 Python 3、AsciiDoctor 和 GNU“flex”(普通的“lex”不起作用)。您可能还需要安装 Perl。
完整的安装说明可以在 INSTALL 文件和开发人员指南中找到,网址为https://www.wireshark.org/docs/wsdg_html_chunked/
另请参阅相应的自述文件。操作系统特定安装说明的操作系统文件。
为了从网络中捕获数据包,您需要使 dumpcap 程序将 UID 设置为 root,或者如果/dev
您的系统(BSD 派生系统,以及诸如 Solaris 和支持 DLPI 的 HP-UX 通常属于此类)。尽管将 Wireshark 和 TShark 可执行文件设为 root 或以 root 身份运行它们可能很诱人,但请不要这样做。捕获进程已经隔离在dumpcap中;这个简单的程序不太可能包含安全漏洞,因此以 root 身份运行更安全。
有关每个命令行选项和界面功能的说明,请参阅手册页。
Wireshark 可以从多种不同的文件类型中读取数据包。有关支持的文件格式列表,请参阅 Wireshark 手册页或 Wireshark 用户指南。
如果在编译 Wireshark 时所需的压缩库可用,Wireshark 可以透明地读取任何这些文件的压缩版本。目前支持的压缩格式有:
您可以通过运行禁用 zlib 支持cmake -DENABLE_ZLIB=OFF
。
虽然 Wireshark 可以读取 AIX iptrace 文件,但关于 AIX 的 iptrace packet-trace 命令的文档很少。该iptrace
命令启动一个守护进程,您必须终止该守护进程才能停止跟踪。通过实验,似乎向该 iptrace 守护程序发送 HUP 信号会导致正常关闭,并将完整的数据包写入跟踪文件。如果最后保存了部分数据包,Wireshark 会在读取该文件时报错,但您将能够读取所有其他数据包。如果发生这种情况,请通过wireshark-dev@wireshark.org告知 Wireshark 开发人员;如果该跟踪文件很小且包含非敏感数据,请务必向我们发送该跟踪文件的副本。
对 Lucent/Ascend 产品的支持仅限于 MAX 和 Pipline 系列产品生成的调试跟踪输出。wandsession
Wireshark 可以读取、wandisplay
、wannext
和命令的输出wdd
。
Wireshark 还可以从 ISDN 路由器(TR-600 和 TR-650)的 Toshiba“Compact Router”系列读取转储跟踪输出。您可以远程登录到路由器并使用 启动转储会话snoop dump
。
余弦 L2 调试输出也可以由 Wireshark 读取。要获得 L2 调试输出,首先进入 diags 模式,然后使用 layer-2 类别下的create-pkt-log-profile
命令apply-pkt-lozg-profile
。layer-2 create ?
有关如何使用这些命令的更多详细信息,您应该通过或查看帮助命令layer-2 apply ?
。
要将 Lucent/Ascend、Toshiba 和 CoSine 跟踪与 Wireshark 一起使用,您必须将跟踪输出捕获到磁盘上的文件中。跟踪发生在路由器内部,路由器无法为您将跟踪保存到文件中。在 Unix 下执行此操作的一种简单方法是运行telnet <ascend> | tee <outfile>
. 或者,如果您的系统安装了“script”命令,您可以将 shell 会话(包括 telnet)保存到一个文件中。例如记录到名为 tracefile.out 的文件:
$ script tracefile.out
Script started on <date/time>
$ telnet router
..... do your trace, then exit from the router's telnet session.
$ exit
Script done on <date/time>
Wireshark 在解码 IPv4 和 IPv6 数据包时将尝试使用反向名称解析功能。
如果要在使用 Wireshark 时关闭名称解析,请启动 Wireshark 并选择-n
关闭所有名称解析(包括将 MAC 地址和 TCP/UDP/SMTP 端口号解析为名称)或-N mt
关闭名称解析的选项所有网络层地址(IPv4、IPv6、IPX)。
您可以通过使用“编辑”菜单中的“首选项”项打开“首选项”对话框,选择“名称解析”,关闭相应的名称解析选项,然后单击“确定”来将其设置为默认设置。
Wireshark 可以对 SNMP 数据包进行一些基本的解码;它还可以使用 libsmi 库通过读取 MIB 文件并使用这些文件中的信息以更友好的方式显示 OID 和变量绑定值来进行更复杂的解码。CMake 将自动确定您的系统上是否有 libsmi 库。如果您有 libsmi 库但不希望 Wireshark 使用它,您可以使用该-DENABLE_SMI=OFF
选项运行 cmake。
Wireshark 正在不断开发中,因此您在使用它时可能会遇到错误。请在https://gitlab.com/wireshark/wireshark/-/issues报告错误。确保你进入了错误:
帮助菜单中“关于 Wireshark”项的完整构建信息或wireshark -v
Wireshark 错误的输出和 TShark 错误的输出tshark -v
;
如果错误发生在 Linux 上,请提供您使用的 Linux 发行版以及该发行版的版本;
您用于调用 Wireshark 的命令(如果您从命令行运行 Wireshark)或 TShark(如果您运行 TShark),以及您执行的导致错误出现的操作序列。
如果错误是由特定的跟踪文件产生的,请务必将跟踪文件与错误描述一起附加到错误。如果跟踪文件包含敏感信息(例如密码),请不要发送。
如果 Wireshark 因“分段违规”、“总线错误”、“中止”或其他生成 UNIX 核心转储文件的错误而死于您,如果您安装了调试器,则可以为开发人员提供很多帮助。可以通过使用调试器(本例中为“gdb”)、wireshark 二进制文件和生成的核心文件来获取堆栈跟踪。下面是如何使用 gdb 命令“backtrace”执行此操作的示例。
$ gdb wireshark core
(gdb) backtrace
..... prints the stack trace
(gdb) quit
$
[/hidecontent]