Portál AbcLinuxu, 10. května 2025 08:49
Už mě nebavilo psát openssl s_client...
, pokaždé, když jsem se chtěl někam šifrovaně připojit, tak jsem si napsat skript, který by se používal podobně snadno jako příkaz telnet
a pojmenoval jsem ho telnets
.
Mým potřebám skript vyhovuje, ale říkal jsem si, že by bylo hezčí, kdyby se jako druhý parametr mohl zadat název protokolu z /etc/services
místo čísla portu (i u jiných protokolů, než co jsem si tam vypsal do kódu).
Tak se chci zeptat, jestli nevíte o standardní funkci (která v systému určitě už je, možná i několikrát) pro získání čísla portu z daného souboru na základě názvu protokolu.
Nezajímá mě až tak nějaké vlastní rozparsování pomocí pomocí sedu atd., jako spíš něco, co v systému už existuje (jasně, můžu si to napsat sám, ale to mi přijde podobně hloupé jako psát si vlastní implementaci HTTP protokolu, místo abych použil wget nebo nějakou standardní knihovnu)
#! /bin/sh ######################################################## # telnets - obal pro openssl s_client, # # aby šel používat podobně snadno jako příkaz telnet # # Autor: http://frantovo.cz/ # # Datum: 26.1. 2008 # ######################################################## SERVER=${1} PORT=${2} # rozpoznání známých služeb if [ "${PORT}" == "https" ]; then PORT="443"; fi if [ "${PORT}" == "smtp" ]; then PORT="25"; fi if [ "${PORT}" == "smtps" ]; then PORT="465"; fi # vlastní připojení if [ "${PORT}" == "25" ]; then openssl s_client -starttls smtp -connect ${SERVER}:${PORT}; else openssl s_client -connect ${SERVER}:${PORT}; fi
getent services SLUŽBA
dpkg -p telnet-ssl Package: telnet-ssl ... Description: The telnet client with SSL encryption support The telnet command is used for interactive communication with another host using the TELNET protocol. . SSL telnet replaces normal telnet using SSL authentication and encryption. It interoperates with normal telnetd in both directions. It checks if the other side is also talking SSL, if not it falls back to normal telnet protocol. . Advantages over normal telnet: Your passwords and the data you send will not go in cleartext over the line. Nobody can get it with tcpdump or similar tools. With SSLtelnet you can also connect to https-server like https://www.mozilla.org. Just do 'telnet -z ssl www.mozilla.org 443'
Používám to spíš na různé debugování, ladění (SMTP, HTTPS, POP3) nebo čtení a posílání pošty
Telnet jsem pro jeho pravý smysl nepoužíval snad nikdy (k tomu jsem měl odjakživa SSH)
Příkaz getent, jak psal petr_p, je zajímavý (díky), akorát mi vyhodí celý řádek, což je jako kdybych si ten soubor grepnul, a beztak z toho musím regulárním výrazem vytahovat to číslo.
BTW: je dnes nějaký argument pro používání telnetu+ssl místo SSH?
Příkaz getent, jak psal petr_p, je zajímavý (díky), akorát mi vyhodí celý řádek, což je jako kdybych si ten soubor grepnul, a beztak z toho musím regulárním výrazem vytahovat to číslo.
Není, protože to jde přes nsswitch, protože to najde nejvýše jeden výsledek a vrátí jej v kanonickém tvaru.
Místo sedu si to můžete nechat vypočítat perlem: perl -le 'print ((getservbyname("https", "tcp"))[2]);'
perl -le 'print ((getservbyname("https", "tcp"))[2]);'Díky, přesně tohle jsem hledal. Skript teď vypadá takhle a funguje podle mých představ
#! /usr/bin/perl ######################################################## # telnets - obal pro openssl s_client, # # aby šel používat podobně snadno jako příkaz telnet # # Autor: http://frantovo.cz/ # # Datum: 25.2. 2008 # ######################################################## $server = $ARGV[0]; $portX = $ARGV[1]; # převedeme text na číslo $port = (getservbyname($portX, "tcp"))[2]; # pokud se převod nepovedl, použijeme původní parametr if (!$port) { $port = $portX; } if ($port == 25) { exec("openssl s_client -starttls smtp -connect $server:$port"); } else { exec("openssl s_client -connect $server:$port"); }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.