欢迎来到之路教程(on itroad-com)
查找所有开放端口的脚本
下面的脚本可用于查找所有打开的端口
#!/bin/ksh # open_ports.ksh script # pfexec pfiles /proc/* 2>/dev/null | nawk -v port= ' /^[0-9]/ { cmd=# ./open_ports.ksh 1920: /usr/sbin/in.routed 0.0.0.0:520/udp :0.0.0.0/0 5830: /usr/lib/sendmail -bl -q15m 127.0.0.1:25/tcp :127.0.0.1/587 767: /usr/sbin/rpcbind 0.0.0.0:111/unknown :0.0.0.0/0 :0.0.0.0/41986 :0.0.0.0/111 :0.0.0.0/0 85: /lib/inet/in.mpathd 0.0.0.0:0/udp :127.0.0.1/5999; type="unknown"; continue } == "SOCK_STREAM" { type="tcp" } == "SOCK_DGRAM" { type="udp" } == "AF_INET" { if((port!="")&&(!=port)) continue; if(cmd!="") { printf("%sn %s:%s/%sn",cmd,,,type); cmd="" } else { printf(" %s:%s/%sn",cmd,,,type); }}'
运行脚本以显示服务器中所有打开的端口:
#!/bin/bash # Get the process which listens on port # is the port we are looking for if [ $# -lt 1 ] then echo "Please provide a port number parameter for this script" echo "e.g.# ./port.sh 22 Greping for your port, please be patient (CTRL+C breaks) ... sockname: AF_INET6 ::ffff:192.168.1.20 port: 22 Is owned by pid 3657 sockname: AF_INET6 ::ffff:192.168.1.20 port: 22 Is owned by pid 3658 sockname: AF_INET6 :: port: 22 Is owned by pid 82422" exit fi echo "Greping for your port, please be patient (CTRL+C breaks) ... " for i in `ls /proc` do pfiles $i | grep AF_INET | grep if [ $? -eq 0 ] then echo Is owned by pid $i fi done
很多时候需要知道哪个进程在特定端口上运行。
我们正在安装的应用程序可能会出现错误,例如“无法绑定端口”或者“端口已在使用中”。
在这些情况下,我们可以确定哪个进程阻塞了端口。
有时也有审计要求,以找出所有端口和相关进程。
为了解决这个问题,有一个简单的脚本可用(归功于 oracle)。
该脚本执行以下操作:
遍历/proc中的所有进程目录
在每个目录上运行 pfiles 命令,同时对 AF_INET 和指定为脚本参数的端口进行 grepping。
如果返回的错误码为0(例如:success),则回显出使用该端口的进程。
完整的脚本如下:
# ps -ef | egrep "3657|3658|824" root 3657 824 0 07:57:51 ? 0:00 /usr/lib/ssh/sshd root 824 1 0 04:09:51 ? 0:00 /usr/lib/ssh/sshd root 3658 3657 0 07:57:51 ? 0:01 /usr/lib/ssh/sshd
要查找使用端口 22 的进程,请按以下方式运行脚本:
##代码##检查进程:
##代码##日期:2020-09-17 00:15:23 来源:oir作者:oir