HTTP Zugriff ueber Telnet und https Zugriff ueber s_client

Manchmal ist es noetig die Verbindung zu einem Webserver zu ueberpruefen ohne das ein Browser eine Rolle Spielt sowohl fuer http als auch fuer https Verbindungen. Zusaetzlich kann es sein das dieser Zugriff ueber einen Proxy erfolgen muss und dieser Proxy womoeglich noch eine Authorisierung verlangt. Eine Moeglichkeit das durchzufuehren sind die Programme telnet,s_client(openssl) und tunnelproxy.

HTTP zugriff mit Telnet

Als ich mich das erste Mal mit diesem Thema beschaeftigt habe reichte es


$ telnet www.gmx.de 80


GET /index.htm

einzugeben. Danach rauschte die Startseite von gmx im html Quellcode ueber den Bildschirm. Bei gmx geht das auch heute noch. Wenn man das aber z.b bei www.blog001.de macht dann erscheint erstmal nur der Quellcode einer Fehlerseite. Grund dafuer ist das HTTP Protokoll in der Version 1.1. Der Webserver von gmx scheint auch noch http/1.0 zu unterstuetzen oder er ist grundsaetzlich etwas toleranter eingestellt. Um den Quellcode von www.blog001.de per Telnet zu bekommen:

$ telnet www.blog001.de 80

und dann

get / HTTP/1.1
host: www.blog001.de

eingeben und dann 1x oder 2x Return druecken. Danach liefert der Server den HTTP Status und die Webseite wird im Quellcode angezeigt Beim ausprobieren der der obigen Beispiele ist mir aufgefallen das sich die verschiedene Web Server teilweise unterschiedlich verhalten, haengt vermutlich vom Server und seiner Konfiguration ab.

http Zugriff mit Telnet ueber einen Proxy

Auch die Vorgehensweise ueber einen Proxy ist heute etwas anders, Frueher reichte es:


$ telnet proxy.provider.de 80

und dann

GET http://www.gmx.de/index.html http/1.0

sowie zweimal return einzugeben und die Seite erschien im Quellcode.
Heute geht es so:

$ telnet proxy.provider.de 80

und dann

connect www.blog001.de:80 http/1.1

und dann ein oder zweimal Return. Der Proxy meldet dann

HTTP/1.0 200 Connection established

nach eingabe von:

get / HTTP/1.1
host: www.blog001.de

+ 2x Return, erscheint dann der Quellcode der Seite auf dem Bildschirm.

http Zugriff mit Telnet ueber einen Proxy der Basic Auth verlangt

Um einen Proxy der eine Autorisierung verlangt via Telnet zu nutzen muss erstmal geklaert werden welche auth Method verwendet werden soll. Bei einem Squid Proxy stehen z.b basic,NTLM,digest,Negotiate und OAuth zur Auswahl. Den base64 String der fuer eine Basic Auth benoetigt wird kann man mittels openssl erstellen. Erzeugen des Auth Strings:


echo -n username:password | openssl base64

Dann der Verbindungsaufbau:

$ telnet proxy.mit.auth.de 8080


get http://www.gmx.net/ http/1.1
Proxy-Authorization: Basic c4434ddsffdFdfirgendeinbase64String=

und zweimal Return druecken. Dann wird der html Quellcode auf der Konsole ausgegeben. Ich denke das die grundsaetzliche Vorgehensweise bei den anderen Auth Methoden mit der fuer die basic auth Identisch ist. Mir sind aber derzeit keine Programme bekannt die die entsprechenden Auth Strings erstellen koennen.

https Zugriff mit s_client

Telnet ist ein reines Klartextprotokoll und kann dementsprechend nicht direkt fuer https genutzt werden. Es braucht also einen Client der zwar ein Telnet Interface zur verfuegung stellt die fuer https noetige Verschluesselung aber gleich miterledigt. Ein Programm mit dem das geht ist openssl. Nach Eingabe von:


$ openssl s_client -connect www.gmx.net:443

verbindet sich openssl mit www.gmx.de und schmeisst einiges an Angaben zu der aufgebauten Verbindung auf den Bildschirm. Gibt man innerhalb dieser Verbindung nun ein:

get / HTTP/1.1
host: www.gmx.net
+ 2x Return, erscheint wieder der Quelltext der Seite auf dem Bildschirm.

https Zugriff mit s_client ueber einen proxy

Es finden sich zwar hinweise darauf das openssl Versionen existieren deren s_client ueber einen Proxy genutzt werden kann. Die Version von Debian squeeze,wheezy und Jessie kann es aber nicht. Einigen Quellen zufolge muss das Programm extra gepatcht werden um eine proxy Option zur verfuegung zu haben. Eine andere Moeglichkeit kann sein das Programm proxytunnel zu nutzen. Zuerst wird das Programm proxytunnel auf einer Konsole gestartet:


$ proxytunnel -p your.proxy.de:8080 -d www.gmx.de:443 -a 10001 -H „User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)\n“

von einer anderen Konsole greift man nun per openssl auf den Port zu den proxytunnel geoeffnet hat:

$ openssl s_client -connect localhost:10001

In dieser Verbindung kann man dann wieder eingeben:

get / HTTP/1.1
host: www.gmx.net

+ 2 Return und es erscheint wieder der Quelltext der Seite auf dem Bildschirm.
Zu den Optionen:
-p Adresse des Proxys
-d Destination, Zieladresse
-a Port auf dem proxytunnel auf dem eigenen Rechner laeuft.
-H User Agent String