Periksa apakah host / port jarak jauh terbuka - Tidak dapat menggunakan GNU Netcat atau NMap - RHEL 7

17

Di tempat kerja, tim infrastruktur meluncurkan VM baru dengan RHEL7 diinstal sebagai OS dasar. Gambar khusus ini hadir dengan nmap-ncatversi Netcat dan tidak memiliki NMap diinstal. Kami dilarang memasang apa pun di mesin.

Sebelumnya, kami menggunakan GNU Netcat yang memiliki -zopsi untuk memindai host / port jarak jauh untuk memeriksa apakah itu terbuka. Sesuatu seperti ini:

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

Bagaimana saya bisa mencapai pemeriksaan yang sama dengan yang baru ncatyang tidak memiliki -zopsi pada sistem di mana saya tidak dapat menginstal nmap?

λ Jonas Gorauskas
sumber
1
Mengapa Anda memeriksa untuk melihat apakah port terbuka / tertutup? Apakah ini bagian dari solusi pemantauan?
ewwhite
1
Kami sedang berupaya untuk masuk -zke Ncat, tapi itu tidak akan berada di Red Hat untuk sementara waktu, saya yakin: github.com/nmap/nmap/pull/444
bonsaiviking
@ewwhite Saya harus memeriksa apakah jaringan ACL terbuka antara titik A dan titik B. Misalnya: bisakah server aplikasi berbicara TCP ke server DB pada port 1521.
λ Jonas Gorauskas

Jawaban:

16

Bash memungkinkan Anda untuk terhubung ke port TCP dan / atau UDP dengan mengarahkan ke file khusus:

/dev/tcp/host/port Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, Bash mencoba untuk membuka soket TCP yang sesuai.

/dev/udp/host/port Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, Bash mencoba untuk membuka soket UDP yang sesuai.

Kegagalan untuk membuka atau membuat file menyebabkan pengalihan gagal.

Jadi untuk menguji apakah Anda dapat terhubung ke port 80 di www.example.com, yang berikut ini akan berfungsi:

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

Jika port diblokir, Anda mendapat pesan "koneksi ditolak" atau batas waktu.

HBruijn
sumber
1
Anda dapat melakukan telnet ke port juga
Ryan Babchishin
Ya, tetapi pemasangan minimal di RHEL 7 tidak termasuk RPM telnet di mana bash selalu ada.
HBruijn
2
Betulkah? Bagaimana semuanya berubah.
Ryan Babchishin
1
@RyanBabchishin plus banyak pedoman keamanan memerlukan penghapusan klien telnet dengan dasar bahwa menggunakannya untuk masuk ke sesuatu yang lain tidak aman; mengabaikan penggunaan pemecahan masalah yang luas.
Jason Martin
@JasonMartin Pfft
Ryan Babchishin
9

Meskipun Ncat belum mendukung -z, Anda bisa mendapatkan perilaku yang sama dengan pengalihan shell:

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

Waktu tunggu koneksi dapat disesuaikan dengan -wopsi.

EDIT: Ncat 7.25BETA2 memperkenalkan -zopsi yang berfungsi seperti halnya dengan GNU netcat, tetapi hanya pada port tunggal. Jika Anda perlu memindai rentang port, Anda harus menggunakan Nmap.

bonsaiviking
sumber
2

Baik netcat, telnet atau nmap tidak diperlukan. Bash lebih sederhana, portabel dan lebih efisien.

Buka cek

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

Buka / Tutup Cek

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

Pemeriksaan Rentang Port

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