<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>网络 on WYF 的技术博客</title><link>https://saflyer.cn/tags/%E7%BD%91%E7%BB%9C/</link><description>Recent content in 网络 on WYF 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Wed, 16 Sep 2026 10:43:32 +0800</lastBuildDate><atom:link href="https://saflyer.cn/tags/%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux运维 01：Mac 判断服务器端口连通性方法大全（nc / curl / telnet / nmap）</title><link>https://saflyer.cn/posts/mac-port-check-methods/</link><pubDate>Wed, 16 Sep 2026 10:30:00 +0800</pubDate><guid>https://saflyer.cn/posts/mac-port-check-methods/</guid><description>&lt;img src="https://saflyer.cn/posts/mac-port-check-methods/cover.webp" alt="Featured image of post Linux运维 01：Mac 判断服务器端口连通性方法大全（nc / curl / telnet / nmap）" /&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;环境&lt;/strong&gt;：macOS（Apple Silicon），无需安装任何软件即可完成 90% 的排查&#10;&lt;strong&gt;场景&lt;/strong&gt;：服务器部署了服务，想确认&amp;quot;端口到底通不通&amp;quot;&amp;ldquo;这台机器上还开了哪些端口&amp;rdquo;&#10;&lt;strong&gt;读者定位&lt;/strong&gt;：收藏当手册，用到时按目录查&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="一先建立两个认知不懂这两个必误判"&gt;&lt;a href="#%e4%b8%80%e5%85%88%e5%bb%ba%e7%ab%8b%e4%b8%a4%e4%b8%aa%e8%ae%a4%e7%9f%a5%e4%b8%8d%e6%87%82%e8%bf%99%e4%b8%a4%e4%b8%aa%e5%bf%85%e8%af%af%e5%88%a4" class="header-anchor"&gt;&lt;/a&gt;一、先建立两个认知（不懂这两个，必误判）&#10;&lt;/h2&gt;&lt;h3 id="11-ping-不通--端口不通"&gt;&lt;a href="#11-ping-%e4%b8%8d%e9%80%9a--%e7%ab%af%e5%8f%a3%e4%b8%8d%e9%80%9a" class="header-anchor"&gt;&lt;/a&gt;1.1 ping 不通 ≠ 端口不通&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;ping&lt;/code&gt; 走的是 &lt;strong&gt;ICMP 协议&lt;/strong&gt;，而业务端口走的是 &lt;strong&gt;TCP 协议&lt;/strong&gt;，两者互不相干。&#10;很多服务器和内网防火墙会直接丢弃 ICMP 包，造成&amp;quot;ping 100% 丢包但 80 端口网页开得好好的&amp;quot;。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;结论：不要用 ping 判断服务是否存活，要用 TCP 探测。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="12-连上没字--不通谁先说话问题"&gt;&lt;a href="#12-%e8%bf%9e%e4%b8%8a%e6%b2%a1%e5%ad%97--%e4%b8%8d%e9%80%9a%e8%b0%81%e5%85%88%e8%af%b4%e8%af%9d%e9%97%ae%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;1.2 连上没字 ≠ 不通（&amp;ldquo;谁先说话&amp;quot;问题）&#10;&lt;/h3&gt;&lt;p&gt;不同协议的&amp;quot;开场白&amp;quot;方向不一样：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;协议类型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;代表服务&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;连接建立后&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;服务器先说话&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SSH(22)、MySQL(3306)、FTP(21)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;立刻推送 banner（版本信息）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;客户端先说话&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP(80/8080&amp;hellip;)、Redis(6379)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;一言不发，等你先发请求&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;所以用 telnet 测 HTTP 端口，连上后一片空白、光标干等——&lt;strong&gt;这不是不通，是正常等待&lt;/strong&gt;。输入 &lt;code&gt;GET / HTTP/1.0&lt;/code&gt; 再按两次回车，响应立刻就出来了。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;真实案例&lt;/strong&gt;：浏览器能打开 &lt;code&gt;http://10.36.35.43:8083/login&lt;/code&gt;，但 &lt;code&gt;telnet 10.36.35.43 8083&lt;/code&gt; &amp;ldquo;没响应&amp;rdquo;。用 nc 验证：TCP 秒连，手动发一行 GET 请求立刻返回 &lt;code&gt;HTTP/1.1 200 OK&lt;/code&gt;——端口一直是通的，只是 HTTP 服务不主动打招呼。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="二判断单个端口是否通"&gt;&lt;a href="#%e4%ba%8c%e5%88%a4%e6%96%ad%e5%8d%95%e4%b8%aa%e7%ab%af%e5%8f%a3%e6%98%af%e5%90%a6%e9%80%9a" class="header-anchor"&gt;&lt;/a&gt;二、判断单个端口是否通&#10;&lt;/h2&gt;&lt;h3 id="方法-1ncmacos-自带首选"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-1ncmacos-%e8%87%aa%e5%b8%a6%e9%a6%96%e9%80%89" class="header-anchor"&gt;&lt;/a&gt;方法 1：nc（macOS 自带，首选）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc -vz 10.36.35.43 &lt;span class="m"&gt;22&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -v 显示详情 -z 只探测不传数据 -G 2 可指定超时秒数&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;三种结果，语义完全不同，要能读懂：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;输出&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Connection to ... succeeded!&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ 通，且有服务在监听&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;failed: Connection refused&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;主机可达，但端口没服务监听（服务没起/监听别的端口）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;failed: Operation timed out&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;包被防火墙丢了，或主机不可达（不是&amp;quot;没服务&amp;rdquo;）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="方法-2curlhttp-服务最方便"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-2curlhttp-%e6%9c%8d%e5%8a%a1%e6%9c%80%e6%96%b9%e4%be%bf" class="header-anchor"&gt;&lt;/a&gt;方法 2：curl（HTTP 服务最方便）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-1-1"&gt;&lt;a class="lnlinks" href="#hl-1-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-1-2"&gt;&lt;a class="lnlinks" href="#hl-1-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sI -m &lt;span class="m"&gt;5&lt;/span&gt; http://10.36.35.43:8080 &lt;span class="c1"&gt;# 看状态行 + Server 头&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -v telnet://10.36.35.43:22 &lt;span class="c1"&gt;# 冷门招：telnet:// 协议能测任意 TCP 端口，还能拿到 SSH banner&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="方法-3bash-内置-devtcp零依赖应急"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-3bash-%e5%86%85%e7%bd%ae-devtcp%e9%9b%b6%e4%be%9d%e8%b5%96%e5%ba%94%e6%80%a5" class="header-anchor"&gt;&lt;/a&gt;方法 3：bash 内置 /dev/tcp（零依赖应急）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-2-1"&gt;&lt;a class="lnlinks" href="#hl-2-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash -c &lt;span class="s1"&gt;&amp;#39;(echo &amp;gt; /dev/tcp/10.36.35.43/22) 2&amp;gt;/dev/null &amp;amp;&amp;amp; echo 通 || echo 不通&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;无需任何外部命令，是 bash 自身的特性。缺点是超时不可控（防火墙丢包场景会等很久），日常还是 nc 好用。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;⚠️ 踩坑（实测）：zsh 下直接跑会得到&amp;quot;假阴性&amp;quot;&lt;/strong&gt;。&lt;code&gt;/dev/tcp&lt;/code&gt; 是 &lt;strong&gt;bash 独有&lt;/strong&gt;的伪设备，zsh 不认识——它把 &lt;code&gt;/dev/tcp/10.36.35.43/22&lt;/code&gt; 当普通文件路径，重定向失败的报错又被 &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt; 吞掉，于是端口明明是通的也输出&amp;quot;不通&amp;quot;。macOS 从 Catalina 起默认 shell 就是 zsh，所以必须套一层 &lt;code&gt;bash -c '...'&lt;/code&gt;。验证：&lt;code&gt;curl -v telnet://IP:端口&lt;/code&gt; 能拿到 banner 而 /dev/tcp 报不通时，先想想自己当前在哪个 shell 里。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="方法-4telnet新版-macos-需自行安装"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-4telnet%e6%96%b0%e7%89%88-macos-%e9%9c%80%e8%87%aa%e8%a1%8c%e5%ae%89%e8%a3%85" class="header-anchor"&gt;&lt;/a&gt;方法 4：telnet（新版 macOS 需自行安装）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-3-1"&gt;&lt;a class="lnlinks" href="#hl-3-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-3-2"&gt;&lt;a class="lnlinks" href="#hl-3-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install telnet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;telnet 10.36.35.43 &lt;span class="m"&gt;22&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;看到 &lt;code&gt;Connected to ...&lt;/code&gt; 就说明 TCP 通了。后面有没有字，取决于 1.1 节说的&amp;quot;谁先说话&amp;quot;。&lt;/p&gt;&#10;&lt;h3 id="方法-5nmap装了的话"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-5nmap%e8%a3%85%e4%ba%86%e7%9a%84%e8%af%9d" class="header-anchor"&gt;&lt;/a&gt;方法 5：nmap（装了的话）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-4-1"&gt;&lt;a class="lnlinks" href="#hl-4-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn -p 22,80,443 10.36.35.43&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;&lt;code&gt;-Pn&lt;/code&gt; 很重要&lt;/strong&gt;：nmap 默认先 ping 探测主机死活，ping 不通直接跳过扫描。内网服务器经常禁 ping（见 1.1），不加 &lt;code&gt;-Pn&lt;/code&gt; 会得出&amp;quot;主机 down&amp;quot;的错误结论。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="方法-6浏览器"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-6%e6%b5%8f%e8%a7%88%e5%99%a8" class="header-anchor"&gt;&lt;/a&gt;方法 6：浏览器&#10;&lt;/h3&gt;&lt;p&gt;HTTP/HTTPS 服务最直接：&lt;code&gt;http://IP:端口&lt;/code&gt; 能打开页面就是通的。但注意它只对 Web 服务有效。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="三扫描整台服务器哪些端口是开的"&gt;&lt;a href="#%e4%b8%89%e6%89%ab%e6%8f%8f%e6%95%b4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%93%aa%e4%ba%9b%e7%ab%af%e5%8f%a3%e6%98%af%e5%bc%80%e7%9a%84" class="header-anchor"&gt;&lt;/a&gt;三、扫描整台服务器：哪些端口是开的&#10;&lt;/h2&gt;&lt;h3 id="方法-1nmap标准答案"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-1nmap%e6%a0%87%e5%87%86%e7%ad%94%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;方法 1：nmap（标准答案）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-5-1"&gt;&lt;a class="lnlinks" href="#hl-5-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-2"&gt;&lt;a class="lnlinks" href="#hl-5-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-3"&gt;&lt;a class="lnlinks" href="#hl-5-3"&gt;3&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-4"&gt;&lt;a class="lnlinks" href="#hl-5-4"&gt;4&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-5"&gt;&lt;a class="lnlinks" href="#hl-5-5"&gt;5&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-6"&gt;&lt;a class="lnlinks" href="#hl-5-6"&gt;6&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-5-7"&gt;&lt;a class="lnlinks" href="#hl-5-7"&gt;7&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install nmap&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn 10.36.35.43 &lt;span class="c1"&gt;# top 1000 常用端口（最常用）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn -F 10.36.35.43 &lt;span class="c1"&gt;# top 100，更快&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn -p- 10.36.35.43 &lt;span class="c1"&gt;# 全端口 1-65535（慢，几分钟）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn -sV 10.36.35.43 &lt;span class="c1"&gt;# 顺带识别服务版本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nmap -Pn -T4 --open 10.36.35.43 &lt;span class="c1"&gt;# 加速 + 只显示开放的&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="方法-2nc--xargs-并发不装任何东西的应急方案"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-2nc--xargs-%e5%b9%b6%e5%8f%91%e4%b8%8d%e8%a3%85%e4%bb%bb%e4%bd%95%e4%b8%9c%e8%a5%bf%e7%9a%84%e5%ba%94%e6%80%a5%e6%96%b9%e6%a1%88" class="header-anchor"&gt;&lt;/a&gt;方法 2：nc + xargs 并发（不装任何东西的应急方案）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-6-1"&gt;&lt;a class="lnlinks" href="#hl-6-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-6-2"&gt;&lt;a class="lnlinks" href="#hl-6-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-6-3"&gt;&lt;a class="lnlinks" href="#hl-6-3"&gt;3&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-6-4"&gt;&lt;a class="lnlinks" href="#hl-6-4"&gt;4&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-6-5"&gt;&lt;a class="lnlinks" href="#hl-6-5"&gt;5&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;21 22 23 25 53 80 110 143 443 445 465 587 993 995 1080 1433 1521 2181 \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;2375 3000 3306 3389 4000 5000 5432 5672 5900 6379 8000 8006 8007 8080 8081 \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;8086 8090 8443 8848 8888 9000 9001 9042 9090 9092 9200 9300 10000 11211 15672 27017&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; tr &lt;span class="s1"&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -P &lt;span class="m"&gt;20&lt;/span&gt; -I&lt;span class="o"&gt;{}&lt;/span&gt; sh -c &lt;span class="s1"&gt;&amp;#39;nc -z -G 2 10.36.35.43 {} &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; echo &amp;#34;OPEN {}&amp;#34;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;原理：&lt;code&gt;nc -z&lt;/code&gt; 逐端口试探 TCP 握手，&lt;code&gt;xargs -P 20&lt;/code&gt; 并发 20 个，50 个常见端口十几秒扫完。&#10;想扫全端口就换成 &lt;code&gt;seq 1 65535 | xargs -P 50 ...&lt;/code&gt;，慢但可行。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;注意列表覆盖&lt;/strong&gt;：上面的清单是手挑的常见端口，像 8083 这种非典型端口就不会命中——扫不到不代表没开，只代表&amp;quot;不在清单里&amp;quot;。要穷举就上 nmap &lt;code&gt;-p-&lt;/code&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="方法-3masscan海量端口需-sudo"&gt;&lt;a href="#%e6%96%b9%e6%b3%95-3masscan%e6%b5%b7%e9%87%8f%e7%ab%af%e5%8f%a3%e9%9c%80-sudo" class="header-anchor"&gt;&lt;/a&gt;方法 3：masscan（海量端口，需 sudo）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-7-1"&gt;&lt;a class="lnlinks" href="#hl-7-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-7-2"&gt;&lt;a class="lnlinks" href="#hl-7-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install masscan&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo masscan -p1-65535 10.36.35.43 --rate&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;异步发包，全端口几十秒扫完。适合大网段，单机用 nmap 足矣。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="四识别端口上跑的是什么服务banner-grabbing"&gt;&lt;a href="#%e5%9b%9b%e8%af%86%e5%88%ab%e7%ab%af%e5%8f%a3%e4%b8%8a%e8%b7%91%e7%9a%84%e6%98%af%e4%bb%80%e4%b9%88%e6%9c%8d%e5%8a%a1banner-grabbing" class="header-anchor"&gt;&lt;/a&gt;四、识别端口上跑的是什么服务（banner grabbing）&#10;&lt;/h2&gt;&lt;p&gt;端口通只是第一步，抓 banner 才知道上面跑的是谁：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-8-1"&gt;&lt;a class="lnlinks" href="#hl-8-1"&gt;1&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-2"&gt;&lt;a class="lnlinks" href="#hl-8-2"&gt;2&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-3"&gt;&lt;a class="lnlinks" href="#hl-8-3"&gt;3&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-4"&gt;&lt;a class="lnlinks" href="#hl-8-4"&gt;4&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-5"&gt;&lt;a class="lnlinks" href="#hl-8-5"&gt;5&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-6"&gt;&lt;a class="lnlinks" href="#hl-8-6"&gt;6&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-7"&gt;&lt;a class="lnlinks" href="#hl-8-7"&gt;7&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-8"&gt;&lt;a class="lnlinks" href="#hl-8-8"&gt;8&lt;/a&gt;&#10;&lt;/span&gt;&lt;span class="lnt" id="hl-8-9"&gt;&lt;a class="lnlinks" href="#hl-8-9"&gt;9&lt;/a&gt;&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# SSH / MySQL：连上就读（服务器先说话）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc -w &lt;span class="m"&gt;2&lt;/span&gt; 10.36.35.43 &lt;span class="m"&gt;22&lt;/span&gt; &amp;lt; /dev/null &lt;span class="p"&gt;|&lt;/span&gt; head -1 &lt;span class="c1"&gt;# SSH-2.0-OpenSSH_8.8&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc -w &lt;span class="m"&gt;2&lt;/span&gt; 10.36.35.43 &lt;span class="m"&gt;3306&lt;/span&gt; &amp;lt; /dev/null &lt;span class="p"&gt;|&lt;/span&gt; strings &lt;span class="p"&gt;|&lt;/span&gt; head -1 &lt;span class="c1"&gt;# 5.7.44&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Redis：发 PING 看回应（客户端先说话）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;PING\r\n&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; nc -w &lt;span class="m"&gt;2&lt;/span&gt; 10.36.35.43 &lt;span class="m"&gt;6379&lt;/span&gt; &lt;span class="c1"&gt;# -NOAUTH Authentication required.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HTTP：HEAD 请求&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sI -m &lt;span class="m"&gt;5&lt;/span&gt; http://10.36.35.43:80 &lt;span class="c1"&gt;# Server: nginx/1.13.12&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;一条命令全搞定的懒人方案：&lt;code&gt;nmap -Pn -sV 目标IP&lt;/code&gt;。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="五实战案例扫描内网服务器-10363543"&gt;&lt;a href="#%e4%ba%94%e5%ae%9e%e6%88%98%e6%a1%88%e4%be%8b%e6%89%ab%e6%8f%8f%e5%86%85%e7%bd%91%e6%9c%8d%e5%8a%a1%e5%99%a8-10363543" class="header-anchor"&gt;&lt;/a&gt;五、实战案例：扫描内网服务器 10.36.35.43&#10;&lt;/h2&gt;&lt;p&gt;用方法三·2 的 nc 并发扫描 + 方法四的 banner 抓取，实测结果：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;识别详情&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;22&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;SSH&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OpenSSH 8.8&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;80&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nginx/1.13.12，首页 200&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;443&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;开放但未知&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TCP 通，不回应 HTTPS 握手&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3306&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MySQL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5.7.44（版本号 banner 直接暴露）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6379&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Redis&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;有密码（NOAUTH）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8080/8081&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;根路径 404，未暴露 Server 头&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8083&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nginx 反代的前端登录页（后补扫发现）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;顺带两个安全观察：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;MySQL 版本号在 banner 里裸奔&lt;/strong&gt;——等于告诉攻击者该打哪些 CVE，3306 应只对需要的网段开放&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;nginx 1.13.12 是 2017 年的版本&lt;/strong&gt;，已知漏洞不少（如 CVE-2017-7529），正式服务建议升级&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="六速查表"&gt;&lt;a href="#%e5%85%ad%e9%80%9f%e6%9f%a5%e8%a1%a8" class="header-anchor"&gt;&lt;/a&gt;六、速查表&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;需求&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;命令&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;测单个端口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nc -vz IP 端口&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;测 HTTP 服务&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;curl -sI -m 5 http://IP:端口&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;任意 TCP 端口看 banner&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;curl -v telnet://IP:端口&lt;/code&gt; 或 &lt;code&gt;nc -w 2 IP 端口&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;扫常用端口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nmap -Pn IP&lt;/code&gt;（无 nmap 时用 nc+xargs 脚本）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;扫全端口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nmap -Pn -p- IP&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;识别服务版本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nmap -Pn -sV IP&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ping 不通还想扫&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nmap 务必加 &lt;code&gt;-Pn&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;合规提醒&lt;/strong&gt;：端口扫描只用于自己的服务器或获得明确授权的目标。对陌生主机扫描在多数公司和云厂商守则里属于攻击行为。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>