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

Répondre à