1. 文件占用
	1.1 resmon
	1.2 openfiles
	1.3 第3方工具
2. 端口占用
	2.1 端口列表链接
	2.2 dynamicportrange 动态端口范围
	2.3 excludedportrange 排除端口范围
	2.4 显示所有侦听端口及进程ID
	2.5 查看单个端口的PID
3. 关闭端口或服务
	3.1 RPC-135
	3.2 NetBIOS-139
	3.3 SMB-445
	3.4 5985, 5986
4. 文件共享-web
	4.1 windows, linux
	4.2 macOS
5. 显示所有侦听端口及进程ID
6. 命令帮助
	6.1 netstat -?
	6.2 netcfg /?
	6.3 netsh ?

1. 文件占用

1.1 resmon

使用系统的 [资源监视器] (Resource Monitor), 文件位置如下: 
C:\Windows\System32\resmon.exe
Resmon的3种打开方式: 
  • 若经常使用可以将以下文件 [发送到:桌面快捷方式],双击打开。
  • 直接在CMD命令行里输入命令名 (resmon) 打开。
  • [任务管理器]的[性能]页签,右上角[...]菜单: [资源监视器], 打开。
打开资源监视器后,选择CPU页签,在 [关联的句柄] 搜索要查看的文件名。 
下方列表会显示占用该文件的进程名称及ID等信息。

1.2 openfiles

 > openfiles /?
OPENFILES /parameter [arguments]
描述:允许管理员列出系统上已打开的文件和文件夹或与其断开连接。
参数列表:
    /Disconnect      中断至少一个打开的文件的连接。
    /Query           显示所有从本地或从共享文件夹打开的文件。
    /Local           启用 / 禁用本地打开文件的显示。
    /?               显示此帮助消息。
示例:
    OPENFILES /Disconnect /?
    OPENFILES /Query /?
    OPENFILES /Local /?
 
 > openfiles /local
信息: 系统全局标志“维护对象列表”目前已禁用。
 
 > openfiles /local on
成功: 已启用系统全局标志“维护对象列表”。
      系统重新启动后这才会生效。
 
 > openfiles
信息: 需要启动系统全局标志“维护对象列表”才能查看本地打开的文件。
            请参阅 Openfiles /? 以获得详细信息。
通过本地共享点远程打开的文件:
---------------------------------------------
信息: 没有找到打开的共享文件。
 
 > openfiles
本地打开的文件:
 … 这里省略 详细列表 [List … 500行+ ] … 
通过本地共享点远程打开的文件:
信息: 没有找到打开的共享文件。
 
上面省略的 详细列表 [List … 500行+ ] 概述:
列表字段:ID, 过程名称, 打开文件(路径\可执行)
以上3个字段的列表共计511行,统计有进程名称27个,打开的文件或文件夹262个,进程ID有433个。
  • 一些文件夹,mui多语言用户界面,db数据库,ttf字体等文件会被多个进程使用。
  • 一些可执行程序,会打开多个文件夹及文件。
小结:
  • 上面的 resmon 根据输入的 单一文件夹或文件名 列出使用它的进程及ID。
  • 这里的 openfiles 一次性列出当前 所有被打开的文件列表 及相关进程及ID。

1.3 第3方工具

下面的方法在网上找到的,还没试过,毕竟上面2种方法已经很方便了。
 
下载并安装 Sysinternals Suite.
Handle <filename>
 
下载并安装 Unlocker.
右键点击文件或文件夹,选择 Unlocker。

2. 端口占用

2.1 端口列表链接

2.2 dynamicportrange 动态端口范围

显示动态端口范围
 > netsh int ip show dynamicportrange tcp
协议 tcp 动态端口范围(新安装的系统)
启动端口        : 49152
端口数          : 16384
 
协议 tcp 动态端口范围(系统更新后)
启动端口        : 1024
端口数          : 64511
 
更改动态端口分配所使用端口的范围。
 > netsh int ip set dynamicportrange ?
 > netsh int ip set dynamicportrange protocol=tcp startport=10000 numberofports=20000

2.3 excludedportrange 排除端口范围

显示所有排除的端口范围
 > netsh int ip show excludedportrange tcp
协议 tcp 端口排除范围
开始端口    结束端口
* - 管理的端口排除。
 
为连续的端口块添加排除。
 > netsh int ip add excludedportrange ?
 > netsh int ip add excludedportrange protocol=tcp startport=50000 numberofports=20
 
