---
title: "Wi-Fi、蓝牙与 DNS | Kilobat 文档"
url: "https://kilobat.app/zh-hans/docs/wifi-dns"
description: "Wi-Fi 登录页面、蓝牙音频爆音，以及每个网络最快的 DNS。"
---

# Wi-Fi、蓝牙与 DNS

Wi-Fi 登录页面、蓝牙音频爆音，以及每个网络最快的 DNS。

## 蓝牙音频：AirPods 为什么有杂音

AirPods 或其他蓝牙耳机、音箱播放时，Kilobat 每五秒检查一次 Mac 这一侧有哪些因素可能导致杂音或断音。蓝牙在 2.4 GHz 频段内跳频，并与 Wi-Fi 共用无线电，因此它会查看：Mac 的 Wi-Fi 是否使用 2.4 GHz；该信道是否被邻居的网络挤满（依据最近半小时内的 Wi-Fi 扫描；收听时 Kilobat 从不扫描，因为扫描本身就可能让音频跳音）；隔空投送链路（AWDL）是否繁忙，以及是隔空投送、通用控制还是随航让它保持繁忙；Wi-Fi 上是否有 2.5 MB/s 或以上的流量，以及流量最大的 App；耳机的蓝牙信号是否在 −72 dBm 或更弱；以及是否另有四台或以上蓝牙设备已连接。它通过 Core Audio 读取 macOS 的声音输出，无需任何权限，并会留意耳机麦克风是否也已打开：此时 macOS 会改用音质较低的免提模式，更容易断续。信号和其他设备需要蓝牙权限，只有在你按下“检查蓝牙”时才会请求。

有干扰时，“健康”会显示一行该改什么，效果最好的排在前面：加入路由器的 5 GHz 网络（如果 macOS 记得范围内的某个网络，会提供按钮，名称与 2.4 GHz 网络相同时也一样）、把路由器设为信道 1、6 和 11 中最空闲的一个、暂停隔空投送（提供按钮；macOS 会要求输入你的密码，声音停止五分钟后或一小时后隔空投送会恢复）、暂停大型下载，以及靠近一些或别把 Mac 放在包里。通话时它还会建议使用 Mac 自己的麦克风，这样耳机能保持高音质。Kilobat 听不到声音本身：蓝牙音频断续时，macOS 不会告知其他 App，所以建议来自当前条件，并会如实说明。在这一行或“健康”的“附近”面板中按下*有杂音*即可告诉 Kilobat；它会记下当时的干扰因素，如果当时没有干扰，就会告诉你更可能的原因是距离或耳机自身的连接。每次收听最多通知一次，仅在两个或以上原因同时持续 20 秒时发出，且每四小时最多一次；可在“设置 › 监控”中关闭。以上全部免费。使用 Pro 时，如果你在 Wi-Fi 使用 2.4 GHz 或隔空投送正在扫描时通过蓝牙耳机收听通话，这次通话的成绩单上会多一行说明。在终端中，`kilobat bluetooth audio` 会运行相同的检查（App 运行时还会加入信号和流量最大的 App），智能体则可通过 `get_bluetooth_audio` 读取。

## Wi-Fi 链路协商结果

“健康 › 本地链路”在链路速度旁显示 Mac 与路由器协商的结果：信道、频段和信道宽度、Wi-Fi 标准（Wi-Fi 4、5、6、6E 或 7，以及其 802.11 名称）、安全性（例如 WPA2 个人级或 WPA3 个人级）以及 Mac 的发射功率。旧标准或 5 GHz 上的 20 MHz 信道会限制链路速度，无论信号多强。

在开放网络（没有密码，Wi-Fi 自身也没有加密；使用 HTTPS 的网站和应用仍然加密）以及已过时且会降低 Wi-Fi 速度的 WEP 或初代 WPA 网络上，安全性会以红色显示并附带说明。增强型开放网络无需密码也可加密。雷达中的附近网络显示各自提供的最强安全性。在终端中，`kilobat wifi status` 输出相同信息；CoreWLAN 提供时，`--json` 增加 `widthMHz`、`standard`、`phyMode`、`security`、`securityLevel`（强、良好、弱或开放）、`securityNote`、`transmitPowerDBm` 和 `countryCode`（MCP：`get_wifi`）。`kilobat scan --json` 和 `scan_wifi` 增加每个网络的 `security` 和 `securityLevel`。

