# Mac 上的网络监控：看清你的应用发出的每一个连接

> “活动监视器”、lsof 和 nettop 真正显示了什么、止步于何处，按应用防火墙补上了什么，如何解读一个连接，以及哪些模式——定期回连、Tor 出口、明文 HTTP——值得看一眼。

HisnLabs Security & Research Team · Published 2026-08-28
Canonical: https://hisnlabs.com/zh/blog/network-monitoring-mac-track-connections

你的 Mac 此刻正在说话。不是比喻：就在这一刻，有几十个进程对着你从未听说过的服务器保持着打开的套接字，而其中大部分没有问题。更新检查、同步、推送通知、遥测、正在获取的一个字体。网络监控的意义不在于为流量的数量而恐慌，而在于能够就其中的任何一行回答一个问题：哪个应用，连到谁，为什么。macOS 给了你三个免费工具，能带你走完一部分路。本文解释每一个工具显示了什么、止步于何处，以及按应用防火墙在其上补上了什么。

## 活动监视器：总量，而不是目的地

打开“活动监视器”，点击“网络”标签，你会得到 Apple 为它设计的那份诚实的概览。Apple 的指南描述了底部面板：传入和传出的数据包、以兆字节计的已接收和已发送数据，以及一张可以在数据包吞吐量和数据吞吐量之间切换的图表。上方的进程列表告诉你每个进程发送和接收了多少。它不告诉你的是：发到了哪里。没有远程主机这一列，没有端口，没有国家。“活动监视器”回答的是“有什么东西正在占用大量带宽吗？”，然后就到此为止。发现某个辅助进程一夜之间上传了两千兆字节，它是正确的工具；想弄清上传给了谁，它就是错误的工具。

## lsof：每一个打开的套接字的快照

命令行工具 lsof 列出打开的文件，而在 Unix 上，一个网络套接字就是一个文件。加上 -i 选项——macOS 的手册页把它描述为选出互联网地址匹配的文件——你就能得到每一个打开的连接，连同拥有它的进程名、进程 ID、协议，以及本地和远程的地址与端口。加上 -n 和 -P，可以让地址和端口保持数字形式，而不必等待反向 DNS。结果是你能免费得到的关于当前这一刻最完整的画面，重点在于“这一刻”：lsof 是一张快照。一个在你按下回车之前的半秒内打开、发送了一千字节然后关闭的连接，根本就不在那里。它还是按名称和 PID 来识别进程，而不是按签名者，所以临时文件夹里一个叫“Adobe Update Helper”的二进制文件看起来和真的一模一样。

## nettop：同样的视图，实时更新

nettop 是 macOS 自带的最接近实时连接监视器的东西。它的手册页把它描述为显示一个带有定期更新的网络统计信息的套接字或路由列表。在实践中，你会看到每个进程、它打开的连接、每个连接的进出字节数、正在使用的接口和连接状态，每秒刷新一次。它解决了 lsof 的快照问题，依然是对“那个应用现在在做什么”最好的内置答案。它的局限在其他每一方面都和 lsof 一样：除了进程名之外没有身份，没有地址背后的国家或组织的概念，不记得一小时前发生了什么，也没有办法说“不”。你可以用 nettop 观察一个连接；你无法阻止它。

## 内置防火墙在这里帮不上忙

人们常常以为在“系统设置”里开启防火墙就覆盖了这一点。并没有。Apple 自己的指南措辞谨慎：macOS 防火墙保护你的 Mac 免受其他电脑发起的不必要联系。它是一个入站过滤器。对于你的应用向外发送了什么，它无话可说，而本文中的每一个问题指向的都是那个方向。对于出站的、按应用的控制，Apple 提供了 Network Extension 框架，它的内容过滤器提供者让第三方应用能够看到并过滤网络流，并附带发起该流的应用的身份。这是 macOS 上现代按应用防火墙赖以构建的基础，也是把一份套接字列表变成一份决策列表的东西。

## 按应用防火墙补上了什么

