欢迎来到之路教程(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 824 22"
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
