Netstat AIX

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Script de diagnostic — sockets en écoute
Contexte AIX
Dépend de netstat -Ana · rmsock
Voir aussi Netstat · Procs script · Errlog

Sous AIX, netstat -a liste les sockets en écoute mais ne donne pas directement le nom du processus propriétaire (contrairement à netstat -p sous Linux). Ce script comble ce manque : il croise la sortie de netstat -Ana avec la commande rmsock (utilisée ici en lecture seule, sans argument de suppression, uniquement pour résoudre l'adresse du bloc de contrôle socket en PID/nom de processus) pour produire un tableau lisible des ports TCP et UDP en écoute avec leur processus.

Principe

Pour chaque ligne LISTEN (TCP) ou udp (UDP) de netstat -Ana, le script récupère l'adresse du socket (première colonne) et interroge rmsock <adresse> tcpcb (ou inpcb pour UDP), qui renvoie en réalité les informations du socket — y compris le PID et le nom du processus — sans effectuer de suppression tant qu'aucune action de fermeture n'est demandée. Le résultat est dédoublonné (sort | uniq) et mis en forme en tableau.

Script

#!/bin/ksh93

OS_NAME=$( uname -s )

if [[ $OS_NAME == "AIX" ]] ; then
    echo "--------------------------------------------------------------------------------------"
    printf "| %-20s | %-15s | Protocol | %-30s |\n" "Process" "PID" "Listening On"
    echo "--------------------------------------------------------------------------------------"

    netstat -Ana | awk '
    /[0-9\*].[0-9].+LISTEN/ {
        SOCKET=$1;
        IPPORT=$5;
        "rmsock " SOCKET " tcpcb" | getline SOCKOUT;
        split(SOCKOUT, sockarray, " ");
        gsub(/[\.\(\)]/, "", sockarray[10]);
        LISTENERS[ sprintf("| %-20s | %15d | %8s | %30s |", sockarray[10], sockarray[9], "TCP", IPPORT) ] = 1;
    }
    /udp.*.[0-9]/ {
        SOCKET=$1;
        IPPORT=$5;
        "rmsock " SOCKET " inpcb" | getline SOCKOUT;
        split(SOCKOUT, sockarray, " ");
        gsub(/[\.\(\)]/, "", sockarray[10]);
        LISTENERS[ sprintf("| %-20s | %15d | %8s | %30s |", sockarray[10], sockarray[9], "UDP", IPPORT) ] = 1;
    }
    END {
        for (var in LISTENERS)
            print var
    }' | sort | uniq

    echo "--------------------------------------------------------------------------------------"
else
    echo "ERROR: Requires AIX"
    exit 1
fi

Sortie attendue

Un tableau du type :

| Process              | PID             | Protocol |          Listening On         |
| sshd                 |          262272 |      TCP |                          22    |
| httpd                |          327812 |      TCP |                          443   |

(à vérifier) : sur les AIX récents, rmsock reste documenté comme outil de diagnostic (fait aussi partie de la suite fournie avec la commande netstat), à utiliser avec prudence en dehors de ce script — un appel non maîtrisé peut fermer un socket actif.