Come faccio a sapere se una porta è disponibile su Ubuntu 8.04?


28

C'è qualche comando che posso eseguire da bash che mi dirà se una porta è già aperta?

Risposte:


37

Utilizzare "netstat" per verificare le porte attualmente in uso.

netstat -antp

Proto Recv-Q Send-Q Indirizzo locale Indirizzo esterno Stato PID / Nome programma
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* ASCOLTA 16297 / nome     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* ASCOLTA 16297 / nominato     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* ASCOLTA 16297 / nominato     
tcp 0 0 127.0.0.1:53 0.0.0.0:* ASCOLTA 16297 / nominato     

2
"netstat -antp | grep 80" dove 80 è il numero di porta da cercare.
Umair A.

13

Questo (netstat) è la soluzione più veloce ...

netstat -lnt

... ma questo ti dà più controllo (a costo della velocità (a volte molta velocità)) ...

lsof -n -i -a -u www-data

L'esempio sopra riportato mostra ad esempio tutte le porte TCP aperte e nello LISTENstato AND ( -a) appartenente www-dataall'utente Apache ( ).


8

Tutte buone risposte.

Tuttavia, non menzionare se si è connessi al computer in questione. ; P

In caso contrario, nmap è tuo amico.

per cominciare provate:

nmap -Otarget

Amap è anche una buona scelta che tenterà anche di indovinare il software del server afferrando le pagine dei banner.

per cominciare provate:

amaptarget1-6000


7

Provare

lsof -i :<port number>

Se si ottengono risultati, qualcosa è in ascolto e associato, ad es

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

4
netstat -tlnp  

Mostra le tporte cp che si laprono, mostra nsolo le ombre (non risolvere i nomi - rende più veloce) e mostra il process che sta ascoltando ( pfunziona solo se sei root)

netstat -ulnp  

Mostra le uporte dp che lappaiono, mostra nsolo le ombre (non risolvere i nomi - rende più veloce) e mostra il process che sta ascoltando ( pfunziona solo se sei root)

netstat -unp  

Mostra le uporte dp che sono aperte ma non in ascolto, mostra nsolo le ombre (non risolvere i nomi, rende più veloce) e mostra il process che sta facendo l'ascolto ( pfunziona solo se sei root)

netstat -an

Mostra tutte le aporte in uso, mostra nsolo le ombre - non risolvere i nomi

lsof -i <proto>@<host>:<port>

per esempio

lsof -i tcp@localhost:25

per vedere se qualcosa è in ascolto sulla porta localhost 25 / TCP o

lsof -i tcp@0.0.0.0:636 

per vedere se ci sono prese locali o remote in ascolto (locale) o connesse (locale o remoto) per qualsiasi host / interfaccia


2

lsof (elenca i file aperti) è un buon strumento per vedere se un processo è in ascolto su una porta

lsof -P | grep: <numero-port>

netstat è un buon strumento per vedere se ci sono connessioni attive.

netstat -n | grep: <numero-port>


2

Non menzionate quale protocollo volete usare, cioè TCP o UDP - ed è anche importante rendervi conto che "port" non è così granulare che il sistema supporta per disambiguare i socket. Ad esempio, se il sistema ha più indirizzi IP, la porta 80 potrebbe essere in uso su tutti gli indirizzi IP (l'applicazione è stata associata a "0.0.0.0" o "::" o a ciascun indirizzo IP in successione) oppure potrebbe essere in utilizzare solo su un sottoinsieme di tali indirizzi IP.

Il modo migliore e più sicuro per determinare se una porta / indirizzo è libero e disponibile è tentare di vincolarlo. Netcat è utile per questo.

nc -l [-s abcd] -p NN

proverà a collegarsi alla porta TCP NN su (facoltativo, il default sarà tutti gli indirizzi) abcd Aggiungi l'opzione -u per fare lo stesso in UDP.

Successivamente, per sapere se la porta è veramente "aperta" quando lo chiedi, devi iniziare a guardare le potenziali regole del firewall. Ancora una volta la cosa più semplice è provare a connettersi alla porta. Utilizzare netcat come sopra, sul server e da un client utilizzare netcat per tentare di connettersi alla porta aperta.

nc [-u] abcd NN

si collegherà alla porta NN su abcd, usando UDP se viene specificato il flag -u. È quindi possibile digitare l'input nell'estremità del client, che dovrebbe essere visualizzato sul server. In caso contrario, è necessario esaminare gli strumenti specifici del sistema e della rete.


2

Uso il fusore (nel pacchetto psmisc):

fuser -n tcp PORT

Riporta il pid del processo associato a questa porta.

Se questo è per sapere se una porta è in ascolto, il buon vecchio telnet fa il trucco :)

telnet 127.0.0.1 PORT


2

Questo one-liner ti fornirà un elenco di tutte le porte TCP in uso. Funziona in bash su Ubuntu e OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

L'elenco avrà una porta per riga senza ulteriori informazioni.


Lo adoro! gret drop in for bash script, eg:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki,

0

Un sacco di modi per farlo mi ha dato problemi perché non funzionavano su Linux e OSX e / o perché non mostravano le porte utilizzate dalla finestra mobile o i processi che erano di proprietà di root. Ora uso solo questo programma javascript:

(assicurati di avere un nodo installato e che funzioni con nodenon solo nodejso cambi il programma di conseguenza)

salva quanto segue in un file chiamato check-portnel tuo percorso o nel tuo progetto

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

impostare le autorizzazioni

chmod +x path/to/check-port

corri dal tuo percorso

check-port 8080

o eseguire dalla stessa directory

./check-port 8080

finora funziona abbastanza bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.