为连续的端口块删除排除
 > netsh int ip delete excludedportrange ?
 > netsh int ip delete excludedportrange protocol=tcp startport=50000 numberofports=20
startport 和 numberofports 应该与以前创建的排除完全相同。可通过 show 查看。

2.4 显示所有侦听端口及进程ID

 > netstat -ano
活动连接
  协议  本地地址          外部地址        状态           PID
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       4844
  TCP    [::1]:49664            [::]:0                 LISTENING       3788
  UDP    0.0.0.0:5050           *:*                                    4844
  UDP    127.0.0.1:1900         *:*                                    8608
  UDP    127.0.0.1:49664        127.0.0.1:49664                        3380
  UDP    127.0.0.1:49666        *:*                                    8608
  UDP    [::1]:1900             *:*                                    8608
  UDP    [::1]:49665            *:*                                    8608

2.5 查看单个端口的PID

查看被占用端口对应的 PID
 > netstat -aon | findstr 1900
  UDP    127.0.0.1:1900         *:*                                    8608
  UDP    [::1]:1900             *:*                                    8608
 
查看指定 PID 的进程名
 > tasklist | findstr 8608
svchost.exe                   8608 Services                   0     10,044 K
 
注,
  • 在 [任务管理器] 的 [详细信息] 页签,使用PID排序,很容易找到具体进程。
  • 在 [任务管理器] 的 [服务] 页签,使用PID排序,也很容易找到具体进程。 
    • 这里出现的PID,都是系统服务进程。 
    • 这里没有的PID则是第3方程序,例如Chrome浏览器,soffice,LibreOffice文档软件等。

3. 关闭端口或服务

3.1 RPC-135

RpcSs (Remote Procedure Call (RPC))
C:\WINDOWS\system32\svchost.exe -k rpcss -p
RPCSS 服务是 COM 和 DCOM 服务器的服务控制管理器。
它执行 COM 和 DCOM 服务器的对象激活请求、对象导出程序解析和分布式垃圾回收。
如果此服务被停用或禁用,则使用 COM 或 DCOM 的程序将无法正常工作。
 
新装的Windows11,这个服务无法关闭,也不能禁用,不知道是不是因为没有激活,部分操作被限制。
以下是网上找到的关闭方法,不知道是否有更好的方法。
 
win+R 运行: dcomcnfg 打开 组件服务
选择我的电脑,右键属性,默认属性页签,取消勾选(在此计算机上启用分布式COM)
默认协议页签,移除DCOM里的协议。
 
win+R 运行: regedit 打开 注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\internet
Rpc下,新建项:internet
重启即可
注: 这里注册表添加项,不知道有什么用... 

3.2 NetBIOS-139

  1. 开始 → 搜索 → [控制面板]
  2. [控制面板] → [网络和共享中心] → [更改适配器设置] 打开 [网络连接]
  3. [网络连接] 这里列出系统的网卡,在所有会使用到的网卡里关闭:有线以太网卡,无线网卡,USB网卡等。
    1. 右键具体 [网卡] → [属性] 打开 具体的 [网卡属性]
    2. [网卡属性] → 选中 [Internet协议版本4 (TCP/IPv4)] → 点击 [属性] 打开 [Internet协议版本4 (TCP/IPv4) 属性]
    3. [Internet协议版本4 (TCP/IPv4) 属性] → [高级] 打开 [高级 TCP/IP 设置]
    4. [高级 TCP/IP 设置] → [WINS]页签 → 选中 [禁用 TCP/IP 上的 NetBIOS]

3.3 SMB-445

Microsoft-DS (Microsoft Directory Services) SMB (Server Message Block) 文件共享服务
win+R 运行: regedit 打开 注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters
新建QWORD(64位)值 (SMBDericeEnabled)
注: 这里注册表添加值,不知道有什么用... 
 
关闭Server服务
几十年来,我都是直接禁用Server服务。  这个服务默认启用,结果是开放所有磁盘的$默认共享,一丝不挂的隐藏共享... 

3.4 5985, 5986

win+R 运行: firewall.cpl 打开 防火墙
防火墙 高级设置 
通过端口 找出对应的策略,阻止即可。
Windows 远程管理(HTTP-In)

4. 文件共享-web

