Linux系统下如何确定端口是否被占用?如何查看系统正在监听的端口有哪些?
关注系统正在监听的端口对运维人员是一件非常重要的事情,因为对外开放的端口越多,系统增加的风险就越大(后面还会写一篇系统安全的文章,记得关注我哦)。除了入侵之外,运维人员在做故障排查的时候,也需要观察端口变化。
例如:一台服务器上同时部署了Apache和Nginx,那么就必须确认他们是否是使用了TCP #80/443端口。服务宕了,就会先看端口在不在,端口不在,是不是服务停止了,被 OOM 等。
在Linux下检查被监听的端口进程
1:lsof命令
语法:
$ sudo lsof -i -P -n $ sudo lsof -i -P -n | grep LISTEN $ doas lsof -i -P -n | grep LISTEN ### [OpenBSD] ###
举例:使用lsof命令检查监听端口和应用程序
输出的最后一行是
sshd 85379 root 3u IPv4 0xffff80000039e000 0t0 TCP 10.86.128.138:22(LISTEN)sshd 是应用程序的名称。10.86.128.138 是sshd应用程序绑定到的IP地址(LISTEN)22 是正在使用的TCP端口(LISTEN)85379 是sshd进程的进程ID
2:netstat命令
可以使用netstat检查端口端口和应用程序
Linux netstat语法$ netstat -tulpn | grep LISTENFreeBSD / MacOS X netstat语法
$ netstat -anp tcp | grep LISTEN $ netstat -anp udp | grep LISTENOpenBSD netstat语法
$ netstat -na -f inet | grep LISTEN $ netstat -nat | grep LISTEN
3:nmap命令
语法:
$ sudo nmap -sT -O localhost $ sudo nmap -sU -O 192.168.2.13 ##[ list open UDP ports ]## $ sudo nmap -sT -O 192.168.2.13 ##[ list open TCP ports ]##
举例:使用nmap确定哪些端口正在侦听TCP连接
可以在单个命令中组合TCP / UDP扫描:
$ sudo nmap -sTU -O 192.168.2.13
结束进程
根据PID kill掉相关进程:
kill -9 {PID}
在Windows下检查被监听的端口进程
常用的检查Windows操作系统的端口使用情况命令:
netstat -bano | more netstat -bano | grep LISTENING netstat -bano | findstr /R /C:"[LISTEING]"
举例
1.查看所有的端口占用情况
C:>netstat -ano
2.查看指定端口的占用情况
在dos下,输入netstat -ano|findstr 8189,查看端口使用情况
3.结束该进程
输入taskkill /pid 13064 /f停止端口占用