On Tue, Mar 30, 1999 at 01:31:44PM +0200, Stephane Bortzmeyer wrote:
> Autrement, il faut suivre le conseil de Christian. Un coup de 'netstat
> --all --inet' vous donnera une bonne id�e de tous les d�mons qui vous
> restent.
J'ai �crit un petit script qui affiche le PID et le nom des process qui
sont en �coute sur un port pass� en argument (numero de port ou nom du
service). Ce script utilise les infos de /proc et ne devrait donc
fonctionner qu'avec un noyau 2.2.x
En fait, pour les d�mons "standards", les services en clair apparaissent
dans la commande netstat. Mon script n'est donc pas tr�s utile pour
ceux-ci. Mais j'�tais curieux de trouver quels �taient les process en
�coute sur les autres ports (non list�s dans /etc/services), donc j'ai
�crit ce script.
Ex. d'utilisation :
# check_port www
PID NAME
21393 apache
21394 apache
21395 apache
21396 apache
21397 apache
31550 apache
6638 apache
9188 apache
#!/bin/bash
PORT=$1
if [[ "X$PORT" = "X" ]]
then
echo "Usage: check_port [port_number | service_name]"
exit 1
fi
if [[ "${PORT/*[0-9]/}" = "$PORT" ]]
then
PORT=`awk -v serv=$PORT '$1 == serv && $2 ~ /tcp$/ {sub(/\/tcp/,"",$2); print
$2}' /etc/services`
fi
PORT_HEX=`echo "obase=16;$PORT" | bc`
PORT_HEX=`printf "%04X" 0x$PORT_HEX`
INODE=`cat /proc/net/tcp | awk -v port=:$PORT_HEX '$4 == "0A" && $2 ~ port
{print $10}'`
for i in $INODE
do
PID=`for fd in /proc/[0-9]*/fd/*
do
ls -l $fd 2> /dev/null
done | grep "socket:\[$i\]" | awk -F '/' '{print $3}'`
done
echo "PID NAME"
for i in $PID
do
echo -e "$i \c"
cat /proc/$i/status | awk '$1 ~ /^Name/ {print $2}'
done | uniq
--
"How do you pronounce SunOS?" "Just like you hear it, with a big SOS"
-- dedicated to Roland Kaltefleiter