<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Networking on NetUtil</title>
    <link>https://www.netutil.app/zh-hans/tags/networking/</link>
    <description>Recent content in Networking on NetUtil</description>
    <generator>Hugo</generator>
    <language>zh-Hans</language>
    <lastBuildDate>Sat, 16 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.netutil.app/zh-hans/tags/networking/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>macOS网络诊断工具：内置了什么，缺少了什么</title>
      <link>https://www.netutil.app/zh-hans/blog/macos-network-diagnostic-tools/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/macos-network-diagnostic-tools/</guid>
      <description>&lt;p&gt;macOS具备真正的网络诊断能力，但找到它们需要一番摸索。现有的工具分散在&amp;quot;系统设置&amp;quot;、终端和隐藏菜单中。那些本可以让所有人轻松使用的工具已经被移除。以下是完整的情况。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;功能&lt;/th&gt;&#xA;          &lt;th&gt;原版 macOS&lt;/th&gt;&#xA;          &lt;th&gt;安装 NetUtil 后&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Wireless Diagnostics&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ping / traceroute / dig（终端）&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;networkQuality&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ping 图形界面&lt;/td&gt;&#xA;          &lt;td&gt;–&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Traceroute 图形界面&lt;/td&gt;&#xA;          &lt;td&gt;–&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;DNS 查询 / Whois 图形界面&lt;/td&gt;&#xA;          &lt;td&gt;–&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;端口扫描图形界面&lt;/td&gt;&#xA;          &lt;td&gt;–&lt;/td&gt;&#xA;          &lt;td&gt;✓&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;原版macOS覆盖了基础功能，但任何超出连接状态的检查都需要进入终端。NetUtil补充了Apple移除的图形界面工具。&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;macos开箱即用的功能&#34;&gt;macOS开箱即用的功能&lt;/h2&gt;&#xA;&lt;h3 id=&#34;无线诊断&#34;&gt;无线诊断&lt;/h3&gt;&#xA;&lt;p&gt;按住Option并点击菜单栏中的Wi-Fi图标，您会看到&amp;quot;打开无线诊断&amp;quot;。大多数Mac用户从未发现这个入口，因为除非您知道这个快捷方式，否则它是不可见的。&lt;/p&gt;&#xA;&lt;p&gt;打开后，功能相当强大。扫描选项卡显示附近所有接入点及其信道、信号强度和噪音级别。性能监视器会随时间绘制吞吐量和信号质量图表。嗅探器可捕获原始数据包以供在Wireshark中分析。&lt;/p&gt;&#xA;&lt;p&gt;对于Wi-Fi问题，无线诊断是正确的工具。信道干扰、信号衰减、竞争的接入点：它能呈现所有这些信息。令人沮丧的只是如何找到它。&lt;/p&gt;&#xA;&lt;h3 id=&#34;终端命令&#34;&gt;终端命令&lt;/h3&gt;&#xA;&lt;p&gt;每台Mac都在终端中内置了一套完整的网络诊断工具。这些是已存在数十年的标准Unix实用工具，不会消失。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ping&lt;/strong&gt;检查主机是否可达：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ping -c &lt;span style=&#34;color:#0550ae&#34;&gt;5&lt;/span&gt; google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;traceroute&lt;/strong&gt;映射您的Mac和目的地之间的路径，显示途中的每一跳：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;traceroute google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;nslookup&lt;/strong&gt;和&lt;strong&gt;dig&lt;/strong&gt;处理DNS查询：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dig google.com MX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;whois&lt;/strong&gt;获取域名注册信息：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;whois google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;netstat&lt;/strong&gt;显示活动的网络连接和监听端口：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netstat -an &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; grep LISTEN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这些工具是有效的。如果您熟悉终端，可以用Mac上已有的工具处理大多数网络诊断。限制在于输出是纯文本，阅读需要实践，而且对于不熟悉命令行的用户来说，这一切都无从访问。&lt;/p&gt;&#xA;&lt;h3 id=&#34;networkquality&#34;&gt;networkQuality&lt;/h3&gt;&#xA;&lt;p&gt;Apple在macOS Monterey中添加了一个名为&lt;code&gt;networkQuality&lt;/code&gt;的命令行工具。它测量上传速度、下载速度以及负载下的响应能力：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac上的nslookup：DNS查询命令及各自的适用场景</title>
      <link>https://www.netutil.app/zh-hans/blog/dns-lookup-mac/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/dns-lookup-mac/</guid>
      <description>&lt;p&gt;您需要检查DNS记录。可能您刚换了托管服务商，想确认域名是否指向了新服务器；可能您的邮件退件了，怀疑是MX记录的问题；或者一个网站加载了错误的内容，您想弄清楚是DNS问题还是其他原因。&lt;/p&gt;&#xA;&lt;p&gt;macOS内置了三个用于DNS查询的终端命令：&lt;code&gt;nslookup&lt;/code&gt;、&lt;code&gt;dig&lt;/code&gt;和&lt;code&gt;host&lt;/code&gt;。它们都查询DNS，但各自以不同的方式呈现结果，适用于不同的场景。&lt;/p&gt;&#xA;&lt;h2 id=&#34;dns查询实际上做了什么&#34;&gt;DNS查询实际上做了什么&lt;/h2&gt;&#xA;&lt;p&gt;当您在浏览器中输入域名时，Mac会询问DNS解析器（通常是您ISP的服务器或公共解析器如1.1.1.1）将该名称转换为IP地址。解析器查找答案，然后您的计算机连接到该IP地址。&lt;/p&gt;&#xA;&lt;p&gt;DNS查询让您可以自己运行这个转换过程并检查结果。您可以看到域名解析到哪个IP地址，哪些邮件服务器处理其邮件，哪些名称服务器对其具有权威性。这涵盖了日常调试的大多数情况。&lt;/p&gt;&#xA;&lt;p&gt;常见的记录类型：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;A&lt;/strong&gt;：IPv4地址（最常查询的类型）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;AAAA&lt;/strong&gt;：IPv6地址&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MX&lt;/strong&gt;：邮件服务器，含优先级&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CNAME&lt;/strong&gt;：指向另一个域名的别名&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TXT&lt;/strong&gt;：文本记录，用于SPF、DKIM、域名验证&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NS&lt;/strong&gt;：对该域名具有权威性的名称服务器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mac上的nslookup熟悉的起点&#34;&gt;Mac上的nslookup：熟悉的起点&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;nslookup&lt;/code&gt;是大多数人首先想到的命令。它存在于每个操作系统上，所以如果您在其他地方做过DNS查询，语法会感觉很熟悉。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基本a记录查询&#34;&gt;基本A记录查询&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出显示回答了查询的DNS服务器以及IP地址。&amp;ldquo;Non-authoritative answer&amp;quot;这一行只是意味着结果来自缓存，而不是域名本身的名称服务器。这是正常的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;查询特定记录类型&#34;&gt;查询特定记录类型&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup -type&lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt;MX google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将&lt;code&gt;MX&lt;/code&gt;替换为任何记录类型：&lt;code&gt;A&lt;/code&gt;、&lt;code&gt;AAAA&lt;/code&gt;、&lt;code&gt;CNAME&lt;/code&gt;、&lt;code&gt;TXT&lt;/code&gt;、&lt;code&gt;NS&lt;/code&gt;、&lt;code&gt;SOA&lt;/code&gt;。例如，检查用于邮件故障排查的SPF和DKIM：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup -type&lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt;TXT google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查询特定dns服务器&#34;&gt;查询特定DNS服务器&lt;/h3&gt;&#xA;&lt;p&gt;这是&lt;code&gt;nslookup&lt;/code&gt;真正有用的地方。不必向默认解析器提问（它可能有缓存的旧数据），您可以直接向特定服务器查询：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup google.com 8.8.8.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nslookup google.com 1.1.1.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查询多个服务器可以让您看到DNS更改是否已经传播。如果8.8.8.8显示您的新IP但1.1.1.1仍显示旧IP，说明传播仍在进行中。&lt;/p&gt;&#xA;&lt;h3 id=&#34;nslookup交互模式&#34;&gt;nslookup交互模式&lt;/h3&gt;&#xA;&lt;p&gt;不带参数输入&lt;code&gt;nslookup&lt;/code&gt;，您会看到一个提示符。从那里您可以运行多个查询，而无需每次都重新输入命令：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; set type=MX&#xA;&amp;gt; google.com&#xA;&amp;gt; set type=A&#xA;&amp;gt; example.com&#xA;&amp;gt; exit&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;nslookup&lt;/code&gt;的主要缺点是其输出将信息性消息和实际结果混合在一起。不同记录类型的格式不一致，使其难以一眼看懂。&lt;/p&gt;&#xA;&lt;h2 id=&#34;digmac上dns查询的强力工具&#34;&gt;dig：Mac上DNS查询的强力工具&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;dig&lt;/code&gt;（Domain Information Groper）是经常进行DNS故障排查的系统管理员和开发者的首选工具。其输出结构化且一致，控制选项比&lt;code&gt;nslookup&lt;/code&gt;丰富得多。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基本查询&#34;&gt;基本查询&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dig google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出默认非常详细：您的问题、答案部分、时间以及响应的服务器。在调试时，这些额外信息很有用，因为您可以看到确切返回了什么以及花了多长时间。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用short获取简洁答案&#34;&gt;使用+short获取简洁答案&lt;/h3&gt;&#xA;&lt;p&gt;当您想要快速得到答案而不需要周围的详细信息时：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dig google.com +short&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这只输出IP地址。适合编写脚本或当您只想知道结果时：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dig google.com MX +short&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;返回带优先级的MX记录，每行一条。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在macOS上刷新DNS缓存（Sequoia、Sonoma、Ventura）</title>
      <link>https://www.netutil.app/zh-hans/blog/flush-dns-cache-mac/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/flush-dns-cache-mac/</guid>
      <description>&lt;p&gt;DNS缓存问题很容易被误诊。您更新了域名记录，等待传播完成，然后打开浏览器，旧网站仍然加载。或者曾经能正常访问的网站突然拒绝连接。服务器没问题，您的网络没问题，问题是您的Mac缓存了一个过时的DNS答案，并且仍然在使用它。&lt;/p&gt;&#xA;&lt;p&gt;刷新DNS缓存会告诉macOS忘记那些存储的答案，重新从头开始查询。只需一条命令，大约五秒钟。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么mac要缓存dns记录&#34;&gt;为什么Mac要缓存DNS记录&lt;/h2&gt;&#xA;&lt;p&gt;每次您访问网站时，Mac都需要将域名（如&lt;code&gt;example.com&lt;/code&gt;）转换为IP地址。这个转换过程是这样的：Mac首先检查本地DNS缓存，然后询问DNS解析器（通常是您ISP的服务器或公共解析器如1.1.1.1），如果两者都没有答案，解析器会联系该域名的权威名称服务器。&lt;/p&gt;&#xA;&lt;figure class=&#34;blog-svg&#34; role=&#34;img&#34; aria-labelledby=&#34;dns-flow-title dns-flow-desc&#34;&gt;&#xA;  &lt;svg viewBox=&#34;0 0 720 180&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;       style=&#34;max-width: 100%; height: auto;&#34;&gt;&#xA;    &lt;title id=&#34;dns-flow-title&#34;&gt;DNS resolution flow on macOS&lt;/title&gt;&#xA;    &lt;desc id=&#34;dns-flow-desc&#34;&gt;A four-step diagram showing DNS resolution: Mac checks local cache, then queries DNS resolver, then resolver contacts authoritative server, then IP address is returned to the Mac.&lt;/desc&gt;&#xA;    &lt;style&gt;&#xA;      .dns-label { font-family: -apple-system, system-ui, sans-serif; font-size: 13px; fill: #1d1d1f; text-anchor: middle; }&#xA;      .dns-sublabel { font-family: -apple-system, system-ui, sans-serif; font-size: 11px; fill: #6e6e73; text-anchor: middle; }&#xA;      .dns-box { fill: #F5F5F7; stroke: #D2D2D7; stroke-width: 1.5; }&#xA;      .dns-box-highlight { fill: #E8F4FF; stroke: #007AFF; stroke-width: 1.5; }&#xA;      .dns-arrow { stroke: #8E8E93; stroke-width: 2; fill: none; marker-end: url(#dns-arrow-head); }&#xA;      .dns-return { stroke: #34C759; stroke-width: 1.5; fill: none; stroke-dasharray: 5,3; marker-end: url(#dns-arrow-green); }&#xA;      @media (prefers-color-scheme: dark) {&#xA;        .dns-label { fill: #F5F5F7; }&#xA;        .dns-sublabel { fill: #98989D; }&#xA;        .dns-box { fill: #2C2C2E; stroke: #48484A; }&#xA;        .dns-box-highlight { fill: #1C3A5E; stroke: #0A84FF; }&#xA;      }&#xA;      @media (prefers-reduced-motion: reduce) {&#xA;        .dns-animated { animation: none !important; }&#xA;      }&#xA;      @keyframes fadeIn {&#xA;        from { opacity: 0; transform: translateY(4px); }&#xA;        to { opacity: 1; transform: translateY(0); }&#xA;      }&#xA;      .dns-step1 { animation: fadeIn 0.4s ease-out 0.1s both; }&#xA;      .dns-step2 { animation: fadeIn 0.4s ease-out 0.5s both; }&#xA;      .dns-step3 { animation: fadeIn 0.4s ease-out 0.9s both; }&#xA;      .dns-step4 { animation: fadeIn 0.4s ease-out 1.3s both; }&#xA;      .dns-return-line { animation: fadeIn 0.4s ease-out 1.7s both; }&#xA;    &lt;/style&gt;&#xA;    &lt;defs&gt;&#xA;      &lt;marker id=&#34;dns-arrow-head&#34; markerWidth=&#34;9&#34; markerHeight=&#34;7&#34; refX=&#34;9&#34; refY=&#34;3.5&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 9 3.5, 0 7&#34; fill=&#34;#8E8E93&#34; /&gt;&#xA;      &lt;/marker&gt;&#xA;      &lt;marker id=&#34;dns-arrow-green&#34; markerWidth=&#34;9&#34; markerHeight=&#34;7&#34; refX=&#34;9&#34; refY=&#34;3.5&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 9 3.5, 0 7&#34; fill=&#34;#34C759&#34; /&gt;&#xA;      &lt;/marker&gt;&#xA;    &lt;/defs&gt;&#xA;    &lt;!-- Box 1: Mac --&gt;&#xA;    &lt;g class=&#34;dns-step1&#34;&gt;&#xA;      &lt;rect x=&#34;20&#34; y=&#34;50&#34; width=&#34;120&#34; height=&#34;70&#34; rx=&#34;10&#34; class=&#34;dns-box-highlight&#34; /&gt;&#xA;      &lt;text x=&#34;80&#34; y=&#34;82&#34; class=&#34;dns-label&#34; font-weight=&#34;600&#34;&gt;Your Mac&lt;/text&gt;&#xA;      &lt;text x=&#34;80&#34; y=&#34;99&#34; class=&#34;dns-sublabel&#34;&gt;local DNS cache&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Arrow 1→2 --&gt;&#xA;    &lt;g class=&#34;dns-step2&#34;&gt;&#xA;      &lt;line x1=&#34;141&#34; y1=&#34;85&#34; x2=&#34;189&#34; y2=&#34;85&#34; class=&#34;dns-arrow&#34; /&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Box 2: DNS Resolver --&gt;&#xA;    &lt;g class=&#34;dns-step2&#34;&gt;&#xA;      &lt;rect x=&#34;190&#34; y=&#34;50&#34; width=&#34;140&#34; height=&#34;70&#34; rx=&#34;10&#34; class=&#34;dns-box&#34; /&gt;&#xA;      &lt;text x=&#34;260&#34; y=&#34;82&#34; class=&#34;dns-label&#34; font-weight=&#34;600&#34;&gt;DNS Resolver&lt;/text&gt;&#xA;      &lt;text x=&#34;260&#34; y=&#34;99&#34; class=&#34;dns-sublabel&#34;&gt;1.1.1.1 or ISP&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Arrow 2→3 --&gt;&#xA;    &lt;g class=&#34;dns-step3&#34;&gt;&#xA;      &lt;line x1=&#34;331&#34; y1=&#34;85&#34; x2=&#34;379&#34; y2=&#34;85&#34; class=&#34;dns-arrow&#34; /&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Box 3: Authoritative NS --&gt;&#xA;    &lt;g class=&#34;dns-step3&#34;&gt;&#xA;      &lt;rect x=&#34;380&#34; y=&#34;50&#34; width=&#34;150&#34; height=&#34;70&#34; rx=&#34;10&#34; class=&#34;dns-box&#34; /&gt;&#xA;      &lt;text x=&#34;455&#34; y=&#34;82&#34; class=&#34;dns-label&#34; font-weight=&#34;600&#34;&gt;Authoritative NS&lt;/text&gt;&#xA;      &lt;text x=&#34;455&#34; y=&#34;99&#34; class=&#34;dns-sublabel&#34;&gt;holds real records&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Arrow 3→4 (IP back) --&gt;&#xA;    &lt;g class=&#34;dns-step4&#34;&gt;&#xA;      &lt;line x1=&#34;531&#34; y1=&#34;85&#34; x2=&#34;579&#34; y2=&#34;85&#34; class=&#34;dns-arrow&#34; /&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Box 4: IP result --&gt;&#xA;    &lt;g class=&#34;dns-step4&#34;&gt;&#xA;      &lt;rect x=&#34;580&#34; y=&#34;50&#34; width=&#34;120&#34; height=&#34;70&#34; rx=&#34;10&#34; class=&#34;dns-box&#34; /&gt;&#xA;      &lt;text x=&#34;640&#34; y=&#34;82&#34; class=&#34;dns-label&#34; font-weight=&#34;600&#34;&gt;IP Address&lt;/text&gt;&#xA;      &lt;text x=&#34;640&#34; y=&#34;99&#34; class=&#34;dns-sublabel&#34;&gt;returned to Mac&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Return path (dashed green) --&gt;&#xA;    &lt;g class=&#34;dns-return-line&#34;&gt;&#xA;      &lt;path d=&#34;M 640 120 Q 640 155 360 155 Q 80 155 80 121&#34; class=&#34;dns-return&#34; /&gt;&#xA;      &lt;text x=&#34;360&#34; y=&#34;170&#34; class=&#34;dns-sublabel&#34; fill=&#34;#34C759&#34;&gt;cached for future lookups&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;  &lt;/svg&gt;&#xA;  &lt;figcaption&gt;macOS在本地缓存DNS答案，以便在重复访问时跳过整个查询链。当记录更改时，缓存可能会提供过时的数据。&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;缓存通常是好事。它能加快浏览速度，因为您的Mac可以跳过最近访问过的网站的整个查询链。问题出现在DNS记录更改时，Mac缓存的答案仍然指向旧目的地。DNS记录上的TTL（存活时间）告诉解析器缓存多长时间，但macOS并不总是精确遵守它。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在Mac上更改DNS设置</title>
      <link>https://www.netutil.app/zh-hans/blog/change-dns-mac/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/change-dns-mac/</guid>
      <description>&lt;p&gt;您的网络连接默认使用ISP的DNS服务器。您从未选择过它们，可能也不知道它们的地址，而且它们的速度、隐私性或安全性可能不如其他替代方案。在Mac上更改DNS大约只需两分钟，而且能带来明显的改善。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要更换dns服务器&#34;&gt;为什么要更换DNS服务器&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;速度。&lt;/strong&gt; ISP的DNS服务器通常未经过优化。Cloudflare和Google专门为低延迟而大规模运营DNS基础设施。在许多地区，切换到公共DNS解析器可以加快页面加载速度，因为连接网站时的DNS解析步骤会更快完成。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;隐私。&lt;/strong&gt; 您的DNS提供商可以看到您访问的每个域名。您ISP的DNS日志可以由其保留或出售，这取决于其隐私政策和当地法规。Cloudflare的1.1.1.1明确声明不记录查询IP地址，且该承诺经过第三方审计。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;安全性。&lt;/strong&gt; Quad9（9.9.9.9）会将DNS查询与威胁情报数据库进行交叉核对。如果您尝试访问已知的恶意软件或钓鱼网站，Quad9会在您的浏览器建立连接之前就阻止该查询。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;家长控制。&lt;/strong&gt; Cloudflare的1.1.1.3在DNS层面屏蔽成人内容。Google也提供类似的过滤选项。这不是完美的保护措施，但无需在设备上安装任何软件即可生效。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;地理限制内容。&lt;/strong&gt; 某些DNS提供商通往内容分发网络的路径更快。少数专业DNS服务（如NextDNS）还提供管理访问的功能。单纯更改DNS无法像VPN那样突破访问限制，但在某些情况下可以改善路由。&lt;/p&gt;&#xA;&lt;h2 id=&#34;dns的实际工作原理&#34;&gt;DNS的实际工作原理&lt;/h2&gt;&#xA;&lt;p&gt;当您在浏览器中输入域名时，Mac会询问DNS服务器该域名对应的IP地址。通常这个请求会发送到您ISP的服务器。如果您更改了DNS设置，请求就会发送到您选择的服务器。&lt;/p&gt;&#xA;&lt;figure class=&#34;blog-svg&#34; role=&#34;img&#34; aria-labelledby=&#34;dns-svg-title dns-svg-desc&#34;&gt;&#xA;  &lt;svg viewBox=&#34;0 0 700 260&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;max-width: 100%; height: auto;&#34;&gt;&#xA;    &lt;title id=&#34;dns-svg-title&#34;&gt;Custom DNS vs ISP DNS routing&lt;/title&gt;&#xA;    &lt;desc id=&#34;dns-svg-desc&#34;&gt;Two paths showing DNS resolution. The top path shows your Mac going through ISP DNS to the internet. The bottom path shows your Mac going through a custom DNS resolver to the internet. The custom path is highlighted in blue.&lt;/desc&gt;&#xA;    &lt;style&gt;&#xA;      .svg-label { font-family: -apple-system, system-ui, sans-serif; font-size: 13px; fill: #1d1d1f; }&#xA;      .svg-sublabel { font-family: -apple-system, system-ui, sans-serif; font-size: 11px; fill: #6e6e73; }&#xA;      .svg-path-label { font-family: -apple-system, system-ui, sans-serif; font-size: 12px; font-weight: 600; }&#xA;      .box-default { fill: #F5F5F7; stroke: #D2D2D7; stroke-width: 1.5; }&#xA;      .box-highlight { fill: #E8F0FF; stroke: #007AFF; stroke-width: 1.5; }&#xA;      .box-isp { fill: #FFF3F3; stroke: #FF3B30; stroke-width: 1.5; }&#xA;      .box-inet { fill: #F5F5F7; stroke: #D2D2D7; stroke-width: 1.5; }&#xA;      .arrow-default { stroke: #8E8E93; stroke-width: 2; fill: none; }&#xA;      .arrow-highlight { stroke: #007AFF; stroke-width: 2; fill: none; }&#xA;      .arrow-isp { stroke: #FF3B30; stroke-width: 2; fill: none; stroke-dasharray: 6 3; }&#xA;      .divider { stroke: #D2D2D7; stroke-width: 1; stroke-dasharray: 4 4; }&#xA;      @media (prefers-color-scheme: dark) {&#xA;        .svg-label { fill: #F5F5F7; }&#xA;        .svg-sublabel { fill: #8E8E93; }&#xA;        .box-default { fill: #2C2C2E; stroke: #48484A; }&#xA;        .box-highlight { fill: #1C2E4A; stroke: #0A84FF; }&#xA;        .box-isp { fill: #3A1C1C; stroke: #FF453A; }&#xA;      }&#xA;      @media (prefers-reduced-motion: reduce) {&#xA;        .fade-in { animation: none !important; opacity: 1 !important; }&#xA;      }&#xA;      .fade-in-1 { animation: fadeIn 0.4s ease-out 0.2s both; }&#xA;      .fade-in-2 { animation: fadeIn 0.4s ease-out 0.6s both; }&#xA;      .fade-in-3 { animation: fadeIn 0.4s ease-out 1.0s both; }&#xA;      .fade-in-4 { animation: fadeIn 0.4s ease-out 1.4s both; }&#xA;      @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }&#xA;    &lt;/style&gt;&#xA;    &lt;defs&gt;&#xA;      &lt;marker id=&#34;arrow-gray&#34; markerWidth=&#34;8&#34; markerHeight=&#34;6&#34; refX=&#34;8&#34; refY=&#34;3&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 8 3, 0 6&#34; fill=&#34;#8E8E93&#34;/&gt;&#xA;      &lt;/marker&gt;&#xA;      &lt;marker id=&#34;arrow-blue&#34; markerWidth=&#34;8&#34; markerHeight=&#34;6&#34; refX=&#34;8&#34; refY=&#34;3&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 8 3, 0 6&#34; fill=&#34;#007AFF&#34;/&gt;&#xA;      &lt;/marker&gt;&#xA;      &lt;marker id=&#34;arrow-red&#34; markerWidth=&#34;8&#34; markerHeight=&#34;6&#34; refX=&#34;8&#34; refY=&#34;3&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 8 3, 0 6&#34; fill=&#34;#FF3B30&#34;/&gt;&#xA;      &lt;/marker&gt;&#xA;    &lt;/defs&gt;&#xA;    &lt;!-- Row labels --&gt;&#xA;    &lt;text x=&#34;16&#34; y=&#34;80&#34; class=&#34;svg-path-label&#34; style=&#34;fill: #8E8E93;&#34;&gt;默认&lt;/text&gt;&#xA;    &lt;text x=&#34;16&#34; y=&#34;185&#34; class=&#34;svg-path-label&#34; style=&#34;fill: #007AFF;&#34;&gt;自定义DNS&lt;/text&gt;&#xA;    &lt;!-- Divider --&gt;&#xA;    &lt;line x1=&#34;10&#34; y1=&#34;130&#34; x2=&#34;690&#34; y2=&#34;130&#34; class=&#34;divider&#34;/&gt;&#xA;    &lt;!-- ===== TOP ROW: Default / ISP DNS ===== --&gt;&#xA;    &lt;!-- Mac box --&gt;&#xA;    &lt;rect x=&#34;100&#34; y=&#34;52&#34; width=&#34;90&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-default fade-in-1&#34;/&gt;&#xA;    &lt;text x=&#34;145&#34; y=&#34;74&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-1&#34;&gt;Your Mac&lt;/text&gt;&#xA;    &lt;!-- Arrow: Mac -&gt; ISP DNS --&gt;&#xA;    &lt;line x1=&#34;190&#34; y1=&#34;77&#34; x2=&#34;278&#34; y2=&#34;77&#34; class=&#34;arrow-isp fade-in-1&#34; marker-end=&#34;url(#arrow-red)&#34;/&gt;&#xA;    &lt;!-- ISP DNS box --&gt;&#xA;    &lt;rect x=&#34;280&#34; y=&#34;52&#34; width=&#34;110&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-isp fade-in-2&#34;/&gt;&#xA;    &lt;text x=&#34;335&#34; y=&#34;72&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-2&#34;&gt;ISP DNS&lt;/text&gt;&#xA;    &lt;text x=&#34;335&#34; y=&#34;90&#34; text-anchor=&#34;middle&#34; class=&#34;svg-sublabel fade-in-2&#34;&gt;logs your queries&lt;/text&gt;&#xA;    &lt;!-- Arrow: ISP DNS -&gt; Internet --&gt;&#xA;    &lt;line x1=&#34;390&#34; y1=&#34;77&#34; x2=&#34;478&#34; y2=&#34;77&#34; class=&#34;arrow-isp fade-in-2&#34; marker-end=&#34;url(#arrow-red)&#34;/&gt;&#xA;    &lt;!-- Internet box --&gt;&#xA;    &lt;rect x=&#34;480&#34; y=&#34;52&#34; width=&#34;90&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-inet fade-in-3&#34;/&gt;&#xA;    &lt;text x=&#34;525&#34; y=&#34;81&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-3&#34;&gt;Internet&lt;/text&gt;&#xA;    &lt;!-- ===== BOTTOM ROW: Custom DNS ===== --&gt;&#xA;    &lt;!-- Mac box --&gt;&#xA;    &lt;rect x=&#34;100&#34; y=&#34;158&#34; width=&#34;90&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-highlight fade-in-1&#34;/&gt;&#xA;    &lt;text x=&#34;145&#34; y=&#34;180&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-1&#34;&gt;Your Mac&lt;/text&gt;&#xA;    &lt;!-- Arrow: Mac -&gt; Custom DNS --&gt;&#xA;    &lt;line x1=&#34;190&#34; y1=&#34;183&#34; x2=&#34;278&#34; y2=&#34;183&#34; class=&#34;arrow-highlight fade-in-1&#34; marker-end=&#34;url(#arrow-blue)&#34;/&gt;&#xA;    &lt;!-- Custom DNS box --&gt;&#xA;    &lt;rect x=&#34;280&#34; y=&#34;158&#34; width=&#34;110&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-highlight fade-in-2&#34;/&gt;&#xA;    &lt;text x=&#34;335&#34; y=&#34;178&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-2&#34;&gt;Custom DNS&lt;/text&gt;&#xA;    &lt;text x=&#34;335&#34; y=&#34;196&#34; text-anchor=&#34;middle&#34; class=&#34;svg-sublabel fade-in-2&#34;&gt;1.1.1.1 / 8.8.8.8 / 9.9.9.9&lt;/text&gt;&#xA;    &lt;!-- Arrow: Custom DNS -&gt; Internet --&gt;&#xA;    &lt;line x1=&#34;390&#34; y1=&#34;183&#34; x2=&#34;478&#34; y2=&#34;183&#34; class=&#34;arrow-highlight fade-in-3&#34; marker-end=&#34;url(#arrow-blue)&#34;/&gt;&#xA;    &lt;!-- Internet box --&gt;&#xA;    &lt;rect x=&#34;480&#34; y=&#34;158&#34; width=&#34;90&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;box-inet fade-in-3&#34;/&gt;&#xA;    &lt;text x=&#34;525&#34; y=&#34;187&#34; text-anchor=&#34;middle&#34; class=&#34;svg-label fade-in-3&#34;&gt;Internet&lt;/text&gt;&#xA;  &lt;/svg&gt;&#xA;  &lt;figcaption&gt;使用自定义DNS后，您的查询会发送到您选择的解析器，而不是ISP的默认服务器。&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;默认情况下，此更改会影响全系统，包括所有应用和浏览器。DNS配置位于&amp;quot;网络&amp;quot;设置中，而不在任何浏览器内部。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在Mac上检查开放端口：lsof、netstat和nc</title>
      <link>https://www.netutil.app/zh-hans/blog/check-port-open-mac/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/check-port-open-mac/</guid>
      <description>&lt;p&gt;您运行了&lt;code&gt;rails server&lt;/code&gt;但页面无法加载，或者您尝试连接远程服务器却没有任何响应。第一个问题永远是：这个端口真的开着吗？&lt;/p&gt;&#xA;&lt;p&gt;在Mac上检查端口状态只需一条命令。关键是要知道：检查自己的Mac还是检查远程主机，应该使用不同的命令。&lt;/p&gt;&#xA;&lt;h2 id=&#34;检查本机开放端口&#34;&gt;检查本机开放端口&lt;/h2&gt;&#xA;&lt;p&gt;这是开发者最常遇到的情况。您的开发服务器应该运行在3000端口，但浏览器说无法连接。这个端口根本在监听吗？&lt;/p&gt;&#xA;&lt;h3 id=&#34;lsof--i-端口最快的答案&#34;&gt;lsof -i :端口（最快的答案）&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof -i :3000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果有程序在监听，您会看到如下输出：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME&#xA;ruby     8421  aaron  13u  IPv4 0x3f8a2b4c      0t0  TCP *:3000 (LISTEN)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果输出为空，说明没有任何程序绑定到该端口。要么您的Rails服务器没有运行，要么它启动在了其他端口上。&lt;/p&gt;&#xA;&lt;p&gt;检查8080端口：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof -i :8080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;检查80端口（需要sudo，因为这是特权端口）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo lsof -i :80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;lsof--i--grep-listen一次看到所有端口&#34;&gt;lsof -i | grep LISTEN（一次看到所有端口）&lt;/h3&gt;&#xA;&lt;p&gt;要查看Mac当前正在监听的所有端口：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof -i &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; grep LISTEN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出显示所有拥有开放监听端口的进程：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ruby      8421  aaron  13u  IPv4  TCP *:3000 (LISTEN)&#xA;node      9102  aaron  21u  IPv6  TCP *:8080 (LISTEN)&#xA;postgres  1234  aaron   5u  IPv4  TCP localhost:5432 (LISTEN)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注意&lt;code&gt;localhost:5432&lt;/code&gt;和&lt;code&gt;*:3000&lt;/code&gt;的区别。Postgres只接受来自同一台机器的连接，而Rails接受来自网络中任何地方的连接。当您试图从另一台设备连接时，这个区别至关重要。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在Mac上运行路由追踪：命令、输出及其含义</title>
      <link>https://www.netutil.app/zh-hans/blog/traceroute-mac-without-terminal/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/traceroute-mac-without-terminal/</guid>
      <description>&lt;p&gt;您的网络很慢，但连接在技术上是通的。页面最终会加载，视频通话卡顿，某个地方出了问题。路由追踪会告诉您确切在哪里。&lt;/p&gt;&#xA;&lt;p&gt;macOS路由追踪显示您的数据在到达目的地途中经过的每一个路由器，以及每个路由器的响应时间。如果存在拥塞、路由配置错误或断开的链路，它会在输出中显示出来。本指南涵盖&lt;code&gt;traceroute&lt;/code&gt;命令、如何读取其返回内容、常见模式的含义，以及如果您偏好可视化界面如何在不使用终端的情况下在Mac上运行路由追踪。&lt;/p&gt;&#xA;&lt;h2 id=&#34;路由追踪做什么&#34;&gt;路由追踪做什么&lt;/h2&gt;&#xA;&lt;p&gt;数据不会直接从您的Mac传输到服务器。它会经过一系列路由器跳转：您的家用路由器、ISP的设备、区域骨干网络，最后是目标网络。每个步骤称为一跳。&lt;/p&gt;&#xA;&lt;p&gt;路由追踪通过利用每个网络数据包中称为TTL（存活时间）的字段来映射这条链路。TTL是一个计数器，每当路由器转发一个数据包时，就将其减1。当TTL减到零时，路由器丢弃该数据包并发回一条标识自己的错误消息。&lt;/p&gt;&#xA;&lt;p&gt;路由追踪发送TTL=1的数据包，第一个路由器丢弃它并回复。路由追踪记录该路由器的地址和响应时间，然后发送TTL=2的数据包，第二个路由器回复。如此逐跳进行，直到数据包到达目的地。&lt;/p&gt;&#xA;&lt;p&gt;结果是一个完整的路径映射，每步都有延迟测量。&lt;/p&gt;&#xA;&lt;figure class=&#34;blog-svg&#34; role=&#34;img&#34; aria-labelledby=&#34;traceroute-svg-title traceroute-svg-desc&#34;&gt;&#xA;  &lt;svg viewBox=&#34;0 0 720 200&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;max-width: 100%; height: auto;&#34;&gt;&#xA;    &lt;title id=&#34;traceroute-svg-title&#34;&gt;How traceroute maps network hops&lt;/title&gt;&#xA;    &lt;desc id=&#34;traceroute-svg-desc&#34;&gt;A diagram showing a packet traveling from a Mac through four router hops to a destination server, with latency labels at each hop: 3ms, 12ms, 18ms, 45ms, and 47ms.&lt;/desc&gt;&#xA;    &lt;style&gt;&#xA;      .node-box { fill: #F5F5F7; stroke: #D2D2D7; stroke-width: 1.5; }&#xA;      .node-label { font-family: -apple-system, system-ui, sans-serif; font-size: 12px; fill: #1d1d1f; text-anchor: middle; }&#xA;      .hop-label { font-family: -apple-system, system-ui, sans-serif; font-size: 11px; fill: #007AFF; text-anchor: middle; font-weight: 600; }&#xA;      .ms-label { font-family: -apple-system, system-ui, sans-serif; font-size: 10px; fill: #8E8E93; text-anchor: middle; }&#xA;      .arrow-line { stroke: #8E8E93; stroke-width: 1.5; fill: none; }&#xA;      .packet { fill: #007AFF; opacity: 0; }&#xA;      @keyframes travel {&#xA;        0%   { opacity: 0; transform: translateX(0); }&#xA;        10%  { opacity: 1; }&#xA;        90%  { opacity: 1; }&#xA;        100% { opacity: 0; transform: translateX(580px); }&#xA;      }&#xA;      .packet { animation: travel 3.5s ease-in-out infinite; }&#xA;      @media (prefers-color-scheme: dark) {&#xA;        .node-box { fill: #2C2C2E; stroke: #48484A; }&#xA;        .node-label { fill: #F5F5F7; }&#xA;        .ms-label { fill: #6E6E73; }&#xA;      }&#xA;      @media (prefers-reduced-motion: reduce) {&#xA;        .packet { animation: none !important; opacity: 0; }&#xA;      }&#xA;    &lt;/style&gt;&#xA;    &lt;defs&gt;&#xA;      &lt;marker id=&#34;arr&#34; markerWidth=&#34;8&#34; markerHeight=&#34;6&#34; refX=&#34;8&#34; refY=&#34;3&#34; orient=&#34;auto&#34;&gt;&#xA;        &lt;polygon points=&#34;0 0, 8 3, 0 6&#34; fill=&#34;#8E8E93&#34; /&gt;&#xA;      &lt;/marker&gt;&#xA;    &lt;/defs&gt;&#xA;    &lt;!-- Nodes --&gt;&#xA;    &lt;rect x=&#34;10&#34; y=&#34;75&#34; width=&#34;72&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;node-box&#34;/&gt;&#xA;    &lt;text x=&#34;46&#34; y=&#34;97&#34; class=&#34;node-label&#34;&gt;您的&lt;/text&gt;&#xA;    &lt;text x=&#34;46&#34; y=&#34;111&#34; class=&#34;node-label&#34;&gt;Mac&lt;/text&gt;&#xA;    &lt;rect x=&#34;150&#34; y=&#34;75&#34; width=&#34;72&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;node-box&#34;/&gt;&#xA;    &lt;text x=&#34;186&#34; y=&#34;97&#34; class=&#34;node-label&#34;&gt;家用&lt;/text&gt;&#xA;    &lt;text x=&#34;186&#34; y=&#34;111&#34; class=&#34;node-label&#34;&gt;路由器&lt;/text&gt;&#xA;    &lt;rect x=&#34;290&#34; y=&#34;75&#34; width=&#34;72&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;node-box&#34;/&gt;&#xA;    &lt;text x=&#34;326&#34; y=&#34;97&#34; class=&#34;node-label&#34;&gt;ISP&lt;/text&gt;&#xA;    &lt;text x=&#34;326&#34; y=&#34;111&#34; class=&#34;node-label&#34;&gt;路由器&lt;/text&gt;&#xA;    &lt;rect x=&#34;430&#34; y=&#34;75&#34; width=&#34;72&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;node-box&#34;/&gt;&#xA;    &lt;text x=&#34;466&#34; y=&#34;97&#34; class=&#34;node-label&#34;&gt;骨干网&lt;/text&gt;&#xA;    &lt;text x=&#34;466&#34; y=&#34;111&#34; class=&#34;node-label&#34;&gt;路由器&lt;/text&gt;&#xA;    &lt;rect x=&#34;580&#34; y=&#34;75&#34; width=&#34;72&#34; height=&#34;50&#34; rx=&#34;8&#34; class=&#34;node-box&#34;/&gt;&#xA;    &lt;text x=&#34;616&#34; y=&#34;97&#34; class=&#34;node-label&#34;&gt;目标&lt;/text&gt;&#xA;    &lt;text x=&#34;616&#34; y=&#34;111&#34; class=&#34;node-label&#34;&gt;服务器&lt;/text&gt;&#xA;    &lt;!-- Arrows --&gt;&#xA;    &lt;line x1=&#34;83&#34; y1=&#34;100&#34; x2=&#34;148&#34; y2=&#34;100&#34; class=&#34;arrow-line&#34; marker-end=&#34;url(#arr)&#34;/&gt;&#xA;    &lt;line x1=&#34;223&#34; y1=&#34;100&#34; x2=&#34;288&#34; y2=&#34;100&#34; class=&#34;arrow-line&#34; marker-end=&#34;url(#arr)&#34;/&gt;&#xA;    &lt;line x1=&#34;363&#34; y1=&#34;100&#34; x2=&#34;428&#34; y2=&#34;100&#34; class=&#34;arrow-line&#34; marker-end=&#34;url(#arr)&#34;/&gt;&#xA;    &lt;line x1=&#34;503&#34; y1=&#34;100&#34; x2=&#34;578&#34; y2=&#34;100&#34; class=&#34;arrow-line&#34; marker-end=&#34;url(#arr)&#34;/&gt;&#xA;    &lt;!-- Hop labels --&gt;&#xA;    &lt;text x=&#34;116&#34; y=&#34;88&#34; class=&#34;hop-label&#34;&gt;第1跳&lt;/text&gt;&#xA;    &lt;text x=&#34;116&#34; y=&#34;160&#34; class=&#34;ms-label&#34;&gt;3 ms&lt;/text&gt;&#xA;    &lt;text x=&#34;256&#34; y=&#34;88&#34; class=&#34;hop-label&#34;&gt;第2跳&lt;/text&gt;&#xA;    &lt;text x=&#34;256&#34; y=&#34;160&#34; class=&#34;ms-label&#34;&gt;12 ms&lt;/text&gt;&#xA;    &lt;text x=&#34;396&#34; y=&#34;88&#34; class=&#34;hop-label&#34;&gt;第3跳&lt;/text&gt;&#xA;    &lt;text x=&#34;396&#34; y=&#34;160&#34; class=&#34;ms-label&#34;&gt;18 ms&lt;/text&gt;&#xA;    &lt;text x=&#34;540&#34; y=&#34;88&#34; class=&#34;hop-label&#34;&gt;第4跳&lt;/text&gt;&#xA;    &lt;text x=&#34;540&#34; y=&#34;160&#34; class=&#34;ms-label&#34;&gt;45 ms&lt;/text&gt;&#xA;    &lt;!-- Animated packet --&gt;&#xA;    &lt;circle cx=&#34;83&#34; cy=&#34;100&#34; r=&#34;5&#34; class=&#34;packet&#34;/&gt;&#xA;  &lt;/svg&gt;&#xA;  &lt;figcaption&gt;每一跳都是路径上的一个路由器。每步的时间显示了速度减慢发生的位置。&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;在macos上运行路由追踪&#34;&gt;在macOS上运行路由追踪&lt;/h2&gt;&#xA;&lt;p&gt;打开终端（应用程序 &amp;gt; 实用工具 &amp;gt; 终端），然后运行：&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在Mac上运行诊断：Apple诊断及其他</title>
      <link>https://www.netutil.app/zh-hans/blog/run-apple-diagnostics-mac/</link>
      <pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/run-apple-diagnostics-mac/</guid>
      <description>&lt;p&gt;您的Mac行为异常，您不确定是硬件问题、软件问题还是网络问题。运行诊断是正确的第一步，Apple提供了一个内置工具，可以在不启动macOS的情况下测试您的硬件。以下是如何使用它、它能告诉您什么，以及接下来该怎么做。&lt;/p&gt;&#xA;&lt;h2 id=&#34;apple诊断测试什么&#34;&gt;Apple诊断测试什么&lt;/h2&gt;&#xA;&lt;p&gt;Apple诊断是内置于每台Mac中的硬件测试工具。它独立于macOS运行，检查软件无法修复的组件：内存、存储、传感器、无线硬件和逻辑板。如果这些组件中的任何一个出现故障，Apple诊断会检测到它。&lt;/p&gt;&#xA;&lt;p&gt;在Apple Silicon之前，这个工具叫做Apple硬件测试。名称改变了，启动方式也略有变化，但目的是相同的。&lt;/p&gt;&#xA;&lt;p&gt;Apple诊断测试以下组件：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存（RAM）&lt;/strong&gt;：检查可能导致崩溃、死机和数据损坏的内存错误&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;存储&lt;/strong&gt;：扫描驱动器的硬件级别问题（不是软件损坏）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;无线&lt;/strong&gt;：测试Wi-Fi和蓝牙硬件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;传感器&lt;/strong&gt;：温度传感器、风扇和电池管理硬件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;逻辑板&lt;/strong&gt;：核心系统组件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果您的Mac随机崩溃、运行过热、产生内核崩溃或行为不稳定，Apple诊断是正确的第一站。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何运行apple诊断&#34;&gt;如何运行Apple诊断&lt;/h2&gt;&#xA;&lt;p&gt;启动过程因Apple Silicon和Intel Mac而异。&lt;/p&gt;&#xA;&lt;h3 id=&#34;apple-silicon-macm1m2m3m4及更高版本&#34;&gt;Apple Silicon Mac（M1、M2、M3、M4及更高版本）&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;完全关机&lt;/li&gt;&#xA;&lt;li&gt;按住电源按钮，直到看到&amp;quot;正在加载启动选项&amp;quot;&lt;/li&gt;&#xA;&lt;li&gt;在启动选项屏幕上，按&lt;strong&gt;Command + D&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Apple诊断自动启动&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;intel-mac&#34;&gt;Intel Mac&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;完全关机&lt;/li&gt;&#xA;&lt;li&gt;按下电源按钮，然后立即按住&lt;strong&gt;D键&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;继续按住D键，直到看到进度条或语言选择屏幕&lt;/li&gt;&#xA;&lt;li&gt;Apple诊断自动启动&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;如果D键在Intel Mac上不起作用，请尝试&lt;strong&gt;Option + D&lt;/strong&gt;。这会通过互联网启动Apple诊断，在本地版本似乎已损坏时很有用。&lt;/p&gt;&#xA;&lt;h3 id=&#34;测试期间&#34;&gt;测试期间&lt;/h3&gt;&#xA;&lt;p&gt;Apple诊断会自动运行其检查。完整测试需要2-5分钟。您会看到一个进度条，完成后，您会看到&amp;quot;未发现问题&amp;quot;的消息或参考代码列表。&lt;/p&gt;&#xA;&lt;p&gt;运行诊断之前，请将Mac连接到电源，并拔下所有不必要的配件（外部驱动器、USB集线器、外接显示器）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;读取apple诊断参考代码&#34;&gt;读取Apple诊断参考代码&lt;/h2&gt;&#xA;&lt;p&gt;如果Apple诊断发现问题，它会返回一个或多个参考代码。这些代码会告诉您确切的故障部件。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;格式&lt;/strong&gt;：代码看起来像&lt;code&gt;ADP000&lt;/code&gt;或&lt;code&gt;NDC001&lt;/code&gt;。开头的字母表示故障的组件。&lt;/p&gt;&#xA;&lt;p&gt;常见前缀：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;前缀&lt;/th&gt;&#xA;          &lt;th&gt;组件&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;PPM、PPT&lt;/td&gt;&#xA;          &lt;td&gt;内存（RAM）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;HDD、SSD&lt;/td&gt;&#xA;          &lt;td&gt;存储&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;NFL、NDC、NDD&lt;/td&gt;&#xA;          &lt;td&gt;Wi-Fi / 无线硬件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;VFD&lt;/td&gt;&#xA;          &lt;td&gt;视频&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;PFM&lt;/td&gt;&#xA;          &lt;td&gt;电源 / 逻辑板&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ADP&lt;/td&gt;&#xA;          &lt;td&gt;未发现问题（通过）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Apple在&lt;a href=&#34;https://support.apple.com/102562&#34;&gt;support.apple.com/102562&lt;/a&gt;维护完整的参考代码查询表。在那里输入您的代码，可获得具体含义和建议的后续步骤。&lt;/p&gt;&#xA;&lt;p&gt;如果您获得&lt;code&gt;N&lt;/code&gt;系列的代码（NFL、NDC、NDD），说明您的Wi-Fi硬件有问题。这与软件连接问题不同。硬件级别的无线故障需要维修，而不是重装macOS。&lt;/p&gt;&#xA;&lt;h2 id=&#34;运行apple诊断后该做什么&#34;&gt;运行Apple诊断后该做什么&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;未发现问题&lt;/strong&gt;：您的硬件是健康的。导致问题的原因发生在软件或网络层面，而不是硬件层面。继续阅读接下来要检查的内容。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;发现问题&lt;/strong&gt;：记下参考代码。如果代码指向硬件故障，预约天才吧或联系Apple授权服务提供商。带上您的参考代码赴约。如果您的Mac在保修期内或有AppleCare，硬件维修可能在保障范围内。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;测试结论不明确&lt;/strong&gt;：重新运行。间歇性硬件问题有时在第一次运行时不会出现。如果您一直得到干净的结果但Mac仍然崩溃，问题可能是热量相关的（硬件在冷态下正常，但在负载下出现故障）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;mac上的诊断层次&#34;&gt;Mac上的诊断层次&lt;/h2&gt;&#xA;&lt;p&gt;硬件故障是Mac问题的一个类别，但人们日常排查的大多数问题根本不是硬件故障。了解问题实际存在于哪里有助于您更快地诊断。&lt;/p&gt;&#xA;&lt;figure class=&#34;blog-svg&#34; role=&#34;img&#34; aria-labelledby=&#34;svg-diag-title svg-diag-desc&#34;&gt;&#xA;  &lt;svg viewBox=&#34;0 0 680 340&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&#xA;       style=&#34;max-width: 100%; height: auto;&#34;&gt;&#xA;    &lt;title id=&#34;svg-diag-title&#34;&gt;Mac diagnostic layers&lt;/title&gt;&#xA;    &lt;desc id=&#34;svg-diag-desc&#34;&gt;A four-layer stack showing Hardware at the bottom, then System Software, then Network, then Application at the top. Apple Diagnostics covers the Hardware layer; NetUtil covers the Network layer.&lt;/desc&gt;&#xA;    &lt;style&gt;&#xA;      .layer-label { font-family: -apple-system, system-ui, sans-serif; font-size: 15px; font-weight: 600; }&#xA;      .sub-label { font-family: -apple-system, system-ui, sans-serif; font-size: 12px; }&#xA;      .tool-label { font-family: -apple-system, system-ui, sans-serif; font-size: 12px; font-weight: 600; }&#xA;      .layer-hw { fill: #E8F4FD; stroke: #007AFF; stroke-width: 1.5; }&#xA;      .layer-sys { fill: #F2F2F7; stroke: #8E8E93; stroke-width: 1.5; }&#xA;      .layer-net { fill: #E8FDF0; stroke: #34C759; stroke-width: 1.5; }&#xA;      .layer-app { fill: #FDF5E8; stroke: #FF9500; stroke-width: 1.5; }&#xA;      .badge-hw { fill: #007AFF; }&#xA;      .badge-net { fill: #34C759; }&#xA;      .badge-text { font-family: -apple-system, system-ui, sans-serif; font-size: 11px; fill: white; font-weight: 600; }&#xA;      @media (prefers-color-scheme: dark) {&#xA;        .layer-label { fill: #F5F5F7; }&#xA;        .sub-label { fill: #AEAEB2; }&#xA;        .layer-hw { fill: #1C2E3E; }&#xA;        .layer-sys { fill: #2C2C2E; }&#xA;        .layer-net { fill: #1A2E22; }&#xA;        .layer-app { fill: #2E2518; }&#xA;      }&#xA;      @media (prefers-reduced-motion: reduce) {&#xA;        .fade-in { animation: none !important; opacity: 1 !important; }&#xA;      }&#xA;      .fade-in { opacity: 0; animation: fadeIn 0.5s ease-out forwards; }&#xA;      .d1 { animation-delay: 0.1s; }&#xA;      .d2 { animation-delay: 0.35s; }&#xA;      .d3 { animation-delay: 0.6s; }&#xA;      .d4 { animation-delay: 0.85s; }&#xA;      @keyframes fadeIn { to { opacity: 1; } }&#xA;    &lt;/style&gt;&#xA;    &lt;!-- Application layer (top) --&gt;&#xA;    &lt;g class=&#34;fade-in d4&#34;&gt;&#xA;      &lt;rect x=&#34;40&#34; y=&#34;20&#34; width=&#34;440&#34; height=&#34;60&#34; rx=&#34;8&#34; class=&#34;layer-app&#34; /&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;46&#34; class=&#34;layer-label&#34; fill=&#34;#FF9500&#34;&gt;应用程序&lt;/text&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;64&#34; class=&#34;sub-label&#34; fill=&#34;#8E8E93&#34;&gt;应用程序错误、崩溃、配置问题&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Network layer --&gt;&#xA;    &lt;g class=&#34;fade-in d3&#34;&gt;&#xA;      &lt;rect x=&#34;40&#34; y=&#34;100&#34; width=&#34;440&#34; height=&#34;60&#34; rx=&#34;8&#34; class=&#34;layer-net&#34; /&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;126&#34; class=&#34;layer-label&#34; fill=&#34;#34C759&#34;&gt;网络&lt;/text&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;144&#34; class=&#34;sub-label&#34; fill=&#34;#8E8E93&#34;&gt;DNS、路由、延迟、丢包、防火墙&lt;/text&gt;&#xA;      &lt;!-- NetUtil badge --&gt;&#xA;      &lt;rect x=&#34;370&#34; y=&#34;112&#34; width=&#34;96&#34; height=&#34;26&#34; rx=&#34;6&#34; class=&#34;badge-net&#34; /&gt;&#xA;      &lt;text x=&#34;418&#34; y=&#34;130&#34; class=&#34;badge-text&#34; text-anchor=&#34;middle&#34;&gt;NetUtil&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- System Software layer --&gt;&#xA;    &lt;g class=&#34;fade-in d2&#34;&gt;&#xA;      &lt;rect x=&#34;40&#34; y=&#34;180&#34; width=&#34;440&#34; height=&#34;60&#34; rx=&#34;8&#34; class=&#34;layer-sys&#34; /&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;206&#34; class=&#34;layer-label&#34; fill=&#34;#8E8E93&#34;&gt;系统软件&lt;/text&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;224&#34; class=&#34;sub-label&#34; fill=&#34;#8E8E93&#34;&gt;macOS、驱动程序、偏好设置、权限&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Hardware layer (bottom) --&gt;&#xA;    &lt;g class=&#34;fade-in d1&#34;&gt;&#xA;      &lt;rect x=&#34;40&#34; y=&#34;260&#34; width=&#34;440&#34; height=&#34;60&#34; rx=&#34;8&#34; class=&#34;layer-hw&#34; /&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;286&#34; class=&#34;layer-label&#34; fill=&#34;#007AFF&#34;&gt;硬件&lt;/text&gt;&#xA;      &lt;text x=&#34;60&#34; y=&#34;304&#34; class=&#34;sub-label&#34; fill=&#34;#8E8E93&#34;&gt;RAM、存储、传感器、Wi-Fi芯片、逻辑板&lt;/text&gt;&#xA;      &lt;!-- Apple Diagnostics badge --&gt;&#xA;      &lt;rect x=&#34;300&#34; y=&#34;272&#34; width=&#34;158&#34; height=&#34;26&#34; rx=&#34;6&#34; class=&#34;badge-hw&#34; /&gt;&#xA;      &lt;text x=&#34;379&#34; y=&#34;290&#34; class=&#34;badge-text&#34; text-anchor=&#34;middle&#34;&gt;Apple诊断&lt;/text&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;!-- Arrow label on right --&gt;&#xA;    &lt;text x=&#34;502&#34; y=&#34;155&#34; class=&#34;sub-label&#34; fill=&#34;#8E8E93&#34; transform=&#34;rotate(-90, 502, 155)&#34;&gt;由下至上&lt;/text&gt;&#xA;    &lt;line x1=&#34;508&#34; y1=&#34;40&#34; x2=&#34;508&#34; y2=&#34;300&#34; stroke=&#34;#D2D2D7&#34; stroke-width=&#34;1.5&#34; stroke-dasharray=&#34;4,3&#34; /&gt;&#xA;    &lt;polygon points=&#34;508,30 503,45 513,45&#34; fill=&#34;#D2D2D7&#34; /&gt;&#xA;  &lt;/svg&gt;&#xA;  &lt;figcaption&gt;从底部向上诊断：先检查硬件，再检查系统软件，然后是网络，最后是应用程序。&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;当Apple诊断给您的Mac开出健康证明时，问题就在上层。大多数连接问题都存在于网络层。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac网速慢的排查方法</title>
      <link>https://www.netutil.app/zh-hans/blog/troubleshooting-slow-internet-mac/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/troubleshooting-slow-internet-mac/</guid>
      <description>&lt;p&gt;您的网络感觉很慢，但不确定为什么。在打电话给ISP或购买新路由器之前，您可以自己诊断问题。几个简单的测试就能告诉您问题出在您这边、ISP那边，还是其他地方。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先做测速&#34;&gt;先做测速&lt;/h2&gt;&#xA;&lt;p&gt;首先，确认您实际获得的速度。Apple在macOS Monterey中添加了一个名为networkQuality的命令行工具：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;networkQuality&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这会测试上传速度、下载速度和响应能力（负载下的延迟）。运行几次并记录结果，与您的套餐承诺速度进行比较。如果您的套餐承诺100 Mbps下载速度而您实际获得95 Mbps，那是正常的；如果您只获得20 Mbps，说明有问题。&lt;/p&gt;&#xA;&lt;p&gt;您也可以使用fast.com或speedtest.net等在线测速工具，从不同服务各运行几次。如果结果差异很大，可能是到特定服务器的路由存在拥塞。&lt;/p&gt;&#xA;&lt;p&gt;在一天中不同时段进行测试。早上10点速度正常而晚上8点很差，说明存在网络拥塞，可能在您的小区或ISP那边。&lt;/p&gt;&#xA;&lt;h2 id=&#34;检查本地连接&#34;&gt;检查本地连接&lt;/h2&gt;&#xA;&lt;p&gt;网速慢通常从家里开始。Wi-Fi可能是瓶颈，而不是ISP。&lt;/p&gt;&#xA;&lt;p&gt;如果您使用Wi-Fi，尝试用网线直连路由器，然后再次测速。如果速度显著提升，Wi-Fi是问题所在；如果速度保持不变，问题在上游。&lt;/p&gt;&#xA;&lt;p&gt;对于Wi-Fi故障排查，按住Option点击菜单栏中的Wi-Fi图标，选择&amp;quot;打开无线诊断&amp;quot;。使用扫描功能查看附近所有网络，观察它们使用的信道。如果您的网络和几个邻居都在使用6信道，您在争夺信道资源。更换路由器信道可能有帮助。&lt;/p&gt;&#xA;&lt;p&gt;信号强度也很重要。离路由器越远，连接越慢。墙壁、地板和电器会造成干扰。靠近路由器或重新摆放路由器位置可以带来显著改善。&lt;/p&gt;&#xA;&lt;h2 id=&#34;ping测试基本连通性&#34;&gt;Ping测试基本连通性&lt;/h2&gt;&#xA;&lt;p&gt;Ping测量数据包到达目的地并返回的往返时间。高Ping时间表示延迟，会让一切感觉迟钝。&lt;/p&gt;&#xA;&lt;p&gt;先Ping您的路由器：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ping -c &lt;span style=&#34;color:#0550ae&#34;&gt;10&lt;/span&gt; 192.168.1.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将192.168.1.1替换为您路由器的实际IP（可在&amp;quot;系统设置 &amp;gt; 网络 &amp;gt; Wi-Fi &amp;gt; 详细信息 &amp;gt; TCP/IP&amp;quot;中找到）。如果到自己路由器的Ping时间很高（超过10ms）或不稳定，本地网络存在问题。&lt;/p&gt;&#xA;&lt;p&gt;然后Ping网络上的某个地址：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ping -c &lt;span style=&#34;color:#0550ae&#34;&gt;10&lt;/span&gt; 8.8.8.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这Ping的是Google的DNS服务器。对大多数地区来说，50ms以内是良好的。如果到路由器的Ping很快，但到网络的Ping很慢，问题出在路由器和目的地之间。&lt;/p&gt;&#xA;&lt;p&gt;也要注意丢包。如果Ping摘要显示有数据包丢失，说明某处的连接不稳定。&lt;/p&gt;&#xA;&lt;h2 id=&#34;路由追踪分析路径&#34;&gt;路由追踪分析路径&lt;/h2&gt;&#xA;&lt;p&gt;路由追踪显示您的Mac和目的地之间的每一跳，揭示速度减慢发生的位置。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;traceroute google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每一行是路径上的一个路由器。末尾的三个数字是三次独立探测的响应时间（毫秒）。&lt;/p&gt;&#xA;&lt;p&gt;寻找延迟的突然跳跃。如果第1-3跳都在20ms以内，然后第4跳跳到200ms，说明在那个点存在拥塞或问题。&lt;/p&gt;&#xA;&lt;p&gt;前几跳是您的本地网络和ISP。如果高延迟在那里出现，问题就在附近。远端跳点的高延迟更难修复，因为那些网络不在您的控制之内。&lt;/p&gt;&#xA;&lt;p&gt;星号（* * *）表示路由器没有响应探测。这不一定是问题。许多路由器忽略路由追踪数据包。如果路由在静默跳之后继续，流量仍在流动。&lt;/p&gt;&#xA;&lt;h2 id=&#34;dns问题&#34;&gt;DNS问题&lt;/h2&gt;&#xA;&lt;p&gt;DNS解析慢会让网络感觉迟钝。每次访问新网站，浏览器都必须查询IP地址。如果查询花费的时间很长，页面加载就会停滞。&lt;/p&gt;&#xA;&lt;p&gt;测试DNS速度：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#6639ba&#34;&gt;time&lt;/span&gt; dig google.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;ldquo;Query time&amp;quot;这一行显示查询花了多长时间。50ms以内是良好的，超过200ms就很慢了。&lt;/p&gt;&#xA;&lt;p&gt;如果DNS很慢，尝试切换DNS服务器。ISP的默认DNS可能已经过载或维护不佳。&lt;/p&gt;&#xA;&lt;p&gt;要使用Google的DNS（8.8.8.8和8.8.4.4）或Cloudflare的DNS（1.1.1.1和1.0.0.1），请进入&amp;quot;系统设置 &amp;gt; 网络 &amp;gt; Wi-Fi &amp;gt; 详细信息 &amp;gt; DNS&amp;rdquo;。删除现有条目并添加新的。&lt;/p&gt;&#xA;&lt;p&gt;更改DNS后，刷新Mac的DNS缓存：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo dscacheutil -flushcache&lt;span style=&#34;color:#1f2328&#34;&gt;;&lt;/span&gt; sudo killall -HUP mDNSResponder&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次运行dig测试，看看速度是否改善。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Apple下架了网络实用工具，现在该用什么</title>
      <link>https://www.netutil.app/zh-hans/blog/apple-killed-network-utility/</link>
      <pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://www.netutil.app/zh-hans/blog/apple-killed-network-utility/</guid>
      <description>&lt;p&gt;如果您最近升级到了新版macOS，发现找不到&amp;quot;网络实用工具&amp;quot;，那是因为它真的不见了。Apple在macOS Big Sur中悄悄将其移除，结束了这款工具长达数十年的历史——从经典Mac OS时代算起，它在&amp;quot;实用工具&amp;quot;文件夹中存在了二十多年，然后有一天就消失了。&lt;/p&gt;&#xA;&lt;p&gt;Apple既没有宣布这一移除，也没有给出任何解释，更没有提供替代品。网络实用工具就这样消失了，留给那些依赖它的用户一片空白。&lt;/p&gt;&#xA;&lt;h2 id=&#34;网络实用工具能做什么&#34;&gt;网络实用工具能做什么&lt;/h2&gt;&#xA;&lt;p&gt;网络实用工具将多个工具集成在一个窗口中：信息、Netstat、Ping、查询、路由追踪、Whois、Finger和端口扫描。（AppleTalk在该协议停用多年后就已被移除。）对大多数用户而言，最重要的功能是Ping、路由追踪、查询（DNS）和端口扫描。&lt;/p&gt;&#xA;&lt;p&gt;这款应用让用户无需打开终端即可使用这些工具。您可以Ping服务器检查其是否响应，追踪到目标的网络路径，查询DNS记录，或扫描某主机上的开放端口。对于网络故障排查来说，这些都是基本操作，但确实非常实用。&lt;/p&gt;&#xA;&lt;p&gt;系统管理员经常使用它。开发者在调试连接问题时也会用到它。了解这款工具的普通用户，也很欣赏能用图形界面完成这些操作，而不必记忆命令行语法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;apple为何将其移除&#34;&gt;Apple为何将其移除&lt;/h2&gt;&#xA;&lt;p&gt;Apple从未给出官方解释。最可能的原因是网络实用工具依赖已废弃的系统API，不值得再花精力更新。多年来Apple一直在清理历史遗留代码，放弃32位应用支持，移除需要维护旧框架的功能。&lt;/p&gt;&#xA;&lt;p&gt;网络实用工具本身也存在一些粗糙之处。其界面自2000年代初以来几乎没有变化。Finger等功能已是早期互联网时代的过时遗物。Apple选择彻底放弃这款应用，而不是对其进行现代化改造。&lt;/p&gt;&#xA;&lt;p&gt;另一个可能的原因是，Apple认为大多数用户根本不需要这些工具。普通Mac用户从不打开网络实用工具。从Apple的角度来看，维护这段几乎无人使用的代码得不偿失。&lt;/p&gt;&#xA;&lt;h2 id=&#34;终端替代方案&#34;&gt;终端替代方案&lt;/h2&gt;&#xA;&lt;p&gt;网络实用工具能做的一切，仍然可以通过终端实现。每台Mac上都有这些底层命令：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ping google.com&lt;/code&gt;检查连通性；&lt;code&gt;traceroute google.com&lt;/code&gt;显示网络路径；&lt;code&gt;nslookup google.com&lt;/code&gt;或&lt;code&gt;dig google.com&lt;/code&gt;处理DNS查询；&lt;code&gt;whois google.com&lt;/code&gt;获取域名注册信息。端口扫描则需要使用&lt;code&gt;nc&lt;/code&gt;（netcat）等额外工具或第三方软件。&lt;/p&gt;&#xA;&lt;p&gt;对于熟悉命令行的用户来说，这完全够用。但终端也有缺点：需要记住语法和参数，输出是会滚动消失的纯文本，同时运行多个测试需要管理多个窗口或标签页，也没有可视化的结果呈现方式。&lt;/p&gt;&#xA;&lt;p&gt;网络实用工具的存在，正是因为不是所有人都想用终端做所有事情。Apple移除这款应用并不意味着这种需求消失了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;第三方替代品&#34;&gt;第三方替代品&lt;/h2&gt;&#xA;&lt;p&gt;网络实用工具的移除为独立开发者创造了机会。现在有几款应用填补了这一空缺。&lt;/p&gt;&#xA;&lt;p&gt;有些是免费的基础应用，只提供原有功能的子集。另一些则是功能更完善、更精致的商业产品。质量参差不齐。许多只是在相同的命令行工具之上加了一层图形界面，并未在用户体验上下多少功夫。&lt;/p&gt;&#xA;&lt;p&gt;在评估替代品时，要考虑您实际需要什么。如果您只是偶尔需要Ping一个服务器，几乎任何工具都能胜任。如果您需要完整的网络诊断功能，就需要更全面的方案。&lt;/p&gt;&#xA;&lt;h2 id=&#34;替代品应具备的特性&#34;&gt;替代品应具备的特性&lt;/h2&gt;&#xA;&lt;p&gt;一款优秀的网络实用工具替代品应包含核心工具：Ping、路由追踪、DNS查询、Whois和端口扫描。Netstat和Finger有的话更好，但不是必须的。&lt;/p&gt;&#xA;&lt;p&gt;界面很重要。结果应该易于阅读和理解，不应该像在终端中那样需要解析原始文本输出。&lt;/p&gt;&#xA;&lt;p&gt;性能同样重要。使用macOS原生框架构建的应用，感觉比基于跨平台框架或Web技术构建的应用更快、响应更灵敏。&lt;/p&gt;&#xA;&lt;p&gt;隐私值得考虑。某些网络工具，尤其是基于Web的工具，会通过其服务器转发您的查询。这意味着工具运营商可以看到您在扫描哪些主机、查询哪些域名、检查哪些端口。直接从您的Mac发起查询的本地应用则没有这个问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;netutil作为一种选择&#34;&gt;NetUtil作为一种选择&lt;/h2&gt;&#xA;&lt;p&gt;我们专门为替代网络实用工具而构建了&lt;a href=&#34;https://www.netutil.app/zh-hans/&#34;&gt;NetUtil&lt;/a&gt;。它包含全部七个经典工具：Ping、路由追踪、DNS查询、Netstat、Whois、Finger和端口扫描。所有功能均在您的Mac本地运行，不向外部服务器发送任何数据。&lt;/p&gt;&#xA;&lt;p&gt;这款应用是原生SwiftUI应用，同时支持Apple Silicon和Intel Mac。它的外观和体验都像一款现代macOS应用，因为它本来就是。&lt;/p&gt;&#xA;&lt;p&gt;我们并不声称它是唯一的选择。这个领域还有其他应用，其中一些也完全能够胜任。但如果您自从Apple移除网络实用工具后一直在寻找替代品，NetUtil正是为填补这一空缺而设计的。&lt;/p&gt;&#xA;&lt;p&gt;对于端口相关工作，&lt;a href=&#34;https://portie.dev&#34;&gt;Portie&lt;/a&gt;在网络实用工具端口扫描器的基础上更进一步——提供实时本地监控、按应用分组的视图以及可选的远程扫描功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;更大的图景&#34;&gt;更大的图景&lt;/h2&gt;&#xA;&lt;p&gt;Apple移除网络实用工具反映了一个更广泛的趋势。macOS多年来一直在削减高级用户功能。Dashboard不见了，内置Web服务器变得更难启用，脚本能力受到了限制。这个操作系统越来越面向主流消费者，而非开发者和系统管理员。&lt;/p&gt;&#xA;&lt;p&gt;这不一定是错的。Apple必须有所取舍，大多数Mac用户并不需要网络诊断工具。但对于确实需要它们的人来说，这种移除令人遗憾。&lt;/p&gt;&#xA;&lt;p&gt;好在macOS仍然足够开放，允许第三方开发者构建替代品。网络协议栈还在，命令行工具还在运作。我们只需要能通过合理界面提供这些功能的应用。&lt;/p&gt;&#xA;&lt;p&gt;网络实用工具走过了辉煌的历程，二十多年在软件世界里是很长的时间。但它所解决的需求并没有消失，而且现在已经有了比Apple当年提供的更好的选择。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