通过上面的操作,系统安全性增加了,但也失去了局域网内文件共享的便利性。
下面介绍更安全的web文件分享,这种方式使用web页面分享文件,始终是单向且只读的。
有非常多的软件提供web服务功能,感觉python附带的最方便。随时用随时开。
 
只需要安装Python最新版,然后在需要共享的目录下执行下方的命令即可。
而局域网内需要获取文件的用户,只需要使用浏览器输入上面分享主机的IP地址及端口号即可浏览文件,选择下载。

4.1 windows, linux

python -m http.server 
python -m http.server 9000 

4.2 macOS

python3 -m http.server 9000 
Localhost:9000
alias http-server="python3 -m http.server" 
http-server 8080 

5. 显示所有侦听端口及进程ID

关闭了以上端口,结合任务管理器,查看侦听端口及进程信息。
 > netstat -ano 列出进程列表及PID,再通过PID找到相应的服务名称或程序名称
协议 本地地址 外部地址 状态 PID 服务名 (显示名) C:\WINDOWS\system32\svchost.exe
UDP 0.0.0.0:5355 *:*   2280 Dnscache
(DNS Client)
-k NetworkService -p
UDP [::]:5355 *:*   2280
UDP 127.0.0.1:49664 127.0.0.1:49664   3464 Iphlpsvc (IP Helper) -k NetSvcs -p
TCP 192.168.10.10:50264 4.145.79.80:443 ESTABLISHED 3660 WpnService
Windows 推送通知系统服务
-k NetSvcs -p
TCP 192.168.10.10:50381 4.145.79.80:443 ESTABLISHED 3660
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 5360 CDPSvc
连接设备平台服务
-k LocalService -p
UDP 0.0.0.0:5050 *:*   5360
UDP 127.0.0.1:1900 *:*   5520 SSDPSRV
SSDP Discovery
-k LocalServiceAndNoImpersonation -p
UDP 127.0.0.1:49560 *:*   5520
UDP [::1]:1900 *:*   5520
UDP [::1]:49559 *:*   5520
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 10400 DoSvc
Delivery Optimization
-k NetworkService -p
TCP [::]:7680 [::]:0 LISTENING 10400
TCP [::1]:49664 [::]:0 LISTENING 3492 jhi_service C:\WINDOWS\System32\DriverStore\FileRepository\
Dal.inf_amd64_af50fdb80983f7bc\jhi_service.exe
TCP 127.0.0.1:49836 127.0.0.1:49837 ESTABLISHED 9940 firefox.exe
浏览器
这是上面:[jhi_service] 服务的描述
Intel(R) Dynamic Application Loader Host Interface Service.
Allows applications to access the local Intel (R) DAL
英特尔(R) 动态应用程序加载器主机接口服务。
允许应用程序访问本地英特尔(R) DAL
TCP 127.0.0.1:49837 127.0.0.1:49836 ESTABLISHED 9940
TCP 127.0.0.1:49838 127.0.0.1:49839 ESTABLISHED 10900
TCP 127.0.0.1:49839 127.0.0.1:49838 ESTABLISHED 10900
 

6. 命令帮助

6.1 netstat -?

显示协议统计信息和当前 TCP/IP 网络连接。
NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]
 -a  显示所有连接和侦听端口。
 -b  显示创建每个连接所涉及的可执行文件或侦听端口。  
在某些情况下,已知的可执行文件托管多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列。 
在这种情况下,可执行文件名称位于 [] 底部,顶部是它调用的组件,此类推,直到达到 TCP/IP。 
依请注意,此选项可能很耗时,并且会失败,除非你有足够的权限。
 -c  显示按当前使用的 TCP 或 UDP 端口数排序的进程列表。
 -d  显示每个连接分配的 DSCP 值。
 -d  显示以太网统计信息。这可以与 -s 选项结合使用。
 -f  显示外部的完全限定的域名 (FQDN) 地址。
 -i  显示 TCP 连接在其当前状态下所用的时间。
 -n  以数字形式显示地址和端口号。
 -o  显示与每个连接关联的拥有进程 ID。
 -p [*]  显示 proto 指定的协议的连接;proto 可以是以下任一项: TCP、UDP、TCPv6 或 UDPv6。 
如果与 -s 选项一起使用以显示每个协议统计信息,则 proto 可以是以下任一项: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
 -q  显示所有连接、侦听端口和绑定非侦听 TCP 端口。 绑定的非侦听端口可能已与或未与活动连接相关联。
 -r  显示路由表。
 -s  显示每个协议的统计信息。(-p 选项可用于指定默认值的子集) 
