Risposte:
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
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 LISTEN
stato AND ( -a
) appartenente www-data
all'utente Apache ( ).
Tutte buone risposte.
Tuttavia, non menzionare se si è connessi al computer in questione. ; P
In caso contrario, nmap è tuo amico.
per cominciare provate:
nmap -O
target
Amap è anche una buona scelta che tenterà anche di indovinare il software del server afferrando le pagine dei banner.
per cominciare provate:
amap
target
1-6000
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)
netstat -tlnp
Mostra le t
porte cp che si l
aprono, mostra n
solo le ombre (non risolvere i nomi - rende più veloce) e mostra il p
rocess che sta ascoltando ( p
funziona solo se sei root)
netstat -ulnp
Mostra le u
porte dp che l
appaiono, mostra n
solo le ombre (non risolvere i nomi - rende più veloce) e mostra il p
rocess che sta ascoltando ( p
funziona solo se sei root)
netstat -unp
Mostra le u
porte dp che sono aperte ma non in ascolto, mostra n
solo le ombre (non risolvere i nomi, rende più veloce) e mostra il p
rocess che sta facendo l'ascolto ( p
funziona solo se sei root)
netstat -an
Mostra tutte le a
porte in uso, mostra n
solo 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
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.
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.
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
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 node
non solo nodejs
o cambi il programma di conseguenza)
salva quanto segue in un file chiamato check-port
nel 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.