具体来说是四件事。身份：一个网络流被归属到一个已签名的应用，所以为 Slack 写的规则只适用于 Slack，而不适用于任何恰好与它同名的东西；FireAI 的按应用规则正是因此而跟随应用的代码签名。可见性：每一个连接在发生时都会被显示出来，包括那些只持续半秒的。上下文：裸 IP 地址会被解析为背后的组织和国家，FireAI 把它们显示在一张实时世界地图上，被阻止的连接显示为红色。还有控制：一个连接可以按主机、域名、IP 或端口被允许或拒绝，一个未知应用必须在它的第一次连接之前先询问，而设备端模型对其裁定的理由会显示在提示中。如果你不同意 AI 做出的某个决定，你可以撤销它，而这次撤销会变成一条可见的规则，你可以稍后阅读，或者导出为文本文件。

FireAI 还接受用其 16 种语言中任意一种下达的自然语言指令，比如“block Microsoft Teams”，这比一个有四个字段的对话框更快地写出一条规则。它不做的事同样值得说得一样明白：它不检查加密流量的内容，不扫描文件，也不检查进程或内存。它工作在“谁在连接什么”这个层面，并且对这条边界保持诚实。

## 如何解读一个连接

从 nettop 或防火墙日志中任取一行，问三个问题。第一，公司：谁拥有这个地址？大多数流量都流向少数几家托管服务商和内容网络，一个音乐应用和 Amazon 或 Cloudflare 通信，通常只是在和它自己的后端通信。值得注意的模式是错配：一个笔记应用连接到一个广告网络，或者一个截图工具连接到一家它没有理由使用的托管服务商。第二，国家：不是因为国外的服务器就是坏的，而是因为变化本身就是信息。一个一年来一直连接到爱尔兰的应用，今天第一次连接到一个新的国家，那它就是有什么东西变了。第三，端口。443 是 HTTPS，几乎涵盖一切；80 是明文 HTTP，在 2026 年应该很少见；53 是 DNS；22 是 SSH；445 是 SMB 文件共享；5353 是本地网络上的 Bonjour。一个消费级应用向互联网上的某个地址打开 22 或 445 端口，反常到足以值得问一句。

## 值得再看一眼的模式

- 定期回连（beaconing）：同一个进程以固定间隔——每六十秒或每十分钟——联系同一个地址，载荷极小。MITRE ATT&CK 把命令与控制描述为攻击者试图与被攻陷的系统通信以控制它们，而有规律的心跳是它最常见的形态。更新检查也会定期回连，所以破绽在于一个不熟悉的进程，而不只是节律本身。
- Tor 出口节点：Tor Project 发布其出口节点列表，而一个生产力应用没有任何正常理由去连接其中之一。FireAI 把这份列表作为其威胁情报源之一在本地应用。
- 携带凭据的明文 HTTP：通过 80 端口发送的登录表单、API 密钥或卡号，路径上的任何人都能读到。FireAI 的未加密数据防护正是为这种情形而生，它阻止卡号、密码和 API 密钥通过明文 HTTP 离开。
- 一个装了很久的应用的第一次连接：一个几个月来一直沉默、突然打开一个套接字的应用，要么更新了，要么被替换了，要么被某个插件劫持了。这三种情况都值得知道。
- 未签名或未知的二进制文件居然在联网：在一台你用的所有东西都已签名的 Mac 上，一个未签名的二进制文件发起它的第一次连接，是防火墙能发出的最有用的一条警报。FireAI 更严格的安全模式——Paranoid 和 Under attack——直接阻止未签名的应用。
- 出现在已发布屏蔽列表上的地址：Spamhaus 把它的 DROP 列表描述为危险到它愿意免费提供给任何想要这层保护的人的地址段；FireHOL 汇总并记录专注于攻击和滥用的公开 IP 情报源；abuse.ch 运营社区驱动的威胁情报平台。FireAI 在本地把这些情报源作为系统级 IP 屏蔽列表应用，而不把你的流量发到任何地方。