默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。
 -t  显示当前的连接卸载状态。
 -x  显示 NetworkDirect 连接、侦听器和共享终结点。
 -y  显示所有连接的 TCP 连接模板。 无法与其他选项结合使用。
间隔  重播所选统计信息、每次显示之间的暂停间隔秒数。 
按 CTRL+C 停止重新显示统计信息。 
如果省略,netstat 将打印当前配置信息一次。
 

6.2 netcfg /?

netcfg [-v] [-winpe] [-l <full-path-to-component-INF>] -c <p|s|c> -i <comp-id>
 
-winpe 为 Windows 预安装环境安装 TCP/IP、NetBIOS和 Microsoft 客户端
 -l     提供 INF 的位置
 -c     提供要安装的组件的类(p 代表协议、s 代表服务、c 代表客户端)
 -i     提供组件 ID
参数必须按照所示顺序传递。
示例:
 > netcfg -l c:\oemdir\myprot.inf -c p -i myprot
使用 c:\oemdir\myprot.inf 安装协议 "myprot"
 
 > netcfg -c s -i MS_Server
安装服务 "MS_Server"
 
 > netcfg -v -winpe
为 Windows 预安装环境安装 TCP/IP、NetBIOS和 Microsoft 客户端
 
netcfg [-v] -q <comp-id>
 > netcfg -q MS_IPX
显示是否安装了组件 "MS_IPX"
 
netcfg [-v] -u <comp-id>
 > netcfg -u MS_IPX
卸载组件 "MS_IPX"
 
netcfg [-v] -s <a|n>
 -s  提供要显示的组件的类型(a 代表适配器,n 代表网络组件)
 > netcfg -s n
显示所有已安装的网络组件
 
netcfg [-v] -b <comp-id>
 > netcfg -b ms_tcpip
显示包含 "MS_TCPIP" 的绑定路径
 
netcfg [-v] -m
 > netcfg -m
将绑定映射输出到当前目录中的 NetworkBindingMap.txt。 -v 还将显示映射到控制台的绑定映射。
 
 > netcfg -d
在所有网络设备上执行清理。这需要重新启动。
 
 > netcfg -x
在网络设备上执行清理,并跳过没有物理对象名称的对象。这需要重新启动。
 
一般说明:
 -v    以详细模式运行
 -?    显示此帮助信息
 

6.3 netsh ?

用法: C:\WINDOWS\system32\netsh.exe [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *] [Command | -f ScriptFile]
下列指令有效: 此上下文中的命令:
advfirewall   更改到 `netsh advfirewall' 上下文。
branchcache   更改到 `netsh branchcache' 上下文。
bridge        更改到 `netsh bridge' 上下文。
dhcpclient    更改到 `netsh dhcpclient' 上下文。
dnsclient     更改到 `netsh dnsclient' 上下文。
firewall      更改到 `netsh firewall' 上下文。
http          更改到 `netsh http' 上下文。
interface     更改到 `netsh interface' 上下文。
ipsec         更改到 `netsh ipsec' 上下文。
lan           更改到 `netsh lan' 上下文。
mbn           更改到 `netsh mbn' 上下文。
namespace     更改到 `netsh namespace' 上下文。
netio         更改到 `netsh netio' 上下文。
nlm           更改到 `netsh nlm' 上下文。
ras           更改到 `netsh ras' 上下文。
rpc           更改到 `netsh rpc' 上下文。
trace         更改到 `netsh trace' 上下文。
wcn           更改到 `netsh wcn' 上下文。
wfp           更改到 `netsh wfp' 上下文。
winhttp       更改到 `netsh winhttp' 上下文。
winsock       更改到 `netsh winsock' 上下文。
wlan          更改到 `netsh wlan' 上下文。
set         更新配置设置。
add         在项目列表上添加一个配置项目。
delete      在项目列表上删除一个配置项目。
exec        运行一个脚本文件。
dump        显示一个配置脚本。
show        显示信息。
help        显示命令列表。
?           显示命令列表。
下列的子上下文可用:
 advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ipsec lan mbn namespace netio nlm ras rpc trace wcn wfp winhttp winsock wlan
若需要命令的更多帮助信息,请键入命令,接着是空格,后面跟?。