Odpowiedzi:
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
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 LISTEN
stanie AND ( -a
) należącym do użytkownika Apache ( www-data
).
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 -O
target
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:
amap
target
1-6000
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)
netstat -tlnp
Pokaż t
porty cp, które l
powstają, pokaż n
tylko umbra (nie tłumacz nazwy - sprawia, że było to szybsze) i pokaż p
proces słuchania ( p
działa tylko, jeśli jesteś rootem)
netstat -ulnp
Pokaż istniejące u
porty l
DP, pokaż n
tylko umbra (nie tłumacz nazwy - przyspieszy) i pokaż p
proces nasłuchujący ( p
działa tylko, jeśli jesteś rootem)
netstat -unp
Pokaż u
porty DP, które są otwarte, ale nie nasłuchują, pokaż n
tylko umbra (nie tłumacz nazwy - sprawia, że było to szybsze) i pokaż proces p
, który wykonuje nasłuch ( p
działa tylko, jeśli jesteś rootem)
netstat -an
Pokaż wszystkie używane a
porty, pokaż n
tylko 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
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.
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.
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
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 node
nie tylko nodejs
lub odpowiednio zmień program)
zapisz następujące w pliku nazwanym check-port
na ś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.