Sprawdź, czy zdalny host / port jest otwarty - Nie można używać GNU Netcat ani NMap - RHEL 7

17

W pracy zespół ds. Infrastruktury wprowadza nowe maszyny wirtualne z RHEL7 zainstalowanym jako podstawowy system operacyjny. Ten konkretny obraz jest dostarczany z nmap-ncatwersją Netcat i nie ma zainstalowanej NMap. Nie możemy instalować niczego na maszynach.

Wcześniej korzystaliśmy z GNU Netcat, które mają -zopcję skanowania zdalnego hosta / portu w celu sprawdzenia, czy jest on otwarty. Coś takiego:

nc -z -v -w 3 remote.host.name 1234

Jak mogę wykonać tę samą kontrolę z nowym, ncatktóry nie ma -zopcji w systemie, w którym nie mogę zainstalować nmap?

λ Jonas Gorauskas
źródło
1
Dlaczego sprawdzasz, czy port jest otwarty / zamknięty? Czy to część rozwiązania do monitorowania?
ewwhite
1
Pracujemy nad dostaniem się -zdo Ncat, ale na pewno nie będzie w Red Hat, jestem pewien: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Muszę sprawdzić, czy listy ACL sieci są otwarte między punktem A a punktem B. Na przykład: czy serwer aplikacji może komunikować się TCP z serwerem DB na porcie 1521.
λ Jonas Gorauskas

Odpowiedzi:

16

Bash umożliwia połączenie z portami TCP i / lub UDP poprzez przekierowanie do specjalnych plików:

/dev/tcp/host/port Jeśli host jest prawidłową nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, Bash próbuje otworzyć odpowiednie gniazdo TCP.

/dev/udp/host/port Jeśli host jest prawidłową nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, Bash próbuje otworzyć odpowiednie gniazdo UDP.

Niepowodzenie otwarcia lub utworzenia pliku powoduje niepowodzenie przekierowania.

Aby przetestować, czy możesz połączyć się z portem 80 na www.example.com, powinny działać:

echo -n > /dev/tcp/www.example.com/80

Jeśli port jest zablokowany, pojawi się komunikat „odmowa połączenia” lub upłynął limit czasu.

HBruijn
źródło
1
Możesz także telnet do portu
Ryan Babchishin
Tak, ale minimalna instalacja w RHEL 7 nie obejmuje RPM telnet, w którym bash jest zawsze obecny.
HBruijn,
2
Naprawdę? Jak się zmieniło.
Ryan Babchishin,
1
@RyanBabchishin oraz wiele wskazówek dotyczących bezpieczeństwa wymaga usunięcia klienta Telnet, ponieważ używanie go do logowania do czegoś innego jest niepewne; ignorując jego szerokie zastosowania w rozwiązywaniu problemów.
Jason Martin
@JasonMartin Pfft
Ryan Babchishin
9

Chociaż Ncat jeszcze nie obsługuje -z, możesz uzyskać to samo zachowanie dzięki przekierowaniu powłoki:

$ ncat google.com 80 </dev/null >/dev/null && echo "yes"
yes
$ ncat google.com 81 </dev/null >/dev/null && echo "yes"
Ncat: Connection timed out.
$ ncat scanme.nmap.org 1234 </dev/null >/dev/null && echo "yes"
Ncat: Connection refused.

Limit czasu połączenia można ustawić za pomocą -wopcji.

EDYCJA: Ncat 7.25BETA2 wprowadził -zopcję, która działa tak samo jak GNU netcat, ale tylko na pojedynczych portach. Jeśli musisz skanować zakresy portów, powinieneś używać Nmap.

bonsaiviking
źródło
2

Nie są potrzebne ani netcat, telnet, ani nmap. Bash jest prostszy, przenośny i wydajniejszy.

Otwórz czek

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" 

Czek otwarty / zamknięty

(>/dev/tcp/example.com/80) &>/dev/null && echo "Open" || echo "Closed"

Kontrola zasięgu portów

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
AGS
źródło