Ich versuche ein Skript zu erstellen, um zu testen, ob es möglich ist, sich über Telnet anzumelden. Ich möchte mich nicht wirklich einloggen. Erwarten ist daher nicht erforderlich. Ich möchte nur sehen, ob ich eine Anmeldeaufforderung erhalten kann. Dies wird von einem Linux-System aus durchgeführt, daher habe ich versucht, Folgendes zu verwenden nc
:
nc 192.168.10.5 23 -w 1 | grep -q login
if [ $? -eq 1 ]
then
echo "console is down"
fi
Das Problem ist, dass meine Konsole dadurch abstürzt. Es scheint -w
, als würde die Verbindung nicht wirklich unterbrochen.
Ich habe auch versucht, Telnet zu verwenden, aber ich kann die Verbindung innerhalb des Skripts nicht trennen. Ich versuche es
\echo "\035" | telnet 192.168.10.5
pausiert, bevor ich eine Anmeldeaufforderung erhalte.
shell
shell-script
telnet
netcat
rleon
quelle
quelle
Antworten:
Bash bietet Pseudogeräte, mit denen Sie wahrscheinlich vertraut sind, wie z
Auszug aus Bashs Manpage/dev/null
. Es gibt jedoch auch andere Geräte wie/dev/tcp
und/dev/udp
zum Testen von Netzwerkverbindungen, die Sie auch in Bash-Skripten verwenden können.Beispiel
Hier teste ich die Verbindung zu einem Host in meiner Domain namens skinner und prüfe, ob ich eine Verbindung zu dessen Port 22 herstellen kann.
HINWEIS: Port 22 ist für SSH, für Telnet verwenden Sie Port 23.
Großartig, also versuchen wir es mit einem Nicht-Port:
Nun, das funktioniert, aber es ist eine schrecklich hässliche Ausgabe. Keine Sorgen machen. Sie können das
echo > /dev/tcp/...
in einer Subshell ausführen und die gesamte Ausgabe umleiten,/dev/null
um es ein wenig zu bereinigen. Hier ist das Muster, das Sie in Ihren Shell-Skripten verwenden können:quelle
telnet
, dann läuft das standardmäßig auf Port 23, also wo slm 22 und 223 verwendet hat, verwenden Sie 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
gibt mir eine Login-Eingabeaufforderung, aber ich kann nicht ausbrechen.# cat afile ^]
Nach dem Laufen wird nur die Pause wiederholtafile
. Ich spiele immer noch damit, aber ich fühle mich fast da.Sie sind auf dem richtigen Weg
nc
, aber wenn Sie wirklich nur testen möchten, ob Sie die Verbindung herstellen können, verwenden Sie den-z
Schalter von nc :quelle
nc
ist das?nc
.Führen Sie
nc -z 192.168.10.5 23
die Eingabeaufforderung aus oder erstellen Sie ein Bash-Skript, um diesen Befehl auszuführen.Es gibt die folgende Anweisung zurück, wenn die Verbindung erfolgreich ist.
Verbindung zu 192.168.10.5 23 Port [tcp / *] erfolgreich!
quelle
Ich weiß, dass die Antwort etwas spät ist, aber ich habe nach Möglichkeiten gesucht, und die Verwendung von nc war aus Sicherheitsgründen keine Option. Hier ist es also, wenn es jemandem helfen kann.
Was in Ihrem anfänglichen Echo fehlte, war der Schalter -e:
Und ein Zeilenumbruch + der Befehl quit, um Telnet nach dem Trennen der Verbindung zu beenden. So wie:
Offensichtlich funktioniert das gleiche, wenn Sie einen Blockstil verwenden, wenn Anweisung und $ auswerten? wie du es anfangs getan hast:
Während wir dabei sind, hängt es, was nc betrifft, davon ab, welchen Geschmack von nc Sie haben (gnu ncat vs nmap-ncat). Gnu wird den Schalter -z haben:
während der andere nicht und du musst eine leere Leitung zu deinem nc leiten, um nicht hängen zu bleiben:
quelle