utilise comment enquêter sur les ports ouverts par un certain processus dans Linux?




ubuntu port ouvert (6)

Supposons que le PID du processus est déjà connu


Vous pouvez utiliser l'outil de ligne de commande netstat avec l'argument de ligne de commande -p :

-p (Linux):

Processus: Indique quels processus utilisent les sockets (semblables à -b sous Windows). Vous devez être root pour le faire.

La section d'exemple donne cet exemple:

Pour afficher tous les ports ouverts par un processus avec ID $PID :

netstat -ao | grep '\b'$PID'\b'


En remarque, netstat -ao lira le fichier / proc / PID / tcp etc pour voir les ports ouverts par le processus. Cela signifie que ses informations de lecture fournies par le système (le linux KERNEL), et ne cherche en aucun cas directement sur l'interface réseau ou d'autres moyens. Idem pour lsof.

Si vous le faites par mesure de sécurité, vous avez échoué. Vous ne devriez JAMAIS (JAMAIS) faire confiance à la sortie de netstat, même si vous êtes sûr à 100% que vous utilisez un vrai programme netstat (par opposition à une version trojan) ou tout autre programme qui lit le système de fichiers / proc. Certaines personnes semblent penser que netstat, ls, ps ou n'importe quel autre outil standard d'unix fait une sorte de magie et d'interrogation des sources, la vérité est qu'elles reposent toutes sur le système de fichiers / proc pour obtenir toutes leurs données, qui peut être facilement corrompu par un rootkit ou un hyperviseur.


netstat --all --program | grep '3265'
  • --all afficher les prises d'écoute et non-écoute.
  • --program affiche le PID et le nom du programme auquel appartient le socket.

Vous pouvez également utiliser un scanner de port tel que Nmap.


Dans certains périphériques intégrés ou avec une ancienne version de Linux, le problème est que netstat n'a pas d'options --process ou -p disponibles.

Le script suivant montre le processus avec son IP et son port, vous devez être root.

#!/bin/bash

for protocol in tcp udp ; 
do 
    #echo "protocol $protocol" ; 
    for ipportinode in `cat /proc/net/tcp | awk '/.*:.*:.*/{print $2"|"$3"|"$10 ;}'` ; 
    do 
        #echo "#ipportinode=$ipportinode"
        inode=`echo "$ipportinode" | cut -d"|" -f3` ;
        if [ "#$inode" = "#" ] ; then continue ; fi 
        lspid=`ls -l /proc/*/fd/* 2>/dev/null | grep "socket:\[$inode\]" 2>/dev/null` ; 
        pid=`echo "lspid=$lspid" | awk 'BEGIN{FS="/"} /socket/{print $3}'` ;
        if [ "#$pid" = "#" ] ; then continue ; fi
        exefile=`ls -l /proc/$pid/exe | awk 'BEGIN{FS=" -> "}/->/{print $2;}'`
        #echo "$protocol|$pid|$ipportinode" 
        echo "$protocol|$pid|$ipportinode|$exefile" | awk '
            BEGIN{FS="|"}
            function iphex2dec(ipport){ 
                ret=sprintf("%d.%d.%d.%d:    %d","0x"substr(ipport,1,2),"0x"substr(ipport,3,2),
                "0x"substr(ipport,5,2),"0x"substr(ipport,7,2),"0x"substr(ipport,10,4)) ;
                if( ret == "0.0.0.0:0" ) #compatibility others awk versions 
                {
                    ret=        strtonum("0x"substr(ipport,1,2)) ;
                    ret=ret "." strtonum("0x"substr(ipport,3,2)) ;
                    ret=ret "." strtonum("0x"substr(ipport,5,2)) ;
                    ret=ret "." strtonum("0x"substr(ipport,7,2)) ;
                    ret=ret ":" strtonum("0x"substr(ipport,10)) ;
                }
                return ret ;
            }
            { 
            print $1" pid:"$2" local="iphex2dec($3)" remote="iphex2dec($4)" inode:"$5" exe=" $6 ;  
            }
            ' ; 
        #ls -l /proc/$pid/exe ; 
    done ; 
done

La sortie est comme:

tcp pid:1454 local=1.0.0.127:5939 remote=0.0.0.0:0 inode:13955 exe=/opt/teamviewer/tv_bin/teamviewerd
tcp pid:1468 local=1.1.0.127:53 remote=0.0.0.0:0 inode:12757 exe=/usr/sbin/dnsmasq
tcp pid:1292 local=0.0.0.0:22 remote=0.0.0.0:0 inode:12599 exe=/usr/sbin/sshd
tcp pid:4361 local=1.0.0.127:631 remote=0.0.0.0:0 inode:30576 exe=/usr/sbin/cupsd
tcp pid:1375 local=1.0.0.127:5432 remote=0.0.0.0:0 inode:12650 exe=/usr/lib/postgresql/9.3/bin/postgres

Vous pouvez utiliser la commande ci-dessous:

lsof -i -P |grep pid




networking