it-swarm.com.de

Woher wissen Webserver, ob Sie direkten IP-Adresszugriff verwenden?

Einige Webserver geben beim Zugriff über ihre IP-Adresse den Fehler zurück, dass der direkte Zugriff auf die IP-Adresse nicht zulässig ist.

Ich habe mich schon seit einiger Zeit gefragt, wie das funktioniert. Ich meine, löst der Browser die IP-Adresse nicht immer auf und stellt eine Verbindung her? Überspringt "Direkter IP-Adresszugriff" nicht einfach DNS? Woher weiß der Remote-Server überhaupt , dass Sie DNS übersprungen haben ?

64
Joseph A.

Um Ihre Frage zu beantworten , wie es weiß , hat es damit zu tun, was Ihr Browser an den Server sendet.

Sie haben Recht, dass das System es immer in eine IP-Adresse auflöst, aber der Browser sendet die URL, auf die Sie zugreifen wollten, in den HTTP-Header.

Hier ist ein Beispiel-Header, den ich online gefunden habe und der so geändert wurde, dass er aussieht, als hätten Sie Firefox unter Windows verwendet und Apple.com in die Adressleiste eingegeben:

GET / HTTP/1.1
Host: Apple.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

So würde der Header aussehen, wenn Sie seine IP-Adresse verwenden:

GET / HTTP/1.1
Host: 17.142.160.59
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Beide werden über einen Socket an dieselbe IP-Adresse gesendet, aber der Browser teilt dem Server mit, auf was zugegriffen wurde.

Warum? Da Webserver mit derselben IP-Adresse möglicherweise mehrere Sites hosten und für jede unterschiedliche Seiten bereitstellen. Es kann nicht unterscheiden, wer welche Seite anhand der IP-Adresse haben möchte, da alle dieselbe Seite haben - es kann sie jedoch anhand des HTTP-Headers unterscheiden.

91
iAdjunct

Mit dem HTTP 1.1-Protokoll (die frühere HTTP 1.0-Version ist seit geraumer Zeit veraltet und wird daher wahrscheinlich nicht von einer neueren Version eines Browsers verwendet) wurde der Host -Header eingeführt. Für HTTP 1.1 ist dies eine erforderliche Kopfzeile, die von einem Browser ausgegeben werden muss . Der Domänenname wird vom Browser in diese Zeile eingefügt, z. Host: example.com. Der Webserver weiß also, auf welche Website der Browser von dieser Leitung aus zugreifen möchte. Da ein Webserver möglicherweise Dutzende von Websites unterstützt, ist diese Zeile wichtig, um festzustellen, auf welcher Website sich die angeforderte Seite befindet. Angenommen, der Browser möchte auf die Homepage einer Site auf example.com zugreifen. Er gibt die folgende Zeile an den Server aus, wenn eine Verbindung zum Server hergestellt wird:

GET / HTTP/1.1

Diese Zeile gibt an, dass der Browser das Stammdokument abrufen möchte, d. H. "/" Für die Website. Wenn Sie auf /somedir/testpage.html zugreifen möchten, befindet sich GET /somedir/testpage.html in der Zeile "get". Der Zeile folgt die folgende Zeile:

Host: example.com

Wenn der Webserver also die Webseiten example.com, someothersite.com, yetanothersite.org usw. unterstützt, weiß er, dass er die Hauptseite für example.com zurückgeben sollte. Wenn diese Zeile nicht angezeigt wird oder in der Zeile Host kein Domänenname aufgeführt ist, weiß das Programm nicht, welche Homepage der Website zurückgegeben werden soll. Daher wird möglicherweise stattdessen eine Fehlermeldung oder die Homepage für eine "Standard" -Site für den Server zurückgegeben.

Sie können dieselben Befehle, die ein Browser ausgibt, mithilfe des Telnet-Protokolls ausgeben, z. B. telnet example.com 80 von einer Linux-Shell-Eingabeaufforderung oder einem Apple OS X Terminalfenster zum Herstellen einer Verbindung mit dem Standard-HTTP-Port, Port 80 - siehe Testen des Zugriffs auf eine Website mit PuTTY für Schritte, um dies mit PuTTY auf einem Windows-System zu tun.

21
moonpoint

Dies liegt am HTTP-Header Host:. Dies ist sehr nützlich, um mehrere Websites unter derselben IP-Adresse zu hosten. Zum Beispiel http://www.k7dxs.net/ und http://www.philipgrimes.com/ haben beide dieselbe IP-Adresse. Aufgrund des Host:-Headers können jedoch zwei verschiedene Sites angezeigt werden.

Bei HTTPS wird, wie @Toothbrush betont hat, die TLS-Servername-Angabe verwendet, da der Host-Header Teil der verschlüsselten Anforderung ist und der Server nicht weiß, welches Zertifikat ohne diese Angabe angeboten werden soll.

Unterhaltsames Experiment: Holen Sie sich Manipulationsdaten für Firefox (für Chrome konnte ich keine Entsprechung finden) und beginnen Sie mit Manipulationen. Öffnen Sie http://slipstation.com/ und bearbeiten Sie den Host:-Header in der Anforderung, http: // zu sein. www.zombo.com/ . Sie sehen eine möglicherweise vertraute Website, auf der alles möglich ist.

6

Der Webserver kann so konfiguriert werden, dass nur Verbindungen zu einer bestimmten Domäne oder Unterdomäne akzeptiert werden. Es können mehrere Domains gehostet werden.

Was der Webserver bei Verwendung einer direkten IP-Adresse tut, ist konfigurierbar. Im Fall von Apache wird standardmäßig der vhost mit dem ersten Namen von den aktivierten Sites aufgerufen, die alphanumerisch sortiert sind.

Dies ist der relevanteste Teil der Apache-Dokumentation, den ich nach einer kurzen Suche gefunden habe:

https://httpd.Apache.org/docs/current/vhosts/name-based.html

5
paradroid