# 在控制台上进行网络监控

* 原文链接：[Network Monitoring on the Console](https://freebsdfoundation.org/wp-content/uploads/2021/01/Practical-Ports.pdf)
* 作者：**BENEDICT REUSCHLING**

我最近在我们的大数据集群上做了很多网络布线工作。检查链路并确保 RX 和 TX 指示灯在闪烁只是其中的一个方面。待链路建立并记录好了，电缆整齐地放进机架，IP 地址分配完成等等，就该检查机器是否允许数据包朝正确的方向流动了。有很多工具可以帮助你完成这项工作。我通常会松一口气，因为基本的网络诊断工具仍然是 FreeBSD 基本系统的一部分。毕竟，如果人们必须先安装一个包才能诊断网络问题，而那时网络本身无法工作，怎么办呢？嘿，谁让小鸡们跑进机房了？看，地上全是蛋！

尽管如此，FreeBSD 包含了 ping(8)（最近的版本支持同时进行 IPv4 和 IPv6 检测 \[<https://reviews.freebsd.org/rS368045]），用于基本的> ICMP 检测。如果你确实已经建立了链路并希望查看一些网络活动，systat(1) 提供了一些用于 TCP、UDP 和接口统计监控的工具。当然，你也可以变得非常花哨，借助 www/grafana 让它在你的 4k 显示器上绘制出最漂亮的图表，只需要一点点努力。对此我没有任何异议，只是我们中的许多人更喜欢介于 ping 和一个完整的浏览器应用程序之间的东西。多亏了 ncurses 和相关的工具，我们不必放弃“图形化”界面，因为我们选择留在终端中（也就是那个黑白文本的用户界面）。

让我们用一些条形图来增强 ping 输出，以便检查长期趋势。来自一款名为 liboping（octo 的 ping）C 库的 noping 工具（net/liboping）可以做到这一点。安装后，你可以 ping 一个目标 IP，屏幕上会滚动显示你熟悉的数据包和序列号。不过，在屏幕底部，你会看到随时间推移的趋势，显示任何数据包丢失的情况。当然，当我尝试为你生成截图时，竟然没有一个数据包丢失。所以，我建议你访问 \[<https://noping.cc/>] 查看示例。

那么，如何为我们中的人类定制一个 TCP 工具呢？你一定会觉得 net/bmon 很有吸引力。我忍不住附上了 bmon 在我一台（并不太忙的）机器上输出的图像。作为带宽监控器和速率估算器——正如描述所说——它确实产生了一个不错的输出，适合在你办公室那台看起来让你显得很忙的计算机屏幕上使用。我预计将在未来的某部以计算机为主题的大片中看到条形图的 ASCII 图。

![](https://github.com/user-attachments/assets/61f8a411-bc7a-432a-9815-c42a8d8468da)

顺便提一句，将“zfs list -o space”输出通过管道传递给 misc/nms 会让你有一种 1992 年电影《通天神偷》的感觉。这正是当你看到一个窥探的同事接近并准备偷看你的屏幕时，应该做的事情。通过按下一个按钮将屏幕输出解密，给那个人留下深刻印象。对其他输出大量文本的命令也可以重复这样做。

如果你更喜欢像 top(1) 那样的显示方式，可以看看 `net-mgmt/tcptrack`。它通过 `/dev/bpf`（是的，只有 root 权限）捕获任何设备通过虚拟网卡连接到你的系统。一旦建立连接，源地址、目的地址、端口、状态信息、带宽使用情况以及数据包的星座（好吧，最后一个有点夸张）都会显示。如果你喜欢这个工具，那么你应该允许 net-mgmt/iftop 占用你系统中的一些存储空间。三列输出会精确告诉你，整天你电脑和谁在通讯。

但是，天哪，究竟是谁占用了那么多带宽？我有几个嫌疑进程，于是让我让 net/nethogs 来分析一下。与许多类似 nettop 的工具不同，它按进程 ID 显示带宽。我一直怀疑以 root 身份运行服务是个坏主意。把你关进 jail(8)，坏进程！

有时候，我会羡慕那些还没有移植到 FreeBSD 的软件。例如，speedometer \[<https://excess.org/speedometer/>] 就是一个很不错的工具。如果在这篇文章发布时，有个忙碌的 Ports 提交者或贡献者已经移植了它，那会让我很开心——我能听到“挑战接受”吗？毕竟，如果没有那些为确保 FreeBSD 拥有一个良好的第三方软件生态系统而努力工作的人，这篇文章可能根本不会存在。而我相信我们有时候会把这一点当作理所当然。所以，向所有 Ports 维护人员表示感谢，感谢你们不懈的努力，保持事物的更新和运行！

下次你安装了一个自己喜欢的工具时，为什么不发个小小的感谢邮件给维护者，给他们的日子带来一些阳光？你可以在 freshports.org 找到他们（非常感谢 Dan Langille 为该网站做出的贡献！）或者在 Port 本身的 Makefile 中找到他们。除非是 <ports@freebsd.org>，这样的 Port 就交给你去爱护它了。当你做到了，你可以教别人（包括我）如何做，因为永远都不可能有足够的 Ports 维护者。查看 FreeBSD 的 Wiki 页面上的 WantedPorts \[<https://wiki.freebsd.org/WantedPorts]，了解更多可能被加入到> Ports 中的 Port。

如果您不介意网络输出中有更多的颜色，可以看看 sysutils/glances。它就像是 sysutils/htop 和 vmstat 之间的一场恋爱，glances 是结果。除了几乎覆盖整个屏幕的 top(1)-like 信息外，里面还有磁盘活动的显示。在众多 top(1) 克隆程序中，只有 FreeBSD 的可以一眼看出我的 ZFS ARC 统计数据，这得益于 Allan Jude 的贡献。即使有其他很多应用程序，我也经常回到它那里。

作为一个话题，类似 top(1) 的 Port 就足以填满一整篇文章。而且它会填满，所以敬请期待未来的专栏。如果您知道一个很棒的工具应该被包含在这里，请通过电子邮件发送给我，邮箱地址是 <bcr@freebsd.org>。

***

**BENEDICT REUSCHLING** 是 FreeBSD 项目的文档提交者，也是文档工程团队的成员。他是 FreeBSD 基金会董事会的副主席。过去，他曾在 FreeBSD 核心团队工作过两个任期。他在德国达姆施塔特应用科技大学管理一个大数据集群，也教授本科生课程“开发者的 Unix”。与 Allan Jude 一起，他是每周 bsdnow\.tv 播客的主持人。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.bsdcn.org/qi-kan/20201112-gong-zuo-liu-chi-xu-ji-cheng-ci/ports.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
