HTTP Request an IP - A Record

Infected

Member
Zu dieser späten Stunde muss ich mich wieder einmal an euch Fachleute wenden.

Folgende Situation:
Ich habe eine Domain domain.de, welche via A Record auf die IP 1.2.3.4 verweißt.
Hinter dieser IP verbirgt sich ein Webserver.

Jetzt möchte ich z.B. http://domain.de/index.php aufrufen.
Wenn ich das jetzt richtig verstanden habe, dann wird via DNS anhand der Domain die passende IP gesucht, sodass der Request dann so aussähe:

http://1.2.3.4/index.php

Jetzt befindet sich auf dem Server aber nicht nur eine Seite, sondern mehrere, weshalb ich unter dem gerade genannten Request nur einen 404 Not found Error bekomme.

Der Server hinter der IP 1.2.3.4 muss also jetzt wissen, welche Seite gemeint ist und mit Hilfe der vHosts das entsprechende Verzeichnis wählen.

Ich bin bis jetzt davon ausgegangen, dass das anhand des Header Attributs "Host" gemacht wird. Bitte korrigiert mich, wenn das falsch ist.


Ich versuche also nun, via Chrome Plugin "Postman" einen manuellen Request zu senden, sodass ich die gewünschte Seite zurück bekomme.

Als URL gebe ich also "http://1.2.3.4/index.php" an.
Und in den Header setze ich "Host: domain.de".

Sollte der Webserver keine weiteren Prüfungen wie den User-Agend, etc. vornehmen, sollte ich doch eigentlich die richtige Seite angezeigt bekommen.
Leider ist dies nicht der Fall.


Könnt ihr mir erklären, was ich machen muss, bzw. wo mein Denkfehler ist?
 
Hab's gerade mal Probiert aber anstatt das Postman den "Host" header ersetzt schickt es lediglich einen zweiten. Der wird dann natürlich vom Webserver höchstwahrscheinlich verworfen.
 
Jetzt möchte ich z.B. http://domain.de/index.php aufrufen.
Wenn ich das jetzt richtig verstanden habe, dann wird via DNS anhand der Domain die passende IP gesucht, sodass der Request dann so aussähe:

http://1.2.3.4/index.php

Diese Vergleich ist nicht ganz richtig. Der Browser nimmt die Domain und löst sie zur IP auf. Dann baut er eine TCP-Verbindung zu der IP zu Port 80 auf und schickt per HTTP-Protokoll die Anfrage: Schick mir mal die /index.php von Host domain.de. Nebenbei: Das ist übrigens auch der Grund, weshalb HTTPS ohne SNI nur für einen Host funktioniert - der Hostname wird erst übermittelt, wenn der TLS-Handshake schon erledigt ist und das Zertifikat verschickt wurde.
 
Wo ist der Vergleich nicht richtig?
...Der Browser nimmt die Domain und löst sie zur IP auf. ...
Welches, wie TE richtig sagte, via DNS geschieht.

Und der Request sieht in der Tat "bildlich" so aus wie von TE beschrieben.

]http://1.2.3.4/index.php
example.com -><- DNS <- 1.2.3.4
Connect 1.2.3.4 Port 80 -> Send HEAD /index.php HTTP/x.x, Host: example.com ,...

https://1.2.3.4/index.php
example.com -><- DNS <- 1.2.3.4
Connect 1.2.3.4 Port 443 -> Handshake | SNI Handshake Host example.com -> Send HEAD /index.php HTTP/x.x, Host: example.com ,...

TE mach nichts anderes als den DNS zu überspringen und die Senderdomain manuell zu setzen. Das klappt mit funktionierenden Tools, wie oben beschrieben oder z.B. mit cURL, auch wunderbar.
 
Last edited by a moderator:
Der Punkt dabei ist, dass http://domain.de/index.php und http://1.2.3.4/index.php erst mal auf zwei völlig unterschiedliche Webseiten zeigen (selbst wenn domain.de zufällig auch zur IP 1.2.3.4 auflöst).
Der Browser macht nämlich eben durch die DNS-Anfrage aus http://domain.de/index.php kein http://1.2.3.4/index.php, sonder baut eine TCP-Verbindung auf und baut sich dann aus der eingegebenen Adresse den passenden HTTP-Request zusammen. Was der TE mit seinem Plugin gemacht hat, ist nachträglich den HTTP-Request des Browsers zu verbiegen - klar funktioniert das mit dem richtigen Plugin.
Ich weiß, was der TE ausdrücken wollte, aber wie gesagt ist die Beschreibung nicht ganz richtig - oder anders ausgedrückt: Der Vergleich hinkt.
Wenn ich will, könnte ich auch einen Telnet auf Port 80 der IP machen und dann den HTTP-Request von Hand eintippen (mit passendem Host-Header)
 
Back
Top