It’s easy to forget how to telnet to a port and talk to a daemon.
HTTPS
HTTPS 1.1 – Without authentication
# openssl s_client -quiet -host maxx.shmoo.com -port 443 depth=0 C = US, ST = Maryland, L = Beltsville, O = The Shmoo Group, CN = maxx.shmoo.com, emailAddress = gdead@shmoo.com verify error:num=18:self signed certificate verify return:1 depth=0 C = US, ST = Maryland, L = Beltsville, O = The Shmoo Group, CN = maxx.shmoo.com, emailAddress = gdead@shmoo.com verify error:num=10:certificate has expired notAfter=Oct 22 17:37:18 2017 GMT verify return:1 depth=0 C = US, ST = Maryland, L = Beltsville, O = The Shmoo Group, CN = maxx.shmoo.com, emailAddress = gdead@shmoo.com notAfter=Oct 22 17:37:18 2017 GMT verify return:1 GET / HTTP/1.1 Host: adam.shand.net HTTP/1.1 200 OK Date: Thu, 16 Jan 2020 21:20:01 GMT Server: Apache/2.4.18 (Ubuntu) Last-Modified: Sat, 17 Dec 2016 00:13:59 GMT ETag: "d-543cf902bd308" Accept-Ranges: bytes Content-Length: 13 Content-Type: text/html Where's Wik? ^D
HTTP
Note that the 404 response for the authenticated example is because I deliberated specified a URL that doesn’t exist.
HTTP 1.1 – Without authentication
# telnet maxx.shmoo.com 80 Trying 205.134.188.171... Connected to maxx.shmoo.com. Escape character is '^]'. GET / HTTP/1.1 Host: adam.shand.net HTTP/1.1 200 OK Date: Wed, 18 Mar 2009 22:02:05 GMT Server: Apache/2.2.9 (Debian) DAV/2 PHP/5.2.6-1+lenny2 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Last-Modified: Sun, 20 Jul 2008 08:06:39 GMT ETag: "2a810d8-131a-45270120561c0" Accept-Ranges: bytes Content-Length: 4890 Content-Type: text/html; charset=UTF-8
HTTP 1.1 – With failed authentication
misfire(shand)$ telnet maxx.shmoo.com 80 Trying 67.207.134.156... Connected to maxx.shmoo.com. Escape character is '^]'. GET / HTTP/1.1 Host: maxx.shmoo.com Authorization: Basic YWRhbTpzZWNyZXQK= HTTP/1.1 401 Authorization Required Date: Wed, 18 Mar 2009 22:03:52 GMT Server: Apache/2.2.8 (Debian) PHP/5.2.5-3 with Suhosin-Patch WWW-Authenticate: Basic realm="maxx.shmoo.com" Content-Length: 516 Content-Type: text/html; charset=iso-8859-1
HTTP 1.1 – With successful authentication
# telnet maxx.shmoo.com 80 Trying 192.168.17.179... Connected to maxx.shmoo.com. Escape character is '^]'. GET /nothere HTTP/1.1 Host: maxx.shmoo.com Authorization: Basic YWRhbTpzZWNyZXQK= HTTP/1.1 404 Not Found Date: Wed, 18 Mar 2009 22:07:53 GMT Server: Apache/1.3.34 (Debian) mod_perl/1.29 DAV/1.0.3 PHP/5.2.0-8+etch11 Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1
IMAP
Need to remember details of how to list, retrieve and delete messages.
# telnet localhost 143 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK dovecot ready. AA CAPABILITY * CAPABILITY IMAP4rev1 SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN LISTEXT LIST-SUBSCRIBED STARTTLS AUTH=PLAIN AA OK Capability completed. AD LOGIN adam secret AD OK Logged in. a4 LIST "" * * LIST (\HasChildren) "." INBOX * LIST (\HasNoChildren) "." "Foo" * LIST (\HasChildren) "." "Bar" a5 SELECT Foo * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 194 EXISTS * 0 RECENT * OK [UIDVALIDITY 1047965829] UIDs valid * OK [UIDNEXT 272] Predicted next UID a5 OK [READ-WRITE] Select completed. AE logout * BYE Logging out AE OK Logout completed. Connection closed by foreign host.
NNTP
# telnet localhost 119 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 200 news NNTPCache server V3.0.1 [see www.nntpcache.org] (c) 1996-2002 Julian Assange <proff@iq.org> May 27 2004 ready (posting ok, 72154 groups available). 215 24hoursupport.helpdesk 730507 600741 y ...<snip>... gmane.comp.java.dna.devel 15 1 m . listgroup gmane.comp.java.dna.devel 211 Article list follows 1 ...<snip>... 15 . GROUP gmane.comp.java.dna.devel 211 15 1 15 gmane.comp.java.dna.devel article 12 220 12 <c76j3b$neq$1@sea.gmane.org> article Path: main.gmane.org!not-for-mail From: Mauro Talevi <mauro.talevi-hQ+s5KbX5YmGglJvpFV4uA@public.gmane.org> Newsgroups: gmane.comp.java.dna.devel Subject: Re: Release 1.1 Date: Tue, 04 May 2004 00:09:13 +0100 Lines: 10 ...<snip>... . quit 205 Connection closed by foreign host.
POP3
# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK dovecot ready. user adam +OK pass secret +OK Logged in. list +OK scan listing follows 1 2667 2 2763 ...<snip> ... 1120 2490 1121 122715 1122 2750 . retr 1120 +OK 2490 octets Return-Path: <support@...> X-Original-To: adam@... Delivered-To: adam@... Received: from flexo.sydneywireless.com (flexo.sydneywireless.com [202.93.176.34]) by ronin.spack.org (Postfix) with ESMTP id E257C2C103 for <adam@...>; Sun, 13 Jun 2004 16:54:12 -0700 (PDT) Received: (qmail 1173 invoked by uid 0); 13 Jun 2004 23:54:04 -0000 Date: 13 Jun 2004 23:54:04 -0000 Message-ID: <20040613235404.1172.qmail@flexo.sydneywireless.com> To: adam@... Subject: Your new certificate for ssl.spack.org From: support@... -----BEGIN CERTIFICATE----- MIIFRDCCAyygAwIBAgIDAJG5MA0GCSqGSIb3DQEBBAUAMHkxEDAOBgNVBAoTB1Jv ...<snip> ... 5o4Wey39C/U= -----END CERTIFICATE----- . dele 1120 +OK Marked to be deleted. quit +OK Logging out, messages deleted. Connection closed by foreign host.
SMTP
SMTP without authentication
# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 ronin.spack.org ESMTP We own your foo. ehlo ronin.spack.org 250-ronin.spack.org 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XVERP 250 8BITMIME MAIL FROM: adam@domain.com 250 Ok RCPT TO: adam@otherdomain.com 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> Subject: there must be a blank line between the end of the headers and the start of the message body this is the message body, type a period on a line by itself to end the message body. . 250 Ok: queued as 9AA8D2C125 quit 221 Bye Connection closed by foreign host.
SMTP with STARTLS and SMTPAUTH (AUTH LOGIN)
On the below server there are two authentication modes available: AUTH LOGIN
and AUTH PLAIN
. Depending on which you choose the AUTH line looks different.
Below is an example of AUTH LOGIN
. Note the weird 334
lines, they are base64 encoded “Username:” and “Password:” prompts. After each prompt enter a base64 encoded username/password (without the trailing =’s).
puka(adam)$ echo relay@spack.org | base64 cmVsYXlAc3BhY2sub3JnCg== puka(adam)$ echo super.secret | base64 c3VwZXIuc2VjcmV0Cg== puka(adam)$ swaks -tls --server mera.spack.org --to adam@hotmail.com --from relay@spack.org --auth plain --auth-user relay@spack.org --header-X-Test "test email" Password:super.secret === Trying mera.spack.org:25… === Connected to mera.spack.org. -> STARTTLS <- 220 2.0.0 Ready to start TLS ~> EHLO puka.local <~ 250-mera.spack.org <~ 250-AUTH PLAIN LOGIN <~ 250-AUTH=PLAIN LOGIN ~> AUTH LOGIN <~ 334 VXNlcm5hbWU6 ~> cmVsYXlAc3BhY2sub3JnCg <~ 334 UGFzc3dvcmQ6 ~> c3VwZXIuc2VjcmV0Cg <~ 235 2.7.0 Authentication successful ~> MAIL FROM:relay@mera.spack.org <~ 250 2.1.0 Ok ~> RCPT TO:adam@hotmail.com <~ 250 2.1.5 Ok ~> DATA <~ 354 End data with . ~> Date: Wed, 28 Apr 2021 15:21:18 +1200 ~> To: adam@hotmail.com ~> From: relay@mera.spack.org ~> Subject: test Wed, 28 Apr 2021 15:21:18 +1200 ~> Message-Id: 20210428152118.017093@puka.local ~> X-Mailer: swaks v20201014.0 ~> X-Test: test email ~> ~> This is a test mailing ~> ~> . <~ 250 2.0.0 Ok: queued as 689F1BF700 ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host.
Alternatively AUTH PLAIN
authenticates on a single line with a null character delimited, base64 encoded username / password combination (eg. \0adam\0secret
). I haven’t figured out how to make this work yet telnet so just use AUTH LOGIN
.