游客发表
打开浏览器,网站地址栏里那串数字就是端口端口在说话。比如你访问 http://192.168.1.1:8080,查询冒号后面的网站 8080 就是端口号。没有冒号的端口时候,浏览器默认走 80(HTTP)或 443(HTTPS)。查询很多人以为端口是网站网站自己“藏”起来的,其实它要么写在 URL 里,端口要么被协议默认值替代了。查询
我碰到过一个情况:公司内网有个管理后台,网站同事发链接只写了 IP,端口没带端口,查询结果死活打不开。网站后来我让他补上 :9090,端口页面立刻出来了。查询端口这东西,就像门牌号,楼对了,门不对,照样进不去。
Windows 上打开 CMD,敲 netstat -ano | findstr :80,会列出所有占用 80 端口的连接和对应的进程 ID。想看得更细,可以加 -n 参数,让地址和端口都以数字形式显示,省得它去反查域名,速度更快。
macOS 或 Linux 下,netstat -tuln 是常用组合。-t 看 TCP,-u 看 UDP,-l 只看监听状态,-n 同样是不解析名称。输出里 0.0.0.0:22 表示所有网卡都在监听 22 端口,127.0.0.1:3306 则只限本机访问 MySQL。
如果系统里没装 netstat,ss -tuln 是更现代的替代品,速度更快,输出也更干净。我自己的服务器上基本只用 ss,netstat 已经很少碰了。
不想敲命令的话,有一些在线端口扫描工具,输入域名或 IP,选常用端口范围,几秒钟出结果。不过这类工具只能扫公网地址,内网机器它够不着。
浏览器里按 F12 打开开发者工具,切到 Network 面板,刷新页面。点任意一个请求,Headers 里找 Remote Address,后面跟的就是目标服务器的 IP 和端口。这个方法特别适合查一个网站实际走的是哪个端口,因为有时候 URL 里不写,但请求头里藏不住。
Windows 下 netstat -ano 配合任务管理器,拿 PID 去对照进程名,就知道哪个程序占了哪个端口。我见过有人装了某国产安全软件,它偷偷占了 8080,导致本地开发服务器起不来,查了半天才揪出来。
Linux 下 lsof -i -P -n | grep LISTEN 更直观,直接列出进程名、PID、用户和监听端口。要是没装 lsof,ss -tulpn 也能达到类似效果,-p 参数会显示进程信息。
telnet 是最老土但也最直接的办法。telnet example.com 443,如果连上了,屏幕会闪一下或者显示空白,说明端口开着;如果提示连接被拒绝或超时,那就是没开或者被防火墙拦了。Windows 默认没启用 telnet 客户端,得去“启用或关闭 Windows 功能”里勾上。
更现代的做法是用 nc(netcat):nc -zv example.com 80,-z 表示只扫描不发送数据,-v 输出详细信息。成功会显示 succeeded,失败会显示 refused 或 timed out。
还有 nmap,功能强得多,但杀鸡用牛刀。查单个端口用 nc 就够了,nmap 适合批量扫一个网段。
0 到 1023 是系统端口,得管理员权限才能监听。1024 到 49151 是注册端口,常见应用各占各的,比如 3306 给 MySQL,6379 给 Redis。49152 以上是动态端口,系统临时分配。你写代码时如果随便选个 80 去监听,不加 sudo 或管理员权限,铁定报错。
查端口这件事,说到底就是搞清楚“谁在哪个门后面”。命令行最快,浏览器开发者工具最方便,在线工具最省事但有限制。选哪个,看你手头有什么、要查的是本机还是远程。
友情链接