2012-11-06 2 views
5

Sto cercando di ottenere processi collegati con una porta 7085 su SunOS. ho provato a seguire i comandi.come ottenere l'ID di processo collegato a una porta specifica in sunos

netstat -ntlp | grep 7085 non ha prodotto nulla

netstat -anop | grep 7085 provato anche questo. Questo parametro non è valido in SunOs

Ho ottenuto il seguente output.

#netstat -anop

netstat: illegal option -- o

usage: netstat [-anv] [-f address_family]

netstat [-n] [-f address_family] [-P protocol] [-g | -p | -s [interval [count]]]

netstat -m [-v] [interval [count]]

netstat -i [-I interface] [-an] [-f address_family] [interval [count]]

netstat -r [-anv] [-f address_family|filter]

netstat -M [-ns] [-f address_family]

netstat -D [-I interface] [-f address_family]

La versione di SunOS è SunOS 5.10. Credo che netstat sia l'unico comando in grado di farlo.

Quali sono gli switch esatti per netstat che mi forniranno l'id di processo associato alla porta?

+0

Quale versione di SunOS? Ho pensato che si chiama Solaris da più di dieci anni !!! –

+0

@basile. La versione è SunOS 5.10 Generic_118833-33 sun4v sparc SUNW, Sun-Fire-T200 – LOGAN

+0

@Basile .. FYI sto gestendo questo commands come Super User ... – LOGAN

risposta

9
pfiles /proc/* 2>/dev/null | nawk ' 
/^[0-9]*:/ { pid=$0 } 
/port: 7085$/ { printf("%s %s\n",pid,$0);}' 
  • pfiles /proc/* sta recuperando tutti i descrittori di file processi dettagli
  • 2>/dev/null è l'abbandono errori dovuti a processi transitori morto nel frattempo
  • ogni linea di partenza con un numero seguito da due punti riporta l'id del processo e i dettagli, esso è memorizzato nella variabile pk awk
  • quando una riga termina con la stringa port: <portnumber> (qui è 7085), viene visualizzata la variabile pid corrispondente.

Nota: sono necessari i privilegi richiesti per ottenere le informazioni sulla porta dai processi che non si possiedono (la radice ha tutti i privilegi).

+1

non ha funzionato per me. il comando non ha restituito nulla dopo pochi secondi. – LOGAN

+2

lo script che sto usando internamente sta usando pfiles per ottenere i dettagli. – LOGAN

+2

Codice semplificato e fisso. – jlliagre

3

Dai un'occhiata al comando lsof http://linux.about.com/library/cmd/blcmdl8_lsof.htm.

Questo comando descrive quali processi stanno utilizzando quali descrittori di file. Ricordare che qualsiasi cosa sulla porta 7085 avrà il proprio descrittore di file che è possibile utilizzare per risalire al processo che lo sta usando.

vorrei provare qualcosa di simile:

$ lsof -i :7085 

spero che possa aiutare.

+0

Sì. Ho provato che sfortunatamente il comando non era disponibile. Avrei installato questo pacchetto ma è server di produzione e non ho i diritti per installare nulla sul server e non c'è solo 1 server ci sono oltre 200 server. Sto cercando di ottenere un aiuto con i comandi disponibili su solaris ... – LOGAN

+0

@LOGAN Hai un fusore? Prova questo: fuser -4 -v -n tcp 7085 – andrefsp

+0

non funziona. Ho seguito out put.fuser: opzione illegale - 4 'Opzione non valida?. Uso: fuser [- [k | s sig] un [c | f | d]] file [- [[k | s sig] un [c | f | d]] file] .. ' – LOGAN

0

Ho ottenuto il suo script da HERE. Accedi al sistema Solaris. Apri l'editor vi. Vai in modalità di inserimento. Copia e incolla questo script. salva il file e indica il nome PCP. Dare il permesso di esecuzione Esegui questo script con -p o -P swithc. Darà un output con il PID, il nome del processo e la porta.

Assicurarsi di aver bisogno di essere in ksh shell per eseguirlo.

PCP è uno script che consente agli amministratori di vedere quali porte TCP aperte sono in uso su un sistema Solaris. Mappa le porte ai PID e viceversa. Accetta i caratteri jolly e mostrerà anche a prima vista tutte le porte aperte e i corrispondenti PID . E 'una bella sceneggiatura che dà un ottimo out out. Provalo.

Esempio: #pcp -p PORT_NUMBER or #pcp -P PROCESS_ID

#!/usr/bin/ksh 
# 
# # PCP (PID con Port) 
# v1.10 08/10/2010 Sam Nelson sam @ unix.ms 
# 
# If you have a Solaris 8, 9 or 10 box and you can't 
# install lsof, try this. It maps PIDS to ports and vice versa. 
# It also shows you which peers are connected on which port. 
# Wildcards are accepted for -p and -P options. 
# 
# Many thanks Daniel Trinkle trinkle @ cs.purdue.edu 
# 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

Strippare l'autore/I nomi di credito sono una cattiva pratica. http://www.unix.ms/pcp/ – jlliagre

+0

@ jiliagre. non era intenazionale. L'ho modificato :) – LOGAN