PandHedge

Bash命令

2025-09-13
PandHedge

常用指令

清屏:

cls

查找 “占用指定端口的进程”

netstat -ano | findstr ":8080"  # Windows用findstr筛选;Linux/macOS用grep ":8080"

查看系统网络连接状态

netstat 的本质是“读取系统内核的TCP/IP协议栈数据”,将抽象的网络状态以人类可读的格式输出,主要解决以下场景需求:

  1. 查看当前系统的所有网络连接(包括 TCP/UDP 连接,区分 “本地端” 和 “远程端”);
  2. 识别正在监听的端口(即程序等待外部连接的端口,如 Web 服务的 80/443 端口);
  3. 查看路由表信息(确认数据包的转发路径是否正确);
  4. 统计网络接口流量(如网卡的发送 / 接收字节数、错误包数量);
  5. 关联网络连接与进程(找到占用某个端口的具体进程,排查 “端口被占用” 问题)。
常用参数详解

netstat 的功能通过 “参数组合” 实现,不同平台(Windows/Linux)部分参数存在差异,以下按 “功能分类” 整理最常用的参数:

参数 支持平台 核心功能描述
-a 全平台 显示所有网络连接和监听端口(包括处于 LISTENING 状态的监听端口,默认不显示)
-n 全平台 以 “数字格式” 显示地址和端口(不解析主机名、域名、服务名,速度更快)
-o 全平台 显示每个连接对应的进程 ID(PID)(关键参数,用于定位占用端口的进程)
-p 协议 全平台 指定协议类型,如 -p tcp 只显示 TCP 连接,-p udp 只显示 UDP 连接;Windows 下支持 -p tcpv6
-r 全平台 显示路由表(包括默认网关、目标网络、子网掩码、接口等)
-e 全平台 显示网络接口统计信息(如每个网卡的发送 / 接收字节数、丢弃包、错误包数量)
-s 全平台 显示协议统计信息(按 TCP、UDP、ICMP 等协议分类,统计连接建立 / 关闭次数、错误数等)
-b 仅 Windows 显示每个连接对应的进程名及可执行文件路径(需管理员权限,定位进程更直观)
-t 仅 Linux/macOS 仅显示 TCP 连接(等同于 Windows 的 -p tcp
-u 仅 Linux/macOS 仅显示 UDP 连接(等同于 Windows 的 -p udp
-l 仅 Linux/macOS 仅显示处于监听状态(LISTENING) 的端口(等同于 Windows -a 筛选 LISTENING)

##

查看保留端口范围

netsh interface ipv4 show excludedportrange protocol=tcp

解决方案:

#1 方法一
net stop winnat
# 此时启动您的程序(可绑定8964)
net start winnat  # 恢复网络服务

#2 方法二 添加排除 
netsh int ipv4 add excludedportrange protocol=tcp startport=8964 numberofports=1

#3 方法三 修改排除范围 
	# 步骤1:停止网络服务
    net stop winnat
	# 步骤2:删除8900-8999的排除范围
    netsh int ipv4 delete excludedportrange protocol=tcp startport=8900 numberofports=100
	# 步骤3:添加两个排除范围,分别排除8900-8963和8965-8999
    netsh int ipv4 add excludedportrange protocol=tcp startport=8900 numberofports=64
    netsh int ipv4 add excludedportrange protocol=tcp startport=8965 numberofports=35
	# 步骤4:重新启动网络服务
    net start winnat
# 查看修改后的排除范围
netsh int ipv4 show excludedportrange protocol=tcp | sls -Context 2 "8900|8964"

介绍

Windows 的端口排除机制是系统为避免端口冲突、保障网络服务稳定运行而设计的 “端口预留 / 隔离” 规则,核心逻辑分为以下几部分:

一、机制的核心目的

系统会自动 “锁定” 一部分端口(或端口范围),阻止应用程序直接绑定,以此避免以下问题:

  • 动态端口耗尽:Windows 有默认的动态端口范围(如 49152–65535),用于临时出站连接。若应用占用动态端口范围内的端口,可能导致系统出站连接失败(“端口耗尽”)。
  • 服务冲突:Hyper-V、WSL、Docker 等虚拟化 / 网络服务会预留端口范围,防止与其他程序抢端口。
  • 权限限制:部分端口(如 80、443 等知名端口)需要管理员权限才能绑定,系统会自动拦截普通程序的绑定请求。
二、“手动排除” 的管理方法

若需让某端口 “绕过系统锁定”,可通过以下步骤干预:

  1. 查看当前排除的端口范围

以管理员身份运行命令提示符,执行:

netsh interface ipv4 show excludedportrange protocol=tcp

输出中会列出所有被系统 “锁定” 的 TCP 端口范围(如 12284–12383)。

  1. 停止 winnat 服务(临时释放端口)

部分排除规则由 winnat 服务维护,停止它可临时释放端口:

net stop winnat
  1. 手动 “预留” 端口(强制排除系统占用)

若需让某端口(如 12334)不被系统动态分配,可强制将其加入排除列表:

netsh int ipv4 add excludedportrange protocol=tcp startport=12334 numberofports=1

这条命令会让 12334 端口被系统 “预留”,不再自动分配给其他服务。

一条用于手动配置 Windows 端口排除规则的命令,作用是强制让系统 “预留” 指定的 TCP 端口,避免被系统服务或动态分配占用。

  1. 重启 winnat 服务(使设置生效)

操作完成后,需重启服务以恢复网络 NAT 功能:

net start winnat

###

手动排除与系统排除的差异:

举个实际场景:帮你理解差异

假设你需要用 12334 端口运行一个本地服务器,遇到两种情况:

  1. 情况 1:12334 被系统锁定(带 \*
    • 原因:可能是 Winnat 服务启动时,自动将 12334 纳入了它的排除范围(比如为了热点转发)。
    • 问题:你直接启动服务器会提示 “端口被占用”,且用 delete 命令删不掉(提示 “找不到元素”)。
    • 解决:必须先停 Winnat(net stop winnat),但停了之后电脑热点会用不了;且重启 Winnat 后,系统可能又锁定其他端口(甚至重新锁定 12334)。
  2. 情况 2:你手动添加 12334 为排除端口(无 \*
    • 操作:执行 netsh int ipv4 add excludedportrange protocol=tcp startport=12334 numberofports=1
    • 效果:即使 Winnat、Hyper-V 等服务重启,系统也会避开 12334 端口;你启动服务器时能直接绑定成功,且后续想释放端口时,用 delete 命令就能轻松删除,不影响系统服务。
三、核心总结
一句话区分 系统锁定端口:“系统要用来干活,不让你碰,你也难改”
  手动排除端口“你要用来干活,告诉系统别碰,你想改就改”

下一篇 C#

Comments

Content