Próbuję utworzyć skrypt, aby sprawdzić, czy można zalogować się przez telnet. Nie chcę się naprawdę logować; dlatego oczekiwanie nie jest potrzebne. Chcę tylko sprawdzić, czy mogę uzyskać monit o zalogowanie. Odbywa się to z systemu Linux, więc próbowałem użyć nc
:
nc 192.168.10.5 23 -w 1 | grep -q login
if [ $? -eq 1 ]
then
echo "console is down"
fi
Problem polega na tym, że powoduje to blokowanie się konsoli. Wygląda na -w
to, że tak naprawdę nie porzuca połączenia.
Próbowałem także użyć telnet, ale nie jestem w stanie przerwać połączenia z poziomu skryptu. Próbować
\echo "\035" | telnet 192.168.10.5
pęka, zanim pojawi się monit o zalogowanie.
shell
shell-script
telnet
netcat
Rleon
źródło
źródło
Odpowiedzi:
Bash zapewnia pseudo urządzenia, które prawdopodobnie znasz
fragment strony podręcznika Basha/dev/null
. Istnieją jednak inne urządzenia, takie jak/dev/tcp
i/dev/udp
do testowania połączeń sieciowych, których można również używać w skryptach Bash.Przykład
Oto testuję połączenie z hostem w mojej domenie o nazwie skinner i sprawdzam, czy mogę połączyć się z jego portem 22.
UWAGA: Port 22 jest dla SSH, dla portu telnet użyj portu 23.
Świetnie, więc spróbujmy bez portu:
Cóż, to działa, ale jest okropnie brzydkie. Nie martwić się. Możesz uruchomić
echo > /dev/tcp/...
podpowłokę i przekierować wszystkie dane wyjściowe, aby/dev/null
je trochę wyczyścić. Oto wzór, którego możesz użyć w skryptach powłoki:źródło
telnet
, to domyślnie działa on na porcie 23, więc tam gdzie slm użył 22 i 223, użyj 23.# telnet 192.168.10.5 Trying 192.168.10.5... Connected to 192.168.10.5 (192.168.10.5). Escape character is '^]'. Connection closed by foreign host.
# cat < /dev/tcp/192.168.10.12/23
wyświetla monit o zalogowanie się, ale nie jestem w stanie się z niego wyrwać.# cat afile ^]
po uruchomieniu, że to tylko echo przerwy naafile
. Nadal się tym bawię, ale czuję, że już prawie jestem.Używasz właściwej ścieżki
nc
, ale jeśli naprawdę chcesz po prostu sprawdzić, czy możesz nawiązać połączenie, użyj przełącznika nc-z
:źródło
nc
?nc
.Wiem, że odpowiedź jest nieco spóźniona, ale szukałem, jak to zrobić, a użycie nc nie było rozwiązaniem ze względów bezpieczeństwa, więc tutaj może pomóc komuś.
W początkowym echu brakowało przełącznika -e:
I nowa linia + polecenie quit, aby wyjść z Telnet po rozłączeniu. Takie jak:
Oczywiście to samo zadziała, jeśli użyjesz stylu blokowego, jeśli instrukcja i ocenisz $? tak jak na początku:
Chociaż jesteśmy przy tym, jeśli chodzi o nc, zależy to od tego, jaki masz smak nc (gnu ncat vs nmap-ncat). Gnu będzie miał przełącznik -z:
podczas gdy drugi nie chce i będziesz musiał poprowadzić pustą linię do swojego nc, aby się nie utknąć:
źródło
uruchom
nc -z 192.168.10.5 23
w wierszu polecenia lub utwórz skrypt bash, aby uruchomić to polecenie.Zwraca poniższą instrukcję, jeśli połączenie się powiodło.
Połączenie z portem 192.168.10.5 23 [tcp / *] powiodło się!
źródło