D
Deleted member 11691
Guest
Angenommen ich habe folgendes, simple Script, welches mit /opt/script.sh aufgerufen wird, super toll funktioniert und alle meine eingegebenen Texte/Zeilen wiedergibt:
Packe ich folgendes in meine inetd.conf
mache ich es über Telnet Port 23 erreichbar, was auch super klappt. Selbiges auch mit xinetd und folgender socat Zeile:
Wenn ich mich nun abwechselnd per Telnet und Netcat verbinde, passiert folgendes:
telnet auf telnetd:
Funktioniert.
netcat auf telnetd:
Streikt und ignoriert alle meine Benutzereingaben.
Wenn ich meine inetd/xinetd/socat Zeile so abändere:
passiert folgendes:
telnet auf bash ohne telnetd:
Schmeißt mir in dem Fall irgendwelche Random Telnet negotiation control characters rein, macht mir ein carriage return nach der ersten Zeile und Streikt danach komplett.
netcat auf bash ohne telnetd:
Funktioniert alles super.
Ändere ich den Port nun auf etwas anderes ab, sagen wir 'mal Port 8080, und fahre ich die gleiche socat Zeile ohne telnetd, probiert mein telnet client kein Telnet negotiation.
Wenn ich mir das nun auf anderen Geräten so ansehe, nehmen wir als Beispiel mal Public Cisco oder Juniper Route Server, sehe ich im Netcat output folgende Zeichenfolge, welche vermutlich auch zu der Gruppe an Telnet negotiation control characters gehört:
(die letzten 3 Character in dem Fall sind 1½ LFCR, also einfach ignorieren)
Nichtsdestotrotz komme ich mit netcat hier weiter als bei meinem Bash Script, kann Username/Password eingeben und habe keine komischen Control Character Artefakte.
Wie also ist es mir möglich, mein Bash Script so ausführen zu lassen (alle Lösungswege sind erwünscht) sodass es beiderseits mit Netcat und mit Telnet kompatibel ist ohne dafür nun 2 Ports "verschwenden" zu müssen?
Code:
#!/usr/bin/env bash
while read -p "> " variable; do
echo "You typed: ${variable}"
echo -n "${variable}" | hexdump -C
done
Packe ich folgendes in meine inetd.conf
Code:
telnet stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/telnetd -h -E /opt/script.sh
mache ich es über Telnet Port 23 erreichbar, was auch super klappt. Selbiges auch mit xinetd und folgender socat Zeile:
Code:
socat tcp-l:23,reuseaddr,fork,bind=0.0.0.0 exec:'/usr/sbin/telnetd -h -E /opt/script.sh'
Wenn ich mich nun abwechselnd per Telnet und Netcat verbinde, passiert folgendes:
telnet auf telnetd:
Code:
› telnet 5.9.181.167 23
Trying 5.9.181.167...
Connected to 5.9.181.167.
Escape character is '^]'.
> test mit telnet auf telnetd
You typed: test mit telnet auf telnetd
00000000 74 65 73 74 20 6d 69 74 20 74 65 6c 6e 65 74 20 |test mit telnet |
00000010 61 75 66 20 74 65 6c 6e 65 74 64 |auf telnetd|
0000001b
> ^DConnection closed by foreign host.
›
netcat auf telnetd:
Code:
› nc -v 5.9.181.167 23
Connection to 5.9.181.167 23 port [tcp/telnet] succeeded!
%& #'$test mit netcat auf telnetd
zweiter test mit netcat auf telnetd
^C
›
Wenn ich meine inetd/xinetd/socat Zeile so abändere:
Code:
socat tcp-l:23,reuseaddr,fork,bind=0.0.0.0 exec:'/opt/script.sh'
passiert folgendes:
telnet auf bash ohne telnetd:
Code:
› telnet 5.9.181.167 23
Trying 5.9.181.167...
Connected to 5.9.181.167.
Escape character is '^]'.
test mit telnet auf bash ohne telnetd
You typed: test mit telnet auf bash ohne telnetd
00000000 ff fd 03 ff fb 18 ff fb 1f ff fb 20 ff fb 21 ff |........... ..!.|
00000010 fb 22 ff fb 27 ff fd 05 ff fb 23 74 65 73 74 20 |."..'.....#test |
00000020 6d 69 74 20 74 65 6c 6e 65 74 20 61 75 66 20 62 |mit telnet auf b|
00000030 61 73 68 20 6f 68 6e 65 20 74 65 6c 6e 65 74 64 |ash ohne telnetd|
00000040 0d |.|
00000041
zweiter test mit telnet auf bash ohne telnetd^M^M^M^M^M^C^Z^[^]
telnet> quit
Connection closed.
›
netcat auf bash ohne telnetd:
Code:
› nc -v 5.9.181.167 23
Connection to 5.9.181.167 23 port [tcp/telnet] succeeded!
test mit netcat auf bash ohne telnetd
You typed: test mit netcat auf bash ohne telnetd
00000000 74 65 73 74 20 6d 69 74 20 6e 65 74 63 61 74 20 |test mit netcat |
00000010 61 75 66 20 62 61 73 68 20 6f 68 6e 65 20 74 65 |auf bash ohne te|
00000020 6c 6e 65 74 64 |lnetd|
00000025
zweiter test mit netcat auf bash ohne telnetd
You typed: zweiter test mit netcat auf bash ohne telnetd
00000000 7a 77 65 69 74 65 72 20 74 65 73 74 20 6d 69 74 |zweiter test mit|
00000010 20 6e 65 74 63 61 74 20 61 75 66 20 62 61 73 68 | netcat auf bash|
00000020 20 6f 68 6e 65 20 74 65 6c 6e 65 74 64 | ohne telnetd|
0000002d
^D›
Ändere ich den Port nun auf etwas anderes ab, sagen wir 'mal Port 8080, und fahre ich die gleiche socat Zeile ohne telnetd, probiert mein telnet client kein Telnet negotiation.
Wenn ich mir das nun auf anderen Geräten so ansehe, nehmen wir als Beispiel mal Public Cisco oder Juniper Route Server, sehe ich im Netcat output folgende Zeichenfolge, welche vermutlich auch zu der Gruppe an Telnet negotiation control characters gehört:
Code:
› nc route-server.opentransit.net 23 | hexdump -C
00000000 ff fb 01 ff fb 03 ff fd 18 ff fd 1f 43 0d 0a 0d |............C...|
[...]
Nichtsdestotrotz komme ich mit netcat hier weiter als bei meinem Bash Script, kann Username/Password eingeben und habe keine komischen Control Character Artefakte.
Wie also ist es mir möglich, mein Bash Script so ausführen zu lassen (alle Lösungswege sind erwünscht) sodass es beiderseits mit Netcat und mit Telnet kompatibel ist ohne dafür nun 2 Ports "verschwenden" zu müssen?