平度网站整站优化外包公司,网站恶意点击,做网站的的价位,如何用手机制作手机app如何查看端口占用#xff0c;各平台
一、背景
如何查看端口占用#xff1f;网上很多#xff0c;但大多直接丢出命令#xff0c;没有任何解释关于如何查看命令的输出 所谓 “查端口占用”#xff0c;即查看某个端口是否被某个程序占用#xff0c;如果有#xff0c;被哪…如何查看端口占用各平台
一、背景
如何查看端口占用网上很多但大多直接丢出命令没有任何解释关于如何查看命令的输出 所谓 “查端口占用”即查看某个端口是否被某个程序占用如果有被哪个进程占用。PS进程都有进程ID标识。 二、命令概览
适用平台命令作用补充Linuxnetstat -tunlp|grep 8080查看占用8080端口的进程IDMacOS中用不了。看第四列即本地地址看完全匹配端口号的那行所对应的PID。这个命令本身就查出LISTEN正在监听的! Linux显示为LISTENWindows显示为LISTENING一个意思Windowsnetstat -ano|findstr 8080查看8080端口占用的进程IDfindstr也可以用findStr8080也可以用双引号 “8080”。看第二列即本地地址看完全匹配端口号且状态是LISTENING的那行所对应的PID。MacOS/Linuxlsof -i:8080查看8080端口占用的进程IDMacOS中用Linux可以用但Linux可能默认没这个命令得自己装。如果遇到问题可以尝试加上sudo在前面sudo lsof -i:8080这个命令是精确匹配8080端口不会将18080的占用显示出来 注意Linux的LISTEN状态就是Windows里的LISTENING状态一个意思用了不同单词 三、命令的输出结果详细解释
3.1、Windowsnetstat -ano|findstr 8080
将端口号替换成你想查的的端口号即可
3.1.1、返回的结果类似于 这么多列从左到右的含义是协议、本地地址、外部地址、状态、进程ID
记不住使用 netstat -ano 可输出表头注意表头和值有点没对齐 netstat -ano|findstr 8080 的findstr或者Linux的grep的含义是对前面的输出的结果即一行行的结果过滤出带有8080字符串的每一行重新组成结果。过滤规则是前后模糊匹配即%yourKeyword%无论一行中哪列带有8080字符串都会过滤出来比如本地地址或外部地址都有可能因为含有8080而被匹配。显然表头因为不包含8080会被过滤掉这就是为什么过滤后不显示表头的原因你用 netstat -ano|findstr 本地 就可以过滤出表头。 3.1.2 命令的输出结果解读正式开始
如果什么都没输出就是没有任何进程占用这个端口
如果有占用至少会输入如下
有时候复杂一点会输出
如何查看呢这么多8080而且进程ID还不一样
首先要看第二列看第二列中是8080端口的最后看 LISTENING 状态的
这样过滤后就会剩下2条其中一条是IPv4另一条是IPv6都是一样的提示被12636进程占用 IPv4的写法0.0.0.0:8080IPv6的写法[::]:8080 有时候会查不到LISTENING状态的但是又查出了其他的东西这时候其实是没有端口占用的 这种情况的出现是因为比如8080本身是启动的被访问后就会留下痕迹然后8080的进程被杀掉后则LISTENING状态的立即会消失但是其他状态的还会缓存一段时间实际测试过一段时间具体我没数多久后再查就什么都没了 3.1.3 其他可能的疑惑的说明 为什么有2行 一行是IPv4的另一行IPv6。虽然2行但进程ID其实是相同的没有不一致。其实详细的我也不那么清楚有知道更多细节的可以留言。 为什么要看第二列本地地址为什么是第二列不是第三列外部地址为什么要看 LISETNING 状态的 首先基础知识是双方要连接则双方的进程都得有地址IP和端口号才能连所以有两个地址。 比如你在浏览器访问某个网站表面看似乎你本机不需要IP和端口实际你打开浏览器的开发者工具可以看到发出的每个请求都有你本地 一般来说你要查某个端口被占用那这个端口肯定是被一直占用着才犯得着你来排查所以要查 LISTENING 状态的因为 LISTENING 就是持久占用、正在监听中的。 要查看本地地址而不是远程是因为本地地址才是某个服务启动之后一直占用端口的远程地址是远程要连接本机的IP和端口肯定是不用管远程地址毕竟远程地址要连接服务器用的一般都是临时的端口号用完即回收的 我们在使用 jmeter 压测的时候其实是有个基础知识的就是你要模拟超过6万多个用户同时访问某个接口单机是不行的。因为比如你的 jmeter 安装在A机器操作系统最多就65536个端口号要在A机器同时模拟这么用户就得同时起这么多线程一个线程代表一个用户那每个线程要占用一个端口号跟被压测的服务器上的接口通信一台机器的最多65536个端口号被同时使用所以一台机器能同时压测的数量自然是受到最大端口数限制的 第二列中的 0.0.0.0:8080 中0.0.0.0 是指不限制远程的端口号 熟悉 Redis 配置的都知道有个 bind 配置0.0.0.0就是表示谁都可以连上来而127.0.0.1就是只有本地可连这样子可以限制远程连上来的IP更安全。这里是同样的意思
3.2、Linux (有些原理的东西跟Windows一样建议有不清楚的可以翻看Windows的)
使用 netstat -tunlp|grep 8080该命令记忆tunlptunlp囤老婆。。。最后输出的列的顺序跟这些字母没关系例如netstat -tunpl|grep 8080 输出的并不会调换列的位置
由于该命令的 l 参数只查出 LISTEN 状态即监听中的了所以不需要人工过滤监听中的状态了只需要看第4列的地址即本地地址只要看这列能完整匹配你要查的端口号即可匹配后的那行的PID就是你要找的。
同样的你若不知道表头可以让命令去掉grep的部分查一下即 netstat -tunlp 查下可以发现依次是ProtoRecv-QSend-QLocal AddressForeign AddressStatePID/Program name
TODO补充截图
3.3、MacOS
3.3.1、使用 lsof -i:8080
可以查占用8080端口的程序如果需要可以加sudo如sudo lsof -i:8080。
结果解读 输出的结果如下图有多个但是要看LISTEN状态的。 这个命令的端口参数是精确匹配的即精确匹配8080不会匹配到18080的端口的占用我已经做过了实验验证过。
如下图如果某个端口没有占用则什么都没
如下图如果虽然有输出结果但是没有LISTEN状态的看箭头括号里的也是没有任何程序占用
为什么会没有LISTEN状态的这个可能是因为之前的缓存如果刚刚8080端口的程序被访问过然后8080端口程序立即被杀掉就立即没有LISTEN状态的但是因为访问过8080端口的程序就会有点缓存过一段时间再查就会发现以下的信息都没了
如下图如果有一条是LISTEN状态的这样查看PID就找到了占用程序
怎么证明我上述 lsof -i:8080 查出来的8080而不是18080的我同时启动了8080和18080两个web程序可以看到lsof -i:8080的结果没有掺杂18080端口的结果而且使用 lsof -i:18080是能正确找到真正的占用程序的
3.3.2 使用 netstat 命令明确这个命令似乎行不通
MacOS也是可以使用 netstat 命令只是参数跟 Linux的不太一样这是因为macOS 使用的是基于 BSD 的网络工具因此 netstat 命令的参数和输出格式可能会与 Linux 中的稍有不同。
使用的命令是 netstat -an|grep 8080但是非常不幸的是这个命令不能输出PID列 netstat --help查看了帮助文档似乎也没什么参数可以支持所以暂时无解无法使用netstat在MacOS中查看端口占用。评论区知道的可以补充一下。
四、补充
关于netstat的用法在Linux/Windows中可以使用 netstat --help 列出后面的选项的字母代表的意思Windows默认输出中文还可以先 chcp 437命令之后切换成英文之后再查命令的帮助。
Windows 中文版和英文版
中文版如下
Linux
TODO待补充 MacOS lsof命令 netstat 命令 下面的命令提示了使用方式似乎提示了 illegal option也许 netstat --help 对于 macOS 来说并不是查看命令的方法只是因为用错了命令才提示正确的Usage 不管怎么样都提示了使用方式如果不嫌长篇大论可以使用 man nestat 查看命令的使用方式