## DNS 过滤，说实话

DNS 是许多网络过滤产品的所在之处，所以问一问 FireAI 站在哪里是公平的。今天，FireAI 在连接本身上进行过滤：它把威胁情报源和 IP 屏蔽列表应用到你的应用实际连接的地址上，而按应用规则可以匹配主机名或域名。它还不做的是充当你的 DNS 解析器，或者提供自己的加密 DNS；这已在计划之中，我们宁愿直说，也不愿暗示它已经存在。这里有一个需要理解的实际后果。加密 DNS——在 RFC 7858 中规定为 DNS over TLS，在 RFC 8484 中规定为 DNS over HTTPS，并且自 Apple 在 WWDC 2020 关于启用加密 DNS 的演讲以来在 macOS 上得到系统级支持——把你的查询对网络路径上的任何人隐藏起来。这对隐私是好事，同时也意味着一个只监视 DNS 查询的过滤器，在浏览器使用它自己的 DoH 解析器时就会失明。一个作用于目标地址的过滤器则依然能看到连接，因为应用终究还是要打开它。两种方法单独都不完整，所以诚实的立场是“两者都要，最终”，而不是宣称一个可以取代另一个。

## 一套实用的例行做法

你不需要整天盯着网络。一套可行的例行做法是每周一次、三分钟：打开 FireAI 的连接列表，逐个应用地过一遍，看看那些你不认识的。查一查任何新东西背后的公司和国家。为你做出的决定写一条规则，这样你永远不会两次审查同一个连接，并且时不时导出你的规则，好让一台新 Mac 从你的决定开始，而不是从零开始。当你想看原始视图时，免费工具永远在那里；按应用防火墙则是让那个视图变成你可以据以行动的东西。

## FireAI 和 HisnLabs 在其中扮演的角色

lsof and nettop will show you a snapshot; what they cannot do is stop a connection, remember your decision, or tell you in plain words which company and country sit behind an IP address — and that gap is exactly the one FireAI was built to fill.

FireAI 是 HisnLabs 自己的产品：一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接，并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行，因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确：归类哪些域名只是普通的遥测、哪些属于真正的服务，追踪连接背后的国家和网络，并用真实的流量模式训练设备端模型（FireAI Pilot 功能）——这一切都不会离开你的 Mac。

你可以阅读它背后的技术决策，或试用 FireAI 17 天：[HisnLabs 出品的 FireAI](https://hisnlabs.com/fireai/zh/download)。

## Sources

- [Apple Support: View network activity in Activity Monitor on Mac](https://support.apple.com/guide/activity-monitor/view-network-activity-actmntr1006/mac)
- [SS64: lsof man page for macOS](https://ss64.com/mac/lsof.html)
- [nettop(1) man page (Xcode man pages mirror)](https://keith.github.io/xcode-man-pages/nettop.1.html)
- [Apple Support: Block connections to your Mac with a firewall](https://support.apple.com/guide/mac-help/block-connections-to-your-mac-with-a-firewall-mh34041/mac)
- [Apple Developer: Network Extension content filter providers](https://developer.apple.com/documentation/networkextension/content-filter-providers)
- [MITRE ATT&CK TA0011: Command and Control](https://attack.mitre.org/tactics/TA0011/)
- [Tor Project: bulk exit node list](https://check.torproject.org/torbulkexitlist)
- [Spamhaus: Do Not Route Or Peer (DROP) list](https://www.spamhaus.org/blocklists/do-not-route-or-peer/)
- [FireHOL IP Lists](https://iplists.firehol.org/)
- [abuse.ch threat intelligence platforms](https://abuse.ch/)
- [RFC 7858: Specification for DNS over Transport Layer Security (TLS)](https://www.rfc-editor.org/rfc/rfc7858)
- [RFC 8484: DNS Queries over HTTPS (DoH)](https://www.rfc-editor.org/rfc/rfc8484)
- [Apple WWDC20: Enable encrypted DNS](https://developer.apple.com/videos/play/wwdc2020/10047/)