## Wi-Fi 登录页面

酒店、咖啡馆、机场和联合办公空间的 Wi-Fi 常常会拦住所有连接，直到你在它自己的页面上登录，过一小时或一天后又会让你退出登录。Kilobat 用与 macOS 和 Android 相同的方式检查这个页面：向 `captive.apple.com` 发送一个普通的 http 请求，它会回答“Success”；如果失败，再请求 Google 的 `connectivitycheck.gstatic.com/generate_204`。如果收到重定向或任何其他页面，就说明有登录页面挡在中间，Kilobat 会记下该页面的地址，无论网络是通过重定向、meta refresh 还是脚本发送的。它会在你加入网络时、互联网检查失败时以及登录页面出现期间检查，其余时间每 5 到 15 分钟检查一次，从不密集轮询。除了这两个地址，不会向任何地方发送任何内容。

它能区分三种情况：完全没有互联网、网络要求你登录，以及网络让你退出了登录（你曾在该网络上登录，而同一个登录页面又出现了）。菜单栏弹出窗口会为此显示一行：“这个 Wi-Fi 需要你登录”和**打开登录页面**，或“Wi-Fi 登录页面已让你退出登录”和**重新登录**。如果你在“这个地方”卡片上为地点命名，这一行会使用该名称，例如“The Long Table 的 Wi-Fi 已让你退出登录”。标题栏仍显示“需要登录”，Wi-Fi 菜单显示“已退出登录 · 请重新登录”。Kilobat 从不自行打开浏览器，也不会干预加入网络时 macOS 显示的登录窗口。它是为那个窗口没有出现的时候准备的，也供之后使用。

当登录页面挡在中间时，“健康”只给出这一个原因：“Wi-Fi 登录页面已让你退出登录”并提供“重新登录”，或“需要登录网络”并提供“打开登录页面”，不再归咎于 DNS、ping 丢包或运营商。事件日志会记录为 Wi-Fi 登录而不是断网，因此它不会在给运营商的报告中算作断网，也不会触发“连接不可达”提醒。卡顿过的通话会说明它是在 Wi-Fi 登录页面让你退出登录后卡顿的。到互联网的卡顿测试会说是登录页面拦住了连接，而不是没有任何回应。“为什么连不上？”和 `kilobat why` 会说是 Wi-Fi 登录页面挡在中间，而不是报告 DNS 或 TLS 错误。

Kilobat 还会了解每个网络上一次登录能持续多久。它会记下登录何时开始、检查结果何时从登录页面变为 Success，以及登录页面何时再次出现。通常时长是它从头到尾不间断看到的会话时长的中位数，至少需要两次。如果登录页面本身明确写出唯一的时长，例如“1 hour of free Wi-Fi”（仅限英文页面），一次会话就够了。因睡眠、离开网络或重新连接而中断的会话不计入，并且每次会话都以最后一次成功的检查为终点，所以估计值宁短勿长。历史记录按网络保存，连同“这个地方”的名称，存放在这台 Mac 的 `~/Library/Application Support/Kilobat/captive-portals.json` 中，从不发送到任何地方。

有了 Kilobat Pro，这一行会显示“已登录 · 剩余约 40 分钟”，并在登录通常到期前约五分钟发出通知：“Café Wi-Fi 将在 5 分钟后让你退出登录”（对于你命名过的地点，则是“The Long Table 的 Wi-Fi 将在 5 分钟后让你退出登录”），并提供“打开登录页面”。如果它仍在中途让你退出登录，“Café Wi-Fi 已让你退出登录”会告诉你互联网并没有断开，并提供“重新登录”。每次登录只提醒一次，这类通知每 20 分钟最多一条；加入网络时不会通知，因为 macOS 会显示自己的窗口。可在“设置 › 监控 › Wi-Fi 登录到期前提醒”中关闭。

