【AI 生成】探索校园网的 TCP 445(SMB)端口

神何殛我越荒州,处我天南海北头。

前言

自从有一次观看了字幕组制作的带有精品字幕的动漫后,我养成了本地看片的习惯。苗头在四五年前就已经产生,上半年换手机得到了第一部 iPhone,自然也接触到了 infuse。

由此可见,我接触到媒体服务器就是水到渠成的事了。在今年的寒假,当时尚未接触到 Emby、Jellyfin、Plex 这些主流,先是自己捣鼓了自己的 Windows SMB。在家里自然是靠着 192.168.xxx.xxx 秒成功,于是自然就想,学校如此广阔,如果能够自如地在校园网内远程访问,岂不美哉?

从 10 号开始我就开始陆陆续续地攻克校园网,iPhone 究竟是为何连接不上 smb:\\,急得抓耳挠腮。昨天搜索到一篇知乎的提问,终于有了眉头,于是连夜添加提醒事项,告诉自己明日一定解决。于是今天和 ChatGPT 搏斗一下午,和浩如烟海的 PowerShell 命令扭打在一起,犹如周处大战白额猛兽、长桥下蛟,终于得出了结论。

我让 ChatGPT 直接帮我形成日志,摘录这个下午的路途。

简介出自玄蝶既白的蔡文姬设计引文,总化自其《胡笳十八拍》。

如下:


一次从 Windows SMB、Windows 防火墙、TCP 抓包到校园网环境对比测试的联合排查记录

简介

本文记录了一次 Windows 共享文件夹无法通过校园网 SMB 访问的排查过程。通过检查 SMB 服务、TCP 445、防火墙规则、网络接口,并结合普通端口测试、pktmon 抓包和个人热点对照实验,逐步排除 Windows 与客户端自身问题,最终将故障范围定位到校园网络环境对 TCP 445 / SMB 连接的处理。


一、问题背景

我的目标是:

在校园网环境下,通过 iPhone / iPad 的「文件」App,使用 SMB 访问 Windows 10 电脑上的共享文件夹。

Windows 电脑和 iPhone / iPad 位于同一个校园网络环境中。

最初的现象是:

  • Windows 自己访问 SMB:正常
  • Windows 上 SMB 服务正常运行
  • iPhone 可以访问 Windows 上的普通 HTTP 服务
  • 但是 iPhone 通过 smb://[Windows-IP] 无法连接
  • iPhone「文件」App 提示类似 “Socket 未连接”

因此最初无法确定问题究竟出在哪里:

  1. Windows SMB 服务是否正常?
  2. Windows 防火墙是否阻止了 445?
  3. Windows 是否真的监听了 TCP 445?
  4. 校园网络是否限制了 TCP 445?
  5. iPhone 的 SMB 客户端是否存在问题?
  6. Windows 上是否存在第三方网络过滤软件?

于是开始逐层排查。


二、第一步:确认 Windows SMB 服务

首先检查 Windows 的 Server 服务:

Get-Service LanmanServer

结果:

Status   Name          DisplayName
Running  LanmanServer  Server

说明:

Windows 的 SMB Server 服务正在运行。

因此可以排除“SMB 服务根本没有启动”的可能。


三、第二步:确认 TCP 445 正在监听

执行:

Get-NetTCPConnection -LocalPort 445 -State Listen

结果:

LocalAddress LocalPort RemoteAddress RemotePort State
------------ --------- ------------- ----------- --------
::           445       ::            0           Listen

说明 Windows 确实在监听 TCP 445。

这里的:

::

代表 IPv6 的通配监听地址。

同时 Windows 后续的 IPv4 测试证明,这个监听也能够处理当前 IPv4 路径。

因此可以排除:

“Windows 根本没有打开 445 端口。”


四、第三步:Windows 自己测试 TCP 445

使用:

Test-NetConnection 127.0.0.1 -Port 445

结果:

TcpTestSucceeded : True

再测试 IPv6:

Test-NetConnection ::1 -Port 445

结果同样成功。

随后使用 Windows 自己的校园网 IPv4 地址进行测试:

Test-NetConnection [Windows-IPv4] -Port 445

结果:

TcpTestSucceeded : True

后续使用详细模式再次确认:

Test-NetConnection [Windows-IPv4] -Port 445 -InformationLevel Detailed

关键结果:

InterfaceAlias          : [有线网络接口]
SourceAddress           : [Windows-IPv4]
RemoteAddress           : [Windows-IPv4]
RemotePort              : 445
TcpTestSucceeded        : True

这说明:

Windows 使用自己的校园网 IPv4 地址访问 TCP 445,可以成功建立连接。

