Počítačové sítě/LAB: Hypertext Transfer Protocol

Požadavky

editovat
  • 1x WWW server
  • 1x PC
  • Instalovaný program Wireshark
  • Instalovaný program Telnet

Zadání

editovat

Připojit se programem telnet na webový server a přes HTTP příkazy stáhnout webovou stránku. Toto zachytávat ve Wiresharku a identifikovat packet s daty.

Schéma

editovat
 
WWW server a připojený klient
  • Připojit se webovým prohlížečem na webový server
  • Připojit se programem telnet na webový server
  • HTTP příkazem přenést soubor
  • Porovnat originální přenesená data s originálními
  • Celou komunikaci odchytnout programem Wireshark a identifikovat přenášená data v packetu

Řešení

editovat

Spuštění WWW serveru

editovat

Vytvořit dočasný adresář pro webové stránky.

student@www-server:~$ mkdir /tmp/www-dir
student@www-server:~$ cd /tmp/www-dir

Vytvořit .html soubor v tomto adresáři.

student@www-server:~$ touch index.html

Zapsat do něj testovací zprávu nebo soubor upravit tak, aby obsahoval jednoduchou webovou stránku.

student@www-server:~$ echo "TEST" > index.html

Pro účely LABu lze spustit jednoduchý WWW server, který je součástí Pythonu.

student@www-server:/tmp/www-dir$ python -mSimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

Ve výchozím nastavení je www server spuštěný na portu 8000. Pro spuštění na dobře známém portu pro WWW služby (port 80) je třeba mít práva uživatele root a specifikovat port.

root@www-server:/tmp/www-dir$ python -mSimpleHTTPServer 80
Serving HTTP on 0.0.0.0 port 80 ...

Přenos dat přes HTTP

editovat
  • Po zadání IP adresy WWW serveru do webového prohlížeče se zobrazí jednoduchá webová stránka, spojení na WWW server je tedy funkční.
  • Zapnout Wireshark
  • Pomocí programu telnet vytvořit socket na IP adresu WWW serveru a dobře známý port webových služeb.
student@client:~$ telnet 192.168.100.242 80
Trying 192.168.100.242...
Connected to 192.168.100.242.
Escape character is '^]'.

Je třeba použít IP adresu WWW serveru, která se může od výše uvedené IP adresy lišit.

  • Použít HTTP příkaz GET[1].
GET / HTTP/1.0<enter>
<enter>
  • Od WWW serveru přijde odpověď.
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.9
Date: Fri, 13 May 2016 10:30:44 GMT
Content-type: text/html
Content-Length: 115
Last-Modified: Fri, 13 May 2016 10:22:06 GMT

TEST
Connection closed by foreign host.
  • Odpověď obsahuje hlavičku a data odpovídající obsahu souboru (stejný obsah, který je vidět při zadání IP adresy WWW serveru do webového prohlížeče).
  • Vypnout Wireshark.
  • V odchytaných datech filtrovat podle IP adresy (ip.addr==192.168.100.242), portu (tcp.port==80) nebo protokolu (http).
  • Najít packet, ve kterém byla přenesena data.

Závěr

editovat

HTTP je protokol, který slouží pro přenos webových stránek. V nejjednodušší podobě jsou webové stránky textové soubory formátu HTML - Hypertext Markup Language[2]. Webový prohlížeč je program, který vytvoří socket na webový server a přes HTTP přenáší jenotlivé HTML subory.

V současné době je implementace webových serverů složitější - jsou implementovány VirtualHosts, rewrite rules, HTTPS. Většina serverů dostupných v internetu tak místo HTTP/1.0 200 OK vrací HTTP/1.0 301 Moved Permanently.

Reference

editovat
  1. https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
  2. https://en.wikipedia.org/wiki/HTML