Portál AbcLinuxu, 10. května 2025 08:49

Dotaz: Šifrovaný telnet a parsování /etc/services

xkucf03 avatar 23.2.2008 20:18 xkucf03 | skóre: 49 | blog: xkucf03
Šifrovaný telnet a parsování /etc/services
Přečteno: 568×
Odpovědět | Admin

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
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.2.2008 21:03 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services
Odpovědět | | Sbalit | Link | Blokovat | Admin
getent services SLUŽBA
25.2.2008 08:52 Radovan Garabík
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services
Odpovědět | | Sbalit | Link | Blokovat | Admin
V čom sa to líši od tohoto?
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'

xkucf03 avatar 25.2.2008 11:03 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services
No to už je pak skoro jedno, jestli píšu telnet -z ssl nebo openssl s_client -connect :-) OpenSSL mi ještě vypisuje certifikát serveru a další info, ale použitelné je oboje.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
25.2.2008 16:27 Ivan
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services
Uplne jedno to neni. Teda ono zalezi k cemu ten telnet potrebujete. Behem pripojovani se umi telnet dohodnout s telnet daemonem na vlastnostech terminalu, hodnotach env. promennych a dalsich(myslim ze sem patri i auth. pres kerberos). Takovehle veci openssl nepodporuje.
xkucf03 avatar 25.2.2008 17:15 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services

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?

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
25.2.2008 20:58 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services

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]);'

xkucf03 avatar 25.2.2008 22:48 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Šifrovaný telnet a parsování /etc/services
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");
}
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.