19 de diciembre de 2013

¿Cómo obtener las conexiones INET de un proceso en solaris?

Hace unos días necesité, por motivos del trabajo, saber qué conexiones tcp hacía un proceso. La cosa es que este proceso tenía varias instancias corriendo. Por esto se me ocurrió hacer un script adaptado a mis necesidades.

Sé que esto se puede hacer con lsof o hasta con pfiles, pero vaya, esto me ayudó y me ahorró un poco de tiempo en el proceso de monitoreo.

Saludos!
-------------------------------------------------------------------------------------------------
#!/bin/bash
export PSIDS=$@
export PFILES="/bin/pfiles"
export EGREP="/bin/egrep"
export GREP="/bin/grep"
export AWK="/bin/awk"
export SED="/bin/sed"

for PSID in $PSIDS ; do
        echo "Para PID: $PSID"
        CONNLIST=`${PFILES} ${PSID} | ${EGREP} "peername|sockname"| ${GREP} -v \

"0.0.0.0"| ${AWK} '{print $3,":",$5}'| ${SED} -e 's/ : /:/'`
        echo $CONNLIST | ${AWK} '{for(i=1; i<=(NF/2); i++) print $((i*2)-1),"->",$(i*2);  }'
        echo "********************"
done

-------------------------------------------------------------------------------------------------
psInet.sh

 Para invocarlo, primero necesitamos sacar la lista de PID's en los que estoy interesado.

Suponiendo que un proceso llamado someProcess tiene 6 instancias corriendo, obviamente con PID's diferentes, puedo usar el siguiente comando para sacar la lista y pasarsela a mi script

$ ps -fea | grep someProcess | grep -v grep| awk '{print $2}'| xargs  ./psInet.sh

 la salida se verá más o menos así:

For PID: 25427
10.252.128.10:36557 -> 10.252.128.10:49911
10.252.128.12:36489 -> 10.252.128.12:5025
10.252.128.12:36495 -> 10.252.128.12:5025
********************
For PID: 13427
10.252.128.10:5550 -> 10.22.180.11:43854
10.252.128.10:5550 -> 10.22.180.11:43854
10.252.128.10:5550 -> 10.22.180.11:43854
10.252.128.10:31710 -> 10.252.128.10:49911
10.252.128.12:31495 -> 10.252.128.12:5025
10.252.128.12:31506 -> 10.252.128.12:5025
********************
For PID: 23876
10.252.128.10:44310 -> 10.252.128.10:49911
10.252.128.12:44147 -> 10.252.128.12:5025
10.252.128.12:44158 -> 10.252.128.12:5025
********************
For PID: 6766
10.252.128.10:38621 -> 10.252.128.10:49911
10.252.128.12:38522 -> 10.252.128.12:5025
10.252.128.12:38528 -> 10.252.128.12:5025
********************
For PID: 16489
10.252.128.10:20754 -> 10.252.128.10:49911
10.252.128.12:20640 -> 10.252.128.12:5025
10.252.128.12:20648 -> 10.252.128.12:5025
********************
For PID: 7279
10.252.128.10:20091 -> 10.252.128.10:49911
10.252.128.12:20011 -> 10.252.128.12:5025
10.252.128.12:20021 -> 10.252.128.12:5025
********************

Y claro, también funciona para un PID:

$ ./psInet.sh 7279
For PID: 7279
10.252.128.10:20091 -> 10.252.128.10:49911
10.252.128.12:20011 -> 10.252.128.12:5025
10.252.128.12:20021 -> 10.252.128.12:5025
********************