Bash, muhtemelen aşina olabileceğiniz sahte cihazlar sağlar /dev/null
. Bununla birlikte , Bash komut dosyalarından da kullanabileceğiniz ağ bağlantılarını test etmek /dev/tcp
ve /dev/udp
test etmek için başka cihazlar da vardır.
Bash'in adam sayfasından alıntı
Bash, aşağıdaki tabloda açıklandığı gibi, yönlendirmelerde kullanıldıklarında çeşitli dosya adlarını özel olarak işler:
/dev/fd/fd
If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
File descriptor 0 is duplicated.
/dev/stdout
File descriptor 1 is duplicated.
/dev/stderr
File descriptor 2 is duplicated.
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port
is an integer port number or service name, bash attempts to
open a UDP connection to the corresponding socket.
Misal
İşte benim alan adı skinner adlı bir ana bilgisayar bağlantısını test ediyorum ve 22 numaralı bağlantı noktasına bağlanıp bağlanamayacağımı görüyorum.
NOT: Bağlantı noktası 22 SSH içindir, telnet kullanım bağlantı noktası 23 içindir.
$ echo > /dev/tcp/skinner/22 && echo "it's up" || echo "it's down"
it's up
Harika bir bağlantı noktası olmayan deneyelim:
$ echo > /dev/tcp/skinner/223 && echo "it's up" || echo "it's down"
bash: connect: Connection refused
bash: /dev/tcp/skinner/223: Connection refused
it's down
Bu işe yarıyor, ama çok çirkin bir çıktı. Endişe etmeyin. echo > /dev/tcp/...
Alt kabukta çalıştırabilir ve tüm çıktıları /dev/null
biraz temizlemek için yeniden yönlendirebilirsiniz . Kabuk komut dosyalarınızda kullanabileceğiniz desen şunlardır:
$ (echo > /dev/tcp/skinner/22) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's up
$ (echo > /dev/tcp/skinner/223) > /dev/null 2>&1 \
&& echo "it's up" || echo "it's down"
it's down