GNU/Linux >> Belajar Linux >  >> Linux

Menguji secara efisien apakah port terbuka di Linux?

Kejutan yang saya temukan baru-baru ini adalah bahwa Bash secara native mendukung koneksi tcp sebagai deskriptor file. Untuk menggunakan:

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

Saya menggunakan 6 sebagai deskriptor file karena 0,1,2 adalah stdin, stdout, dan stderr. 5 terkadang digunakan oleh Bash untuk proses anak, jadi 3,4,6,7,8, dan 9 seharusnya aman.

Sesuai komentar di bawah, untuk menguji mendengarkan di server lokal dalam skrip:

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

Untuk menentukan apakah seseorang mendengarkan, coba sambungkan dengan loopback. Jika gagal, maka port tersebut tertutup atau kita tidak diperbolehkan mengakses. Setelah itu, tutup koneksi.

Ubah ini untuk kasus penggunaan Anda, seperti mengirim email, keluar dari skrip jika gagal, atau memulai layanan yang diperlukan.


Ada yang sangat singkat dengan "jawaban cepat" di sini :Bagaimana cara menguji apakah port TCP jarak jauh dibuka dari skrip Shell?

nc -z <host> <port>; echo $?

Saya menggunakannya dengan 127.0.0.1 sebagai alamat "jarak jauh".

ini mengembalikan "0" jika port terbuka dan "1" jika port ditutup

mis.

nc -z 127.0.0.1 80; echo $?

-z Menentukan bahwa nc hanya perlu memindai daemon yang mendengarkan, tanpa mengirimkan data apa pun kepada mereka. Merupakan kesalahan untuk menggunakan opsi ini bersamaan dengan opsi -l.


Anda dapat menggunakan netstat dengan cara ini untuk hasil yang jauh lebih cepat:

Di Linux:

netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Di Mac:

netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Ini akan menampilkan daftar proses yang mendengarkan pada port (445 dalam contoh ini) atau tidak akan menghasilkan apa-apa jika port tersebut gratis.


Anda dapat menggunakan netcat untuk ini.

nc ip port < /dev/null

terhubung ke server dan langsung menutup koneksi lagi. Jika netcat tidak dapat terhubung, ia mengembalikan kode keluar bukan nol. Kode keluar disimpan dalam variabel $?. Sebagai contoh,

nc ip port < /dev/null; echo $?

akan mengembalikan 0 jika dan hanya jika netcat berhasil terhubung ke port.


Linux
  1. Cara Menguji Konektivitas Port [TCP/UDP] dari Server Linux

  2. Cara membuka port di Linux

  3. Kehabisan port jaringan Linux

  1. Telnet ke Port untuk Menguji Konektivitas Jaringan

  2. Cara Mengubah Port SSH Di Linux

  3. Cara membuka Appimage di Linux

  1. Linux – Port Serial Raspberrypi?

  2. Cara Memeriksa Port Terbuka pada Sistem Linux Jarak Jauh

  3. Periksa apakah port terbuka atau tertutup di server Linux?