Überprüfen Sie, ob der Remote-Host / -Port offen ist. GNU Netcat oder NMap können nicht verwendet werden. RHEL 7

17

Bei der Arbeit rollt das Infrastrukturteam neue VMs mit RHEL7 als Basisbetriebssystem aus. Dieses spezielle Image ist in nmap-ncatder Netcat-Version enthalten und NMap ist nicht installiert. Es ist uns untersagt, irgendetwas auf den Maschinen zu installieren.

Zuvor verwendeten wir GNU Netcat, das die -zOption hatte, einen entfernten Host / Port zu scannen, um zu prüfen, ob er offen war. Etwas wie das:

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

Wie kann ich den gleichen Test mit dem neuen System durchführen, ncatdas -zauf einem System, auf dem ich nicht installieren kann, keine Option hat nmap?

λ Jonas Gorauskas
quelle
1
Warum prüfen Sie, ob ein Port offen / geschlossen ist? Ist dies Teil einer Überwachungslösung?
Ewwhite
1
Wir arbeiten daran, -zin Ncat Fuß zu fassen, aber es wird eine Weile nicht in Red Hat sein, da bin ich mir sicher: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Ich muss überprüfen, ob zwischen Punkt A und Punkt B Netzwerk-ACLs geöffnet sind. Beispiel: Kann der App-Server TCP mit dem DB-Server auf Port 1521
kommunizieren?

Antworten:

16

Mit Bash können Sie eine Verbindung zu TCP- und / oder UDP-Ports herstellen, indem Sie zu speziellen Dateien umleiten:

/dev/tcp/host/port Wenn host ein gültiger Hostname oder eine gültige Internetadresse ist und port eine ganzzahlige Portnummer oder ein Dienstname, versucht Bash, den entsprechenden TCP-Socket zu öffnen.

/dev/udp/host/port Wenn host ein gültiger Hostname oder eine gültige Internetadresse und port eine ganzzahlige Portnummer oder ein gültiger Dienstname ist, versucht Bash, den entsprechenden UDP-Socket zu öffnen.

Wenn eine Datei nicht geöffnet oder erstellt wird, schlägt die Umleitung fehl.

Um zu testen, ob Sie eine Verbindung zu Port 80 auf www.example.com herstellen können, sollte Folgendes funktionieren:

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

Wenn der Port blockiert ist, wird entweder die Meldung "Verbindung abgelehnt" oder eine Zeitüberschreitung angezeigt.

HBruijn
quelle
1
Sie können auch zum Hafen
telneten
Ja, aber eine minimale Installation in RHEL 7 beinhaltet nicht die Telnet-RPM, bei der bash immer vorhanden ist.
HBruijn
2
"Ja wirklich?" Wie sich die Dinge verändert haben.
Ryan Babchishin
1
@RyanBabchishin und viele Sicherheitsrichtlinien erfordern das Entfernen des Telnet-Clients, da die Verwendung zur Anmeldung bei einer anderen Instanz unsicher ist. Ignorieren der umfangreichen Funktionen zur Fehlerbehebung.
Jason Martin
@JasonMartin Pfft
Ryan Babchishin
9

Obwohl Ncat noch nicht unterstützt -z, können Sie dasselbe Verhalten mit der Shell-Umleitung erzielen :

$ 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.

Das Verbindungs-Timeout kann mit der -wOption angepasst werden .

BEARBEITEN : Ncat 7.25BETA2 führte die -zOption ein, die wie bei GNU Netcat funktioniert , jedoch nur auf einzelnen Ports. Wenn Sie Portbereiche scannen müssen, sollten Sie Nmap verwenden.

bonsaiviking
quelle
2

Weder netcat, telnet noch nmap werden benötigt. Bash ist einfacher, portabler und effizienter.

Scheck öffnen

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

Open / Closed Check

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

Port Range Check

for i in $(seq 80 88); do (>/dev/tcp/example.com/80/$i) &>/dev/null && echo $i Open|| echo $i Closed; done
AGS
quelle