Arxius

Quin programa ha obert un port?

Escrit al 2004-12-18 00:00:00 per cpina

A vegades, estem treballant (ja sigui instal·lant un programa servidor, fent un programa nosaltres mateixos, etc.) i ens trobem que un port ja està ocupat.
És a dir, que "algú" en el nostre sistema ha fet un "bind" del port i el té ell.
A aquest petit article veurem quines maneres tenim de saber quin és el programa que ha obert un port.
A vegades podem necessitar saber quin programa ens ha obert un port.

Per exemple, perquè tenim un error de "binded port" a alguna aplicació, o bé hem fet un nmap per saber quins ports tenim oberts i en tenim algun que no coneixem o no sabem quin programa l’ha obert.

Per fer moltes de les operacions comentades aquí és necessari ser usuari root o
bé només podrem veure els ports que hem obert nosaltres, com usuari, etc.

/etc/services


Un mètode per fer-ho podria ser buscant el número del port a /etc/services, i veure de quin protocol es tracta. Després podríem fer un ps auxw i intuïtivament veure quin programa pot ser.

netstat


Mitjançant netstat -pan tenim un llistat com el següent:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 2
172/inetd
tcp 0 0 0.0.0.0:8010 0.0.0.0:* LISTEN 9
252/psi
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2
462/smbd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1
987/portmap
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 2
670/X

Les opcions són:

  • p: mostra el PID/programa
  • a: mostra tots els protocols (TCP, UDP, etc.)
  • n: forma numèrica (no canvia IP's per noms, ports per noms de serveis, etc.)

    Quan la Local Address és 0.0.0.0:x és que està escoltant (esperant connexions).
    El netstat també ens mostrarà connexions establertes.

    lsof



    lsof ens dona un llistat de fitxers oberts, incloent-hi també els ports.
    lsof incorpora moltes més funcions a més de la de comprovar els ports oberts (podem veure fàcilment quins fitxers té oberts una aplicació, quins fitxers hi ha oberts al sistema, etc.)
    Podem fer el llistat mitjançant:

    lsof -ni|grep LISTEN

    Les opcions són:

  • n: forma numèric
  • i: ensenya protocols d'Internet i no d’altres fitxers



    fuser


    Útil per si volem investigar un port només. Per exemple:

    pinux:~# fuser 25/tcp
    25/tcp: 2449
    pinux:~# ps auxw | grep -i 2449
    root 2449 0.0 0.1 2924 1100 ? Ss Dec17 0:00 /usr/lib/postfix/
    master

    És el postfix que té aquest port obert.

    Com a curiositat, i aprofitant el fuser, si tenim la tarja de so utilitzada per algú i no sabem qui podem fer:

    pinux:~# fuser /dev/dsp
    /dev/dsp: 17788
    pinux:~#


    És el PID 17788 que l’està utilitzant. Amb lsof també es pot fer, en canvi no és possible fer-ho amb netstat ja que s’utilitza per xarxa.

    El mateix si fem:

    pinux:~# umount /cdrom/
    umount: /cdrom: device is busy
    umount: /cdrom: device is busy

    No el podem desmuntar, mirem qui l’està fent servir:

    pinux:~# fuser /cdrom/
    /cdrom/: 18355c
    pinux:~#

    És el procés 18355 que té com a current directory el /cdrom.

    Tots aquests programes tenen moltes més opcions i molt interessants et recomanem llegir les seves pàgines man.
  • Categories: Articles


    Comentaris

    • Sense comentaris
    Arxius