Jak sprawdzić, czy port jest dostępny w systemie Ubuntu 8.04?

28

Czy jest jakieś polecenie, które mogę uruchomić z bash, które powie mi, czy port jest już otwarty?

Codebeef
źródło

Odpowiedzi:

37

Użyj „netstat”, aby sprawdzić aktualnie używane porty.

netstat -antp

Proto Recv-Q Send-Q Adres lokalny Adres obcy Stan PID / nazwa programu
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 127.0.0.1:53 0.0.0.0:* SŁUCHAJ 16297 / o nazwie     
Gąsienica
źródło
2
"netstat -antp | grep 80" gdzie 80 to numer portu do wyszukania.
Umair A.
13

To (netstat) jest najszybszym rozwiązaniem ...

netstat -lnt

... ale daje to większą kontrolę (kosztem prędkości (czasem dużej prędkości)) ...

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

Powyższy przykład pokazuje na przykład, że wszystkie porty TCP są otwarte i znajdują się w LISTENstanie AND ( -a) należącym do użytkownika Apache ( www-data).

Kserkses
źródło
8

Wszystkie dobre odpowiedzi.

Nie wspominasz jednak, czy jesteś zalogowany na danym komputerze. ; P

Jeśli nie, to nmap jest twoim przyjacielem.

na początek spróbuj:

nmap -Otarget

amap to także dobry wybór, który spróbuje również odgadnąć oprogramowanie serwera, chwytając strony banerów.

na początek spróbuj:

amaptarget1-6000

Mateusz
źródło
7

Próbować

lsof -i :<port number>

Jeśli otrzymasz jakieś wyniki, coś nasłuchuje i wiąże, np

# 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)
Dave Cheney
źródło
4
netstat -tlnp  

Pokaż tporty cp, które lpowstają, pokaż ntylko umbra (nie tłumacz nazwy - sprawia, że ​​było to szybsze) i pokaż pproces słuchania ( pdziała tylko, jeśli jesteś rootem)

netstat -ulnp  

Pokaż istniejące uporty lDP, pokaż ntylko umbra (nie tłumacz nazwy - przyspieszy) i pokaż pproces nasłuchujący ( pdziała tylko, jeśli jesteś rootem)

netstat -unp  

Pokaż uporty DP, które są otwarte, ale nie nasłuchują, pokaż ntylko umbra (nie tłumacz nazwy - sprawia, że ​​było to szybsze) i pokaż proces p, który wykonuje nasłuch ( pdziała tylko, jeśli jesteś rootem)

netstat -an

Pokaż wszystkie używane aporty, pokaż ntylko umbra - nie tłumacz nazw

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

na przykład

lsof -i tcp@localhost:25

aby sprawdzić, czy coś nasłuchuje na porcie localhost 25 / TCP lub

lsof -i tcp@0.0.0.0:636 

aby sprawdzić, czy są jakieś gniazda lokalne lub zdalne, nasłuchujące (lokalne) lub podłączone do (lokalne lub zdalne) dla dowolnego hosta / interfejsu

Jason Tan
źródło
2

lsof (lista otwartych plików) jest dobrym narzędziem do sprawdzenia, czy proces nasłuchuje na porcie

lsof -P | grep: <numer_portu>

netstat to dobre narzędzie do sprawdzania, czy są jakieś aktywne połączenia.

netstat -n | grep: <numer_portu>

Jamie
źródło
2

Nie wspominasz o tym, jakiego protokołu chcesz użyć, tj. TCP lub UDP - i ważne jest również, aby zdać sobie sprawę, że „port” nie jest tak szczegółowy, jak system obsługuje jednoznaczne gniazda. Np. Jeśli twój system ma wiele adresów IP, to port 80 może być używany na wszystkich adresach IP (albo aplikacja przypisała „0.0.0.0” lub „::” albo do każdego adresu IP kolejno), lub może być w używaj tylko w podzbiorze tych adresów IP.

Najlepszym i najpewniejszym sposobem ustalenia, czy port / adres jest wolny i dostępny, jest próba połączenia się z nim. Netcat jest do tego przydatny.

nc -l [-s abcd] -p NN

spróbuje połączyć się z portem TCP NN na (opcjonalnie, domyślnie będą to wszystkie adresy) abcd Dodaj opcję -u, aby zrobić to samo w UDP.

Następnie, aby zapytać, czy port jest rzeczywiście „otwarty”, musisz zapytać o potencjalne reguły zapory. Znowu najłatwiej jest spróbować połączyć się z portem. Użyj netcat jak wyżej, na serwerze, a od klienta użyj netcat, aby spróbować połączyć się z otwartym portem.

nc [-u] abcd NN

połączy się z portem NN na abcd, używając UDP, jeśli podano opcję -u. Następnie możesz wpisać dane wejściowe na końcu klienta i powinny pojawić się na serwerze. Jeśli nie, musisz zajrzeć do narzędzi specyficznych dla systemu i sieci.

colmmacc
źródło
2

Używam fuser (w pakiecie psmisc):

fuser -n tcp PORT

Zwraca pid procesu związanego z tym portem.

Jeśli to ma wiedzieć, czy port nasłuchuje, stary dobry telnet załatwia sprawę :)

telnet 127.0.0.1 PORT

Paź
źródło
2

Ten jednowierszowy wyświetla listę wszystkich używanych portów TCP. Działa w trybie bash na Ubuntu i OS X.

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

Lista będzie miała jeden port na linię bez żadnych dodatkowych informacji.

Josiah Johnston
źródło
Kocham to! gret wpadł na skrypty bash, np .: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

Wiele sposobów na zrobienie tego sprawiło mi problemy, ponieważ nie działały na Linuksie i Osxie i / lub ponieważ nie pokazały portów używanych przez dokera lub procesów, które były własnością roota. Teraz używam tylko tego programu javascript:

(upewnij się, że masz zainstalowany węzeł i że działa on nodenie tylko nodejslub odpowiednio zmień program)

zapisz następujące w pliku nazwanym check-portna ścieżce lub w projekcie

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

ustawić uprawnienia

chmod +x path/to/check-port

uciekaj ze swojej ścieżki

check-port 8080

lub uruchom z tego samego katalogu

./check-port 8080

jak dotąd działa całkiem dobrze.

Alex028502
źródło