因此 Windows 自身的 IPv4 网络栈和 TCP 445 并没有明显异常。


五、第四步:检查 Windows 防火墙

因为 SMB 使用 TCP 445,所以检查 Windows 防火墙中与 445 有关的规则。

执行:

Get-NetFirewallPortFilter |
    Where-Object { $_.LocalPort -eq 445 } |
    Get-NetFirewallRule |
    Select-Object DisplayName, Enabled, Profile, Direction, Action

其中关键规则为:

文件和打印机共享(SMB-In)
Enabled   : True
Profile   : Private
Direction : Inbound
Action    : Allow

进一步确认:

Get-NetFirewallRule -DisplayName "文件和打印机共享(SMB-In)" |
    Where-Object Enabled -eq True |
    Get-NetFirewallPortFilter |
    Format-Table Protocol, LocalPort, RemotePort -AutoSize

结果:

Protocol LocalPort RemotePort
-------- --------- ----------
TCP      445       Any

说明:

Windows 防火墙明确存在一条允许 TCP 445 入站的 SMB 规则。


六、第五步:临时完全放行 TCP 445

为了进一步排除 Windows 防火墙因素,临时创建一条允许所有配置文件访问 TCP 445 的规则:

New-NetFirewallRule `
    -DisplayName "TEMP SMB 445 TEST" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 445 `
    -Action Allow `
    -Profile Any

规则创建成功。

但是:

即使 Windows 防火墙被明确允许 TCP 445,iPhone 仍然无法通过校园网连接 SMB。

因此:

Windows 防火墙成为主要嫌疑的可能性进一步降低。

测试完成后,这条临时规则应该删除:

Remove-NetFirewallRule -DisplayName "TEMP SMB 445 TEST"

七、第六步:使用普通 HTTP 服务测试网络连通性

为了证明问题不是“iPhone 根本无法访问 Windows”,我们使用 Python 临时启动 HTTP 服务。

例如:

python -m http.server 8080 --bind 0.0.0.0

使用:

Get-NetTCPConnection -LocalPort 8080 -State Listen

确认 HTTP 服务正在监听。

之后进一步使用:

Test-NetConnection [Windows-IPv4] -Port 8080

确认 Windows 自身访问该端口成功。

最关键的是:

iPhone Safari 最终能够成功打开 http://[Windows-IPv4]:8080。

因此:

iPhone 可以通过校园网络访问 Windows 的普通 TCP 服务。

这排除了“校园网络完全无法访问这台 Windows”的可能。


八、第七步:使用更多普通端口进行对比

为了进一步研究校园网络是否存在端口过滤,我们进行了多个端口实验。

TCP 端口测试服务iPhone 访问
445SMB❌
4444HTTP❌
4450HTTP✅
4466HTTP✅
8445HTTP✅

这个结果非常重要。

它说明:

不能简单地得出“校园网禁止所有 445 附近的端口”。

因为其他高位端口可以正常访问。

因此我们不能仅仅根据端口号附近的范围来判断校园网络策略。


九、第八步:使用 pktmon 抓包

为了不再依靠猜测,而是直接观察 TCP 数据包,使用 Windows 自带的 pktmon 进行抓包。

首先:

pktmon filter remove
pktmon filter add -p 445
pktmon start --etw -m real-time

然后使用 iPhone 尝试:

smb://[Windows-IPv4]

十、第一次抓包:最初的判断

第一次抓包中可以看到:

[客户端内网地址]:[临时端口] > [Windows-IPv4]:445
Flags [S]

也就是:

iPhone 发出的 TCP 连接请求确实到达了 Windows。

当时没有明显看到 Windows 返回的 SYN-ACK,因此一度怀疑:

Windows 本地防火墙可能仍然阻止了连接。

于是进行了前面的“临时完全允许 TCP 445”实验。

但即使放行后问题仍然存在。

因此需要再次抓包。


十一、第二次抓包:真正的关键证据

第二次抓包是在临时防火墙允许规则存在的情况下进行的。

这次抓到了完整的关键过程。

1. 客户端发出 SYN

抓包中出现:

[客户端内网地址]:[临时端口] > [Windows-IPv4]:445
Flags [S]

这表示:

iPhone 正在请求建立 TCP 445 连接。

而且这个 SYN 确实到达了 Windows。


2. Windows 返回 SYN-ACK

随后抓包出现:

[Windows-IPv4]:445 > [客户端内网地址]:[临时端口]
Flags [S.]

也就是:

Windows 收到了 iPhone 的 SYN,并且向 iPhone 返回了 SYN-ACK。

这是整个调查中最关键的发现之一。

它证明:

Windows 并没有单方面拒绝 iPhone 的 TCP 445 请求。

Windows 确实在响应。


3. 但是客户端没有返回 ACK

正常 TCP 三次握手应该是:

客户端                  Windows

   SYN -------------------->

       <---------------- SYN-ACK

   ACK -------------------->

        TCP 连接建立

而实际情况是:

客户端                  Windows

   SYN -------------------->

       <---------------- SYN-ACK

   ACK  - - - - - - - - - ->  ❌ 没有出现

Windows 又多次发送 SYN-ACK:

Windows → 客户端
Flags [S.]

但是仍然没有看到客户端返回 ACK。

最后 Windows 发出了:

Windows → 客户端
Flags [R]

即 TCP RST。

所以实际过程可以概括为:

SYN       ✅
SYN-ACK   ✅
ACK       ❌
RST       ✅

十二、这改变了我们的判断

到这里,我们已经可以排除很多早期猜测。

已经基本排除

1. SMB 服务没有启动

不是。

LanmanServer = Running

2. Windows 没有监听 445

不是。

TCP 445 = Listen

3. Windows 自己不能使用 445

不是。

Windows → 自己的 445 = True

4. 普通 Windows 防火墙规则阻止

可能性已经很低。

因为:

  • SMB-In 已经允许 TCP 445
  • 又临时增加了 Profile Any 的允许规则
  • 问题仍然存在

5. iPhone 完全无法访问 Windows

不是。

因为多个其他 TCP 端口曾经成功访问。


十三、第九步:检查 Windows 网络接口

为了排除网卡本身的问题,检查:

Get-NetIPInterface -AddressFamily IPv4 |
    Format-Table ifIndex,InterfaceAlias,ConnectionState,NlMtu,InterfaceMetric

结果显示当前使用的:

[有线网络接口]    Connected    1500

实际网络连接使用的是:

Windows 当前启用的有线网络接口。

其他无线网络接口处于未连接状态。

因此可以确认:

当前校园网连接使用的是有线网络路径。


十四、第十步:检查第三方网络组件

由于系统中存在第三方网络优化相关组件,因此一度考虑是否存在第三方软件干扰 SMB。

进一步检查当前有线网卡的网络组件绑定:

Get-NetAdapterBinding -Name "[有线网络接口]" |
    Format-Table DisplayName,ComponentID,Enabled

可以看到常见的:

Internet 协议版本 4 (TCP/IPv4)
Microsoft 网络的文件和打印机共享
Microsoft 网络客户端
Internet 协议版本 6 (TCP/IPv6)
QoS 数据包计划程序

但没有发现明显的第三方网络过滤组件绑定到当前使用的有线网卡。

因此:

没有足够证据把问题归因于 Windows 上的第三方网络优化软件。

最终也没有继续修改或强制停止相关服务。


十五、第十一步:决定性实验——脱离校园网

经过前面的调查,仍然存在一个重要问题:

到底是校园网络的问题,还是 iPhone / Windows 在 SMB 上存在某种兼容性问题?

因此进行了最有决定性的对照实验。

实验环境

让:

  • Windows 电脑
  • iPad

同时连接到:

iPhone 的个人热点

这样就完全绕开了校园网络。

网络结构变成:

iPad
 │
 ▼
iPhone 热点
 │
 ▼
Windows

然后使用 Windows 在热点网络中获得的新 IP 地址,通过 SMB 访问。

结果:

SMB 秒成功。


十六、最终结论

这个实验是整个调查中最重要的证据。

因为在校园网环境:

iPhone → Windows SMB 445
❌

而在 iPhone 个人热点环境:

iPad → iPhone 热点 → Windows SMB 445
✅ 秒成功

因此可以非常有把握地得出:

Windows SMB 服务本身没有问题,iPhone/iPad 的 SMB 客户端也没有问题。问题只出现在校园网这一网络环境中。

结合之前的 pktmon:

校园网环境:

iPhone → Windows
SYN       ✅

Windows → iPhone
SYN-ACK   ✅

iPhone → Windows
ACK       ❌

Windows
RST       ✅

以及:

个人热点环境:

iPad → Windows SMB
TCP 三次握手正常
SMB 登录正常
连接秒成功

因此目前最合理的结论是:

校园网对 TCP 445 / SMB 连接存在网络层面的限制、过滤或其他特殊处理。

严格来说,仅凭本次实验还无法知道校园网设备究竟是:

  • 主动丢弃 TCP 445;
  • 对 TCP 445 的返回流量进行处理;
  • 使用某种安全策略干扰 SMB;
  • 或存在其他网络路径上的特殊规则。

因此不应该进一步声称“已经知道校园网设备具体是哪一台、具体哪条 ACL 在拦截”。

我们能够确定的是:

问题具有明显的“校园网相关性”,而不是 Windows SMB 或 iPad/iPhone SMB 客户端自身的问题。


十七、整个调查的逻辑链

整个排查实际上是逐层缩小范围:

最初:
iPhone 无法 SMB → 原因未知
        │
        ▼
检查 LanmanServer
        │
        └── Running ✅
        │
        ▼
检查 TCP 445
        │
        └── Listen ✅
        │
        ▼
Windows 自测 445
        │
        └── Success ✅
        │
        ▼
检查 Windows 防火墙
        │
        └── SMB-In Allow ✅
        │
        ▼
临时完全放行 445
        │
        └── iPhone 仍失败 ❌
        │
        ▼
普通 HTTP 端口测试
        │
        ├── 其他端口 A ✅
        ├── 其他端口 B ✅
        └── 其他端口 C ✅
        │
        ▼
证明 iPhone 能访问 Windows
        │
        ▼
pktmon 抓包
        │
        ├── SYN 到达 Windows ✅
        ├── SYN-ACK 发出 Windows ✅
        └── ACK 没有返回 ❌
        │
        ▼
检查网卡 / 第三方过滤组件
        │
        └── 未发现明显异常
        │
        ▼
换到 iPhone 个人热点
        │
        └── iPad → Windows SMB 秒成功 ✅
        │
        ▼
最终结论:
问题与校园网环境高度相关

十八、这次调查最重要的几个知识点

1. “端口开放”不等于“应用一定能连接”

例如:

TCP 445 Listen

只能说明:

Windows 有程序在等待 TCP 445 连接。

真正建立连接还需要 TCP 三次握手:

SYN
SYN-ACK
ACK

2. 抓包比单纯测试端口更加有价值

Test-NetConnection 告诉我们:

True / False

但是 pktmon 能告诉我们:

SYN 到了没有?
SYN-ACK 发了没有?
ACK 回来了没有?
RST 有没有出现?

这让我们最终能够知道:

连接究竟在哪一个阶段失败。


3. “Windows 防火墙允许 445”不能证明网络一定允许 445

Windows 本地防火墙只是:

Windows 本机

的一层安全机制。

数据还要经过:

iPhone
 ↓
无线网络
 ↓
校园交换/路由设备
 ↓
校园网络安全设备
 ↓
Windows 网卡
 ↓
Windows 防火墙
 ↓
SMB

因此即使:

Windows Firewall = Allow

网络中的其他设备仍然可能对流量进行处理。


4. 对照实验非常重要

本次最终能够定位问题,很大程度上依靠了:

校园网环境
    ❌ SMB

iPhone 热点环境
    ✅ SMB

这就是一个非常典型的对照实验。

我们没有修改 Windows SMB 配置,只改变了:

网络环境

结果 SMB 从失败变成成功。

这使得“校园网络环境导致问题”的解释具有很强的证据支持。


十九、最终建议

既然已经确认 Windows SMB 和 iPhone/iPad SMB 本身正常,就没有必要继续修改:

  • Windows SMB 配置
  • Windows 注册表
  • Windows 防火墙
  • 网卡 IPv4 配置
  • SMB 协议版本

更合理的解决方向是:

方案 A:VPN + SMB

例如:

iPhone / iPad
      │
      │ VPN
      ▼
   Windows
      │
      ▼
   SMB 445

这样可以建立一条独立的私有网络。

方案 B:使用其他文件传输协议

例如 HTTP 文件服务器、SFTP 等,避开校园网对 SMB/445 的限制。

方案 C:继续使用 LocalSend

如果需求主要是:

iPhone ↔ Windows 临时互传文件

那么 LocalSend 是最简单的方案。


二十、结语

这次排查并不是一开始就知道“校园网封了 445”,而是通过一系列实验逐步排除其他可能。

最关键的证据分别来自:

  1. Windows SMB 服务正常
  2. TCP 445 正在监听
  3. Windows 自己连接 445 成功
  4. Windows 防火墙明确允许 445
  5. 临时完全放行 445 后仍然失败
  6. iPhone 可以访问多个其他 TCP 端口
  7. pktmon 证明 SYN 到达、SYN-ACK 发出,但 ACK 没回来
  8. 脱离校园网后,iPad → Windows SMB 秒成功

最终,我们把一个最初很模糊的:

“iPhone 为什么连不上 Windows SMB?”

逐步缩小成:

Windows SMB 正常;iPhone/iPad SMB 客户端正常;问题高度集中在校园网环境对 TCP 445/SMB 连接的处理上。

这就是本次“探索校园网 TCP 445(SMB)端口”调查的完整过程。

← 返回首页