ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

服务器端口查看全攻略:Windows和Linux查端口方法详解

服务器端口查看全攻略:Windows和Linux查端口方法详解 先说几句实际的。服务器端口怎么查这个事儿看起来基础但我在日常运维里发现问这个问题的人恰恰不是完全不懂而是“会一点但不够用”。比如只知道netstat -ano看到一堆状态不知道下一步干嘛或者Linux上敲完netstat提示命令不存在就卡住了。这文章我不打算只丢几个命令给你而是把“查端口”这件事拆开讲清楚什么时候该用哪个命令、怎么从输出判断服务到底有没有起来、端口被占用了怎么定位进程、还有像海康存储服务器这种带专用管理界面的设备管理端口又该去哪儿找。内容覆盖 Windows 和 Linux 两套系统通篇都是能直接上手的操作。1. 先搞清楚查端口到底是在查什么1.1 监听端口和连接端口别再傻傻分不清查端口之前得先弄明白一个最容易被忽略的概念你查的是“监听端口”还是“连接端口”。监听端口是服务器上某个服务主动打开的入口。比如 Nginx 监听 80 端口、MySQL 监听 3306 端口这类端口的状态通常是LISTENINGWindows或LISTENLinux。查这种端口你得到的是“这台服务器上到底有哪些服务在提供访问入口”这是排查服务有没有起来、配置有没有生效的关键。连接端口是客户端发起的网络连接占用的端口。比如你本机访问了一个网站系统会随机分配一个高位端口通常大于 1024去连服务器的 80 端口这时候你看到的是ESTABLISHED状态。查这种端口更多是为了看当前哪些连接还挂在服务器上、有没有异常外连或者某个外部 IP 在和你建立大量连接。很多新手一看netstat -ano输出里一大堆ESTABLISHED和TIME_WAIT就以为服务器“开了很多端口”其实是理解偏了——那些大多是瞬态连接不是服务监听端口。所以你查端口时先问自己一句我要确认服务监听还是排查连接1.2 什么场景下你需要去查端口根据我做运维和项目部署的经验查端口基本逃不出下面这几类场景服务部署完了确认进程是否正常监听在预期端口上。新服务端口起不来怀疑端口被别的进程占了。外网访问不到服务本地端口明明是通的想知道是不是防火墙或安全组的问题。想知道某个端口对应哪个进程好判断能不能动它。接手一台老服务器想盘点上面到底跑了哪些服务。不同场景适合的命令不完全一样。比如确认监听状态用netstat/ss就行但要定位占用端口的进程就得配合查 PID。我第一次给客户排查 Tomcat 冲突时就是靠netstat -ano定位 PID再顺着 PID 找到是一台旧服务还占着 8080杀完进程世界就清净了。所以下面我把 Windows 和 Linux 分开讲每个系统都给你一套完整打法。2. Windows 系统查端口从入门到够用2.1 netstat 命令最常用的端口查看方式Windows 上首选的还是系统自带的netstat不用装任何东西。我最常敲的是这一条netstat -ano | findstr 8080参数解释一下-a显示所有连接和监听端口-n用数字形式显示地址和端口号不做域名反解速度快很多-o显示对应的进程 PID。管道后面的findstr 8080是过滤只看包含 8080 的行。输出大概是这样的TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18232这行信息量很大从左到右分别是协议、本地地址、外部地址、状态、PID。0.0.0.0:8080表示服务监听在所有网卡地址的 8080 端口上外部访问没问题如果这里显示的是127.0.0.1:8080那就说明服务只允许本机访问外网自然连不上。状态LISTENING说明正在监听PID 是18232。接着查这个 PID 对应什么进程tasklist | findstr 18232出来结果类似java.exe 18232 Console 1 123,456 K一眼就能看出是 Java 程序占用了端口。如果tasklist查不到也可以用 PowerShell 命令Get-Process -Id 18232看得更详细。netstat唯一的缺点是输出耗时比较长连接多的时候会感觉卡一下。但作为系统自带工具胜在哪儿都能用是 Windows 查端口第一选择。2.2 PowerShell 的 Get-NetTCPConnection比 netstat 更好用如果你用的 Windows Server 版本比较新或者本地装了 PowerShell 3.0 以上我更推荐用Get-NetTCPConnection它相当于 netstat 的“高清增强版”按端口过滤更直接。查某个端口是否监听Get-NetTCPConnection -LocalPort 8080这个命令会直接以表格形式显示该端口的连接状态和 OwningProcess。要看得更爽可以加上Format-ListGet-NetTCPConnection -LocalPort 8080 | Format-List LocalAddress,LocalPort,State,OwningProcess然后通过 PID 定位进程Get-Process -Id 18232 | Select-Object Id,ProcessName,Path注意第三行的Path它会把进程的可执行文件完整路径也带出来。这个信息在排查“这个端口到底是谁占的”时非常有用比如看到路径指向某个 Tomcat 目录或者某个 Java 安装目录基本就能确定是哪个服务。我用 PowerShell 最多的时候是批量排查端口比如要确认 80、443、3306、6379 这几个端口各自的监听情况可以直接写Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -in 80,443,3306,6379}这种写法比 netstat 一个个findstr高效多了。你完全可以把它存成一个.ps1脚本以后直接运行。对比项netstatGet-NetTCPConnection适用范围Windows 全版本PowerShell 3.0按端口过滤需要 findstr直接 -LocalPort进程路径查看需要配合 tasklist配合 Get-Process批量查询不够方便筛选能力强性能一般优2.3 顺带解决一个热词问题Windows 服务器怎么开 631 端口如果你恰恰是在 Windows 服务器上遇到“IPP 631 端口”这个需求我多写一段。631 端口是 IPPInternet Printing Protocol互联网打印协议的服务端口主要用于网络打印服务。Windows 服务器要开放这个端口让局域网里的打印机客户端能通过 IPP 提交打印任务一般按下面几步走第一步确认打印相关服务在运行。按Win R输入services.msc找到Print Spooler确认状态是“正在运行”启动类型建议设为“自动”。没有打印服务做基础光开放端口是没有意义的。第二步启用 IPP 相关组件。在“服务器管理器”里选择“添加角色和功能”勾选“打印和文档服务”把“Internet 打印”和“打印服务器”都装上。装完之后系统会多出 IPP 相关的服务和监听端口。第三步放行防火墙端口。打开“高级安全 Windows Defender 防火墙”新建入站规则规则类型选“端口”协议选 TCP指定本地端口填631操作允许连接。这里我可以给个经验如果只是局域网打印建议在“配置文件”那一步只勾选“域”和“专用”不要开“公用”免得把打印端口暴露到不可信网络上安全第一。最后验证一下重新打开命令提示符执行netstat -ano | findstr 631看到LISTENING状态就基本成了。我自己帮一家公司调打印服务器时就是卡在防火墙规则没建对导致客户端一直报“找不到打印机”后来单独给 631 端口放行才解决。这一步很常见但也最容易漏。3. Linux 系统查端口netstat、ss、lsof 怎么选3.1 ss 命令现代系统首选在 Linux 上我优先推荐ss。它是iproute2包里的命令现在主流发行版默认都装了读取的信息直接来自内核速度快输出准已经是netstat的官方替代品。查所有监听端口ss -tlnp这四个字母拆开解释-t只看 TCP-l只看监听的端口-n用数字显示端口不反解域名-p显示进程信息。输出类似State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:((nginx,pid1234,fd8))注意看最后一列直接把进程名nginx和 PID1234带出来了不需要再额外查一次这是ss比netstat方便的地方。如果你想查特定端口加个grepss -tlnp | grep :8080ss还可以查所有 TCP 连接去掉-l比如看某个 IP 和本机建立了哪些连接ss -tnp | grep 192.168.1.100在处理生产环境时我一般都会加-p一旦端口异常输出里直接有 PID能省下不少时间。3.2 lsof 命令定位进程与端口的精准工具如果你习惯按“端口号反查进程”lsof会更顺手。查某个端口当前被谁占用lsof -i:8080输出类似COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 18232 root 22u IPv6 123456 0t0 TCP *:8080 (LISTEN)COMMAND是进程名PID是进程号NAME里*:8080表示监听所有网卡的 8080 端口(LISTEN)确认是监听状态。如果端口没在监听但有外部连接正在建立比如别人正在访问你这个服务也能显示出来。想过滤一下只看监听中的可以加-sTCP:LISTENlsof -i:8080 -sTCP:LISTEN拿到了 PID如果不是特别清楚这个进程是谁的可以先确认一下程序路径再动手ls -l /proc/18232/exe这条命令我建议每个做运维的人都养成习惯。/proc目录下每个进程都有一个exe软链接指向这个进程的可执行文件真实路径。有次我排查一个占用 3307 端口的可疑进程就是靠这一招发现路径指向某个自己不认识的目录才确认是被植入了挖矿程序。定位到进程路径很多疑难问题会豁然开朗。3.3 netstat 命令兼容老系统的备用方案虽然netstat在较新 Linux 系统上已经不默认安装了但老系统或者部分精简发行版上仍然是“查端口第一反应”。你只需要注意一点如果提示-bash: netstat: command not found说明命令不存在先装包# CentOS/RHEL 系 yum install -y net-tools # Ubuntu/Debian 系 apt install -y net-tools装完之后用法和ss很像netstat -tlnp | grep :3306参数含义-tTCP、-l只显示监听、-n数字格式、-p显示程序名和 PID。输出里会有0.0.0.0:3306或者:::3306IPv6这样的监听地址以及LISTENING对应的是LISTEN。我给你的建议是新系统优先ss要用到端口反查进程优先lsof只有连这两个都没有的时候才去装net-tools用netstat。三者不要混着记先掌握ss和lsof两个就足够应付 99% 场景。命令核心用途特点推荐场景ss查看监听和连接速度快直接显示进程PID新系统首选lsof反查端口对应进程基于文件描述符直观精确排查占用者netstat老传统需安装net-tools输出慢老系统兼容4. 端口通不通光看监听不够要实测连通性4.1 本机检查与远程测试的区别很多朋友查到端口在监听就以为大功告成结果远程一访问还是不通。这里有个关键误区本机端口 LISTENING只能说明服务进程起了并绑定到了某个地址但不代表外部网络能到达这个端口。中间还隔着服务监听地址、系统防火墙、云安全组、物理网络设备这些环节。我按经验把排查链路拆成三步第一步看监听地址是不是0.0.0.0或::。如果ss -tlnp显示127.0.0.1:8080这个服务只能本机访问远程肯定连不上。正确处理是去改服务配置文件让它监听0.0.0.0然后重启服务。第二步确认本机回环访问正常。在本机上直接访问一下端口比如 HTTP 服务就curl http://127.0.0.1:8080能通说明服务本身没问题。第三步从远程测试。这时候才是验证网络上通不通用下面的命令来测。4.2 常用端口连通性测试方法远程测试最传统的工具是telnettelnet 192.168.1.10 8080如果输入命令后光标停在远处没有任何报错说明 TCP 连接建立成功端口是通的。如果提示Connection refused说明目标服务器端口根本没监听或者防火墙直接丢弃了连接如果卡住直到超时多半是防火墙把包丢了只出不进。Windows 10 以上系统默认没装 telnet 客户端可以这样开启控制面板 - 程序和功能 - 启用或关闭 Windows 功能 - 勾选“Telnet 客户端”。也可以临时用 PowerShell 测试Test-NetConnection -ComputerName 192.168.1.10 -Port 8080Linux 上我更喜欢用ncnc -vz -w 3 192.168.1.10 8080-v输出详细日志-z表示只扫描不发送数据-w 3是 3 秒超时。通了会显示Connection to 192.168.1.10 port 8080 [tcp/http] succeeded!不通会直接提示Connection refused或者超时。如果是 Web 服务的端口直接curl更直观curl -v http://192.168.1.10:8080/health很多后端服务会暴露健康检查接口比如 Spring Boot 的/actuator/healthnginx 的/nginx_status。能拿到 HTTP 响应码说明从应用层也是通的。这里必须提醒一句用nmap这类工具做端口扫描只应该针对你自己有权限管理的服务器和网络资产千万别对没有授权的目标乱扫。这不是技术问题是底线问题。5. 特定设备场景海康存储服务器 DS-AT1000S 的管理端口怎么找5.1 存储服务器管理端口的特点有朋友问海康存储服务器 DS-AT1000S 的管理端口怎么查。这类产品和普通 Linux/Windows 服务器不太一样它属于视频监控领域的专用存储设备出厂装的是定制化嵌入式系统一般没有给你随便登录的命令行 shell。它对外提供的是 Web 管理界面所以你真正要关心的不是“操作系统里哪个端口在监听”而是“设备管理界面跑在哪个端口上”。按照海康威视同类存储设备的管理方式常见情况是这样设备通常默认开启一个 HTTP 管理端口多数是 80如果开了 HTTPS通常对应是 443。部分型号也有自定义端口比如 8000 系列的流媒体或 SDK 端口不一定是管理界面端口不要混为一谈。我把话说严谨点不同批次不同固件版本的设备默认管理端口有差异最靠谱的依据是你手里这台设备铭牌、说明书里的“出厂默认设置”或者官网对应型号的规格书。5.2 实际查找管理端口的思路与方法手里没有说明书、又不确定管理端口的时候我建议按下面这个顺序来第一看设备和包装里有没有快速入门卡片。这类存储设备出厂时一般会附一张标签上面写着默认管理 IP 和端口。DS-AT1000S 如果走的是海康标准流程标签上通常会有类似192.168.1.64这样的默认 IP管理端口一般是 80 或 443。第二如果设备已经被接入局域网但 IP 是自动获取的你找不到它可以下载海康官方的 SADP 搜索工具在局域网内扫描发现设备。SADP 能显示设备的 IP 地址、端口和序列号信息可以一键修改设备的网络参数。这工具是海康通用设备管理工具几乎所有海康设备都能用它发现。第三有权限的情况下登录 Web 管理界面在网络配置或系统配置里可以查看和修改 HTTPS 端口、HTTP 端口。有些型号支持把管理端口改成一个不常见的数字这是出于安全考虑改完要记住新端口不然下次登录都找不到入口。第四实在不行把设备接入交换机在交换机上做端口镜像用 Wireshark 抓包看设备主动向外发的流量。设备启动时通常会有一些注册、心跳、NTP 同步之类的网络数据包抓包后从目的地端口大致能判断出它常用的管理通道。这个方法稍微进阶适合有点网络基础的人。我再提醒一点不要因为不确定端口就在互联网上对设备 IP 做全端口扫描。正确做法是先用官方工具发现设备再根据文档去登录。对于一台存储服务器来说里面存的可都是监控录像操作一定要谨慎再谨慎。6. 端口排查中容易踩的坑和解决办法6.1 命令不存在、权限不够怎么办命令不存在这个问题我在实际中遇到太多次了。Windows 下提示“不是内部或外部命令”大概率是命令拼写错误或者系统环境变量被改过可以直接用完整路径C:\Windows\System32\netstat.exe试一下。Linux 下netstat不存在就装net-toolsss不存在的情况极罕见除非系统太老lsof不存在就yum install -y lsof或apt install -y lsof。权限不足是另一个高频问题。ss -tlnp不带sudo时进程 PID 那列经常会显示不出来因为普通用户没有权限查看别的进程信息正确做法是加sudosudo ss -tlnplsof -i:8080同理普通用户看不到其他用户进程的详细信息也要sudo。很多新手在那儿折腾半天没结果其实就是缺个sudo。6.2 查到端口却连不上从服务、防火墙、系统设置三方面排查端口明明在 LISTENING但远程就是连不上这个问题的排查顺序我一般固定为服务监听地址 - 本机防火墙 - 云平台安全组 - 系统其他设置。先检查监听地址。0.0.0.0或::才对外可访问如果发现只有127.0.0.1改配置文件里的 bind 地址改完重启服务。然后是防火墙# CentOS 7 或 RHEL firewall-cmd --query-port8080/tcp firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload # Ubuntu 的 ufw ufw allow 8080/tcpWindows 服务器则在防火墙高级设置里看入站规则有没有放行对应端口。如果你用的是云服务器还要去云平台控制台看一眼安全组入方向规则这里我踩过不少坑本地防火墙全关了结果安全组没放行照样连不上。最后Linux 上如果开了 SELinux也可能会拦掉一些非标准端口的访问。临时验证方式是把 SELinux 设为 permissive 试试端口通不通通了就说明是 SELinux 拦截用semanage port -a -t http_port_t -p tcp 8080这类方式放行不建议长期关闭 SELinux。6.3 查端口过程中值得记住的几个小技巧到这里我再补几个自己平时用的“小抄”都是处理端口问题高频使用的东西。第一个netstat或ss里看到一堆TIME_WAIT。这不是监听端口是连接关闭后的残留状态一般几秒到几分钟内会消失不用惊慌。如果TIME_WAIT大量堆积可能是应用频繁创建短连接需要调应用层连接复用参数而不是去“清理端口”。第二个查 PID 之后建议顺手看下进程启动命令而不是只凭进程名判断。用ps -ef | grep PID或者cat /proc/PID/cmdline内容用tr \0 转换一下可读性更好能看到完整的启动命令确认它是哪个服务实例。很多时候服务器上会跑多个同名进程只凭进程名会认错。第三个如果你在用 HBuilderX 这类开发工具排查自己写的 Web 项目想快速找到代码里到底哪里调用了某个端口配置可以在项目目录上按AltF8或右键选择“查找所有引用”它会帮你列出所有引用到该配置或函数的位置。这虽然和 Linux 查端口不是一回事但在开发阶段定位“这个端口是谁写进代码里的”却相当实用配合服务端查看监听端口两端一对照问题基本都能缩小到一个很小的范围。第四个改完端口配置记得确认服务真的重启了而不是只改了文件。有的服务有热加载机制有的必须重启进程才生效。最简单的验证方式就是改完后再执行一次ss -tlnp | grep 端口看监听端口是否和你预期的一致。最后分享一个我个人的排查习惯也算给这篇文章收个尾我拿到一台服务器要查端口永远先看监听地址和 PID再测本机访问、测远程访问最后才动防火墙。这四个环节按顺序走基本不会漏。只要你把这些命令和判断思路记住了以后遇到端口问题哪怕环境再陌生也不会毫无头绪。
返回列表