получить имя процесса, pid и сопоставление портов из команды netstat в SunOS - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь сопоставить номер порта приложению, которое работает / использует порт в SunOS

$netstat -tlnp
netstat: illegal option -- t

Кажется, опция -t недопустима в SunOS.

как я могу получить это отображение?

Ответы [ 2 ]

1 голос
/ 07 ноября 2012

Я получил его сценарий откуда-то. Войдите в систему Solaris. Откройте редактор vi. Войдите в режим вставки. Скопируйте и вставьте этот скрипт. Закройте файл. Дайте разрешение на выполнение. Запустите этот скрипт с -p или -P swithc. Он выдаст вывод с PID, именем процесса и портом.

PCP - это скрипт, который позволяет администраторам видеть, какие открытые порты TCP используются в системе Solaris. Он сопоставляет порты с PID и наоборот. Он принимает подстановочные знаки, а также сразу отображает все открытые порты и соответствующие им ИДП. Это хороший сценарий, который дает очень хороший результат. Просто попробуйте.

Пример: #pcp -p PORT_NUMBER or #pcp -P PROCESS_ID

#!/usr/bin/ksh
#
# Wildcards are accepted for -p and -P options.
#
# for the help, much appreciated.
i=0
while getopts :p:P:a opt ; do
   case "${opt}" in
   p ) port="${OPTARG}";i=3;;
   P ) pid="${OPTARG}";i=3;;
   a ) all=all;i=2;;
   esac
done
if [ $OPTIND != $i ]; then
   echo >&2 "usage: $0 [-p PORT] [-P PID] [-a] (Wildcards OK) "
   exit 1
fi
shift `expr $OPTIND - 1`
if [ "$port" ]; then
   # Enter the port number, get the PID
   #
   port=${OPTARG}
   echo "PID\tProcess Name and Port"
   echo "_________________________________________________________"
   for proc in `ptree -a | awk '/ptree/ {next} {print $1};'` ; do
      result=`pfiles $proc 2> /dev/null| egrep "port: $port$"`
      if [ ! -z "$result" ];then
         program=`ps -fo comm= -p $proc`
         echo "$proc\t$program\t$port\n$result"
         echo "_________________________________________________________"
      fi
   done
elif [ "$pid" ]; then
   # Enter the PID, get the port
   #
   pid=$OPTARG
   # Print out the information
   echo "PID\tProcess Name and Port"
   echo "_________________________________________________________"
   for proc in `ptree -a | awk '/ptree/ {next} $1 ~ /^'"$pid"'$/ {print $1};'`; do
      result=`pfiles $proc 2> /dev/null| egrep port:`
      if [ ! -z "$result" ];then
         program=`ps -fo comm= -p $proc`
         echo "$proc\t$program\n$result"
         echo "_________________________________________________________"
      fi
   done
elif [ $all ]; then
   # Show all PIDs, Ports and Peers
   #
   echo "PID\tProcess Name and Port"
   echo "_________________________________________________________"
   for proc in `ptree -a | sort -n | awk '/ptree/ {next} {print $1};'` ; do
      out=`pfiles $proc 2>/dev/null| egrep "port:"`
      if [ ! -z "$out" ];then
         name=`ps -fo comm= -p $proc`
         echo "$proc\t$name\n$out"
         echo "_________________________________________________________"
      fi
   done
fi
exit 0
0 голосов
/ 15 мая 2011

Если у вас не установлен lsof, вот один из способов использования стандартных команд Solaris:

pfiles /proc/* 2>/dev/null | nawk -v port=$port '
/^[0-9]/ { cmd=$0; type="unknown"; continue }
$1 == "SOCK_STREAM" { type="tcp" }
$1 == "SOCK_DGRAM" { type="udp" }
$2 == "AF_INET" { if((port!="")&&($5!=port)) continue;
                  if(cmd!="") { printf("%s\n    %s:%s/%s\n",cmd,$3,$5,type); cmd="" }
                  else { printf("    %s:%s/%s\n",cmd,$3,$5,type); }}'

Установите для переменной порта номер порта, который вы ищете, если он есть, или оставьте его неустановленным, чтобы увидеть все используемые порты IPV4.

...