发现登录页面、这一行、“打开登录页面”以及“健康”中的退出登录原因都是免费的；“健康”的完整发现列表仍属于 Pro。登录时长会为所有人记录，剩余时间和提醒属于 Kilobat Pro。在终端中，`kilobat portal` 会立即检查并输出状态（open、portal 或 offline）、隐去查询参数值的登录页面地址、这个网络的状态、它通常的登录时长，以及每个网络的历史记录：名称、“这个地方”的名称、登录页面的主机、看到的会话、通常时长和最后一次看到的时间。`kilobat portal open` 会在浏览器中打开登录页面。智能体通过 `get_captive_portal` 读取相同的 JSON。如果登录页面一直不出现，请参阅[酒店 Wi-Fi 登录页面](https://kilobat.app/hotel-wifi-login-mac)。

## 这里可以投屏或打印吗？

加入网络几秒后，以及在“健康”中点击**再次检查**时，Kilobat 会通过 Bonjour 查找三秒，寻找可投屏或打印的设备：Chromecast 和内置 Chromecast 的电视（`_googlecast._tcp`）、Apple TV、隔空播放电视和扬声器（`_airplay._tcp`、`_raop._tcp`）及打印机（`_ipp._tcp`、`_ipps._tcp`、`_printer._tcp`），排除此 Mac 自身的隔空播放接收器。设备响应时，“健康”的“投屏与打印”面板和 Wi-Fi 菜单会显示“投屏与打印应该可以使用：已找到客厅电视、HP LaserJet”。

没有设备响应时，Kilobat 会检查其他设备是否响应：向 Mac 周围 /24 中的每个私有地址发送一个空数据包，查看邻居缓存，向最多六个邻居发送一次 ping，并检查连续互通记录。如果地址以路由器硬件地址响应（代理 ARP），它会说明网络可能隔离设备。代理 ARP 也支持普通路由，因此这是可能的原因，绝不能证明投屏或打印被阻止。空扫描、大子网或登录页面本身都不能证明隔离。否则会显示“未发现投屏设备”，并说明哪些设备有响应以及哪些仍不确定。酒店或咖啡馆 Wi-Fi 上，结论也会显示在登录行旁。`--quick` 重新浏览 Bonjour 并读取缓存，不扫描或 ping 其他设备。Bonjour 和设备探测仅在本地网络进行；应用无法响应时，独立 CLI 还会运行常规互联网可达性和登录页面检查，以识别设备设置 Wi-Fi。macOS 首次会要求本地网络访问权限。

Mac 加入设备自身且没有互联网的 Wi-Fi 时，例如打印机的 Wi-Fi Direct（`DIRECT-xx-HP …`、`HP-Setup…`、Brother 的 `…_BRxxxx`、Canon 的 `…series`）、Sony 或 Canon 相机、GoPro（`GP` 加八位数字）、Insta360 或 Ricoh Theta（`….OSC`）、DJI Tello 或 Spark，或 Shelly、Tasmota、Kasa、Tapo、WiZ 设置网络，Kilobat 会提示“你连接的是打印机自身的 Wi-Fi；按设计，这里没有互联网。”弹出窗口标题显示“设备 Wi-Fi”，不会出现连接无法访问的警报，事件日志会记录“设备 Wi-Fi”而非断网；**返回**使用 macOS 保存的密码重新加入之前的 Wi-Fi。名称来自制造商手册；名称匹配但能够访问互联网的网络会被视为普通 Wi-Fi。

Mac 使用隔空播放时（声音输出为隔空播放接收器，或 macOS 的隔空播放发送器在本地网络串流），或 Chromium 浏览器发送足够多的本地流量、表明可能正在投屏时，“健康”会显示 Mac 端可能导致卡顿的因素：Mac 使用 2.4 GHz、信号弱（−70 dBm 或更弱）、隔空投送扫描（隔空播放自身使用隔空投送连接时除外），以及另一个应用以 2.5 MB/s 传输或以 1.25 MB/s 上传。按钮可加入记住的 5 GHz 网络、暂停隔空投送直到投屏结束或一小时后恢复；使用 Kilobat Pro 时还可像通话模式一样暂停同步和下载应用。Kilobat 无法看到丢帧或电视自身的信号，并会说明这一点。在终端中使用 `kilobat local check [--quick] [--json]`；智能体使用 MCP 工具 `check_local_network`。

## 停留在较远的 Mesh 节点

Mac 要等到 Wi-Fi 接入点的信号降至约 -75 dBm，且另一个接入点强 12 dB 时才会切换。因此在 Mesh 系统中，它常常一直连接楼下加入的节点，而房间里的节点闲置：这就是常见的“楼上 Wi-Fi 很慢”。Kilobat 会发现这一点，并在“健康”中提示：“当前连接客厅节点，信号为 -78 dBm；办公室节点为 -52 dBm。”旁边和 Wi-Fi 菜单中的“重新连接”会让 Mac 切换：它先用网络保存的密码直接加入较近的节点；如果失败，则关闭再开启 Wi-Fi，让 macOS 自行选择最强节点。Wi-Fi 会断开几秒，因此通话期间 Kilobat 会先询问。之后它会说明 Mac 最终连接的位置：“现在连接办公室节点，信号为 -52 dBm。”

只有同时满足以下条件时才会提示：你的信号弱于 -65 dBm；同一网络的另一个节点在 Mac 支持的频段上至少强 15 dB；该节点估计的链路速率至少为当前的 1.5 倍，估算依据为信号和信道宽度。最后一条规则避免频段引导产生多余提示：强 2.4 GHz 信号不一定优于良好的 5 GHz 连接。上述情况必须持续两分钟、至少经过三次读取，且自身信号稳定，因此在家中走动或正在漫游时不会计入。Kilobat 通过常规后台检查读取无线电，仅在信号较弱时扫描你的网络，最多每两分钟一次，通话期间绝不扫描。无线电按地址分组为节点；在“健康 › Wi-Fi 节点”中可为每个节点命名，例如“办公室”，检查结果会使用这些名称。通话在较远节点上卡住时，通话报告会注明节点（Pro）。开启“设置 › 监控 › Mac 一直连接较远的 Wi-Fi 节点时通知我”后，持续五分钟会收到一次通知，每六小时最多一次。两周内发生三次时，Kilobat 会建议检查 Mesh 系统的引导或漫游设置，或移动节点以减少覆盖重叠。

macOS 只向拥有定位权限的应用显示接入点地址，因此此功能需要该权限；位置信息保留在 Mac 上。除非 Wi-Fi 设置 › 高级要求输入管理员密码，否则加入网络和关闭再开启 Wi-Fi 都不需要密码。在终端中，`kilobat wifi nodes` 列出节点，`kilobat wifi nodes name <id> Office` 为节点命名，`kilobat wifi reconnect` 切换 Mac 的节点（CLI 0.31）；智能体读取 `get_wifi_nodes`，调用 `reconnect_wifi` 前会询问。

## 每个网络最快的 DNS

在家最快的 DNS，在咖啡馆往往不是最快的。Kilobat 会逐个网络悄悄找出答案，使用 Kilobat Pro 时还会在加入网络时切换过去。“健康 › DNS”会显示结果：“此处最快：Quad9（12 ms，网络自身的 DNS 为 48 ms）”或“此处网络自身的 DNS 最快”，并列出最近一次测量中的每个解析器。

**比较什么。**网络自身的 DNS（即路由器或运营商分配的那个），与 Cloudflare（1.1.1.1）、Quad9（9.9.9.9）、Google（8.8.8.8），以及你在“设置 › 网络 › 要测试的解析器”中按 IP 地址添加的任何解析器进行比较。在那里排除某个解析器后，Kilobat 永远不会测量或选择它。每个解析器都附有一行说明，介绍它会保留哪些数据：例如 Google 会保留你的 IP 地址最长 48 小时。更快的解析器并不意味着更注重隐私。

**运营方及所在地。**每个解析器都根据运营方自身的页面显示运营方和适用法律所在国：Cloudflare · 美国、Quad9 · 瑞士、Google · 美国；你添加的地址还包括 AdGuard · 塞浦路斯、OpenDNS（Cisco）· 美国和 DNS4EU · 捷克。网络自身的 DNS 显示为“运营商的”，Kilobat 不认识的地址显示为“运营方未知”：绝不会根据地址猜测。

**各解析器的表现。**在最近一次运行下方，“健康 › DNS”显示各解析器在此网络上过去 14 天的情况，每天一个方块：查询得到响应的比例，并标记部分失败或响应缓慢（超过 200 ms）的日期。数据来自相同的后台静默测试，因此没有额外开销。

**如何测量。**每个网络每天最多三次，间隔至少四小时，并且在 Mac 自身流量较少时进行，Kilobat 会直接向每个解析器查询十个热门网站，每个查询两次：第一次应答是你近期没打开过的网站需要等待的时间，第二次则是解析器自身的往返时间。它还会查询一个不可能存在的名称，以发现仍然作出应答的解析器（NXDOMAIN 改写，通常是为了显示广告），并查询三个由 CDN 提供服务的网站，然后测量到各解析器给出的地址的 TCP 连接，与到网络自身的 DNS 给出的地址进行比较。如果某个解析器把你引向明显更远的 CDN 节点，会被罚以额外连接时间的三倍，因为每个连接都要在握手、TLS 和第一个请求中付出这段时间：查询快却让浏览变慢的解析器不会胜出。一次测量约为每个解析器二十几次小型查询和几次连接，只有几 KB。它从不在按流量计费的网络或手机热点上、通过 VPN、在 Wi-Fi 登录页面之后或在低电量模式下运行。*立即测试*可马上运行一次。

**何时选择。**只有当某个解析器在至少三个不同日子的最近几次测量中，中位数都比网络自身的 DNS 快至少 20 ms，且第 90 百分位数更低时才会选择。在此之前，仍使用网络自身的 DNS。一旦选中，只要它仍有任何领先就会保留；当它有三天没有领先时，会让位给网络自身的 DNS，查询失败时则立即让位。领先 20 ms 才切换，降到 0 才退出，因此不会来回切换。

**切换。**在“健康 › DNS”中开启*使用此网络上最快的 DNS*，或在“设置 › 网络”中对所有网络开启。Kilobat 通过辅助程序设置网络服务的 DNS；该辅助程序也用于合盖时保持 Mac 运行，因此无需每次输入密码，只需在登录项中允许一次。当 VPN 已连接、配置描述文件或应用的加密 DNS 决定查询，或 Wi-Fi 登录页面等待登录时，Kilobat 绝不会切换，因为登录页面需要网络自身的 DNS。你自行设置的 DNS 服务器绝不会被更改。Kilobat 只会撤销自己的更改，并会在 VPN 连接、离开网络、Kilobat 退出，以及网络本身有响应但查询连续失败两次时撤销（该解析器随后在此网络上等待一天）。在“健康 › DNS”或“设置 › 网络 › 备用 DNS”的*如果失败，使用*下选择备用解析器后，当前解析器失败时会立即切换到它，但仅当备用解析器当时有响应；如果备用解析器也失败，网络自身的 DNS 会恢复，确保 Mac 不会没有可用 DNS。每次切换都记录在“历史记录”中，并在 Wi-Fi 菜单显示“DNS：Cloudflare（此处最快）”及*撤销*；撤销会恢复网络 DNS 并关闭此网络上的切换。

测量和结果免费；自动切换属于 Kilobat Pro。在终端中，`kilobat dns fastest` 显示此网络的结果（`--all` 查看所有网络，`--json` 供脚本使用），`kilobat dns auto on|off [--network <name>]` 开启或关闭切换，`kilobat dns exclude|include <resolver>` 排除或自行添加解析器，`kilobat dns fallback <resolver>|off` 设置备用解析器。输出显示各解析器的运营方和所在地，以及过去 14 天的查询响应情况。智能体通过 `get_fastest_dns` 读取；`set_fastest_dns` 和 `set_dns_fallback` 会先询问你。
