Modem lehnt Anmeldeinformationen ab Wenn ich versuche, eine Verbindung über http://modem/ herzustellen, funktioniert es einwandfrei, wenn ich eine Verbindung mit http:// herstelle/

Modem lehnt Anmeldeinformationen ab Wenn ich versuche, eine Verbindung über http://modem/ herzustellen, funktioniert es einwandfrei, wenn ich eine Verbindung mit http:// herstelle/

Das ist echt ein Miststück :)

Mein Modem ist ein ZTE ZXHN H108L, das mit einer Linux-Firewall/einem Linux-Router/einem Linux-Gateway verbunden ist. Das Gateway ist ein Slackware 14.0-System, auf dem DNS, DHCP, VPN und ein transparenter PROXY laufen. Das Gateway verfügt über 2 Hardware-NICs. eth1ist mit dem Modem (192.168.231.117) und eth0mit dem Intranet (192.168.112.0/24) verbunden.

Ich verwende den DNS, um mehreren Intranet- und VPN-Hosts Namen zu geben. Das Modem hat den praktischen Namen „modem.skails.office“ (oder einfach „Modem“, wenn ich an einem PC in diesem Intranet sitze). Von /var/named/skails.office.hosts:

modem                   A       192.168.231.117

nslookuplöst die Modemadresse von allen PCs im Intranet korrekt auf.

root@stargaze:~# nslookup modem
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   modem.skails.office
Address: 192.168.231.117

root@stargaze:~# nslookup modem.skails.office
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   modem.skails.office
Address: 192.168.231.117

Wenn ich also versuche, über den Browser des Gateways (Firefox) auf das Modem zuzugreifen, gebe ich ein http://192.168.231.117/. Ich gebe die Anmeldeinformationen ein und die Anmeldung funktioniert problemlos.

Wenn ich versuche, dasselbe zu tun, indem ich die Adresse http://modem/oder eingebe http://modem.skails.office/, wird mir zwar immer noch das Anmeldefenster angezeigt, aber meine Anmeldeinformationen werden NICHT akzeptiert. Ich weiß wirklich nicht, was hier das Problem sein könnte.

Normalerweise protokolliere ich tcpdump -i eth1 host modem and port 80erfolgreiche und erfolglose Anmeldeversuche und rufe die Statusseite auf.

  1. erfolgreicher TCPdump wget --user admin --password 1234 "http://192.168.231.117/status/status_deviceinfo.htm" -O -

Verbindung zu 192.168.231.117:80 wird hergestellt... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 401 Nicht autorisiert.
Vorhandene Verbindung zu 192.168.231.117:80 wird wiederverwendet.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK.
Länge: nicht angegeben [text/html]
...

  1. erfolgloser TCPdump wget --user admin --password 1234 "http://modem/status/status_deviceinfo.htm" -O -

Modem (Modem) wird aufgelöst... 192.168.231.117
Verbindung zum Modem (Modem)|192.168.231.117|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 401 Nicht autorisiert
Bestehende Verbindung wird erneut verwendet, umModem:80.
HTTP-Anfrage gesendet, warte auf Antwort ... 401 Nicht autorisiert
. Autorisierung fehlgeschlagen.

Können Sie damit etwas anfangen? Benötigen Sie noch weitere Daten, an die ich vielleicht nicht gedacht habe? Wie kann ich der Sache weiter nachgehen?

Antwort1

Der Webserver des Modems ist nicht dafür ausgelegt, etwas anderes als seine IP im HostHTTP-Header zu verarbeiten. Daher erhalten Sie undefiniertes Verhalten und in diesem Fall bedeutet dies, dass die Authentifizierung fehlschlägt, wenn Sie etwas anderes als seine IP in diesem HostHeader senden.

Normalerweise sollten Sie diesen Header einfach komplett ignorieren, es sei denn, Sie verwenden virtuelle Hosts (wodurch Sie mehrere Sites unter mehreren Domänen hosten können, die auf dieselbe IP verweisen, und diesen HostHeader verwenden können, um festzustellen, welche Site angefordert wurde), was die Entwickler dieser Firmware offensichtlich nicht getan haben. Es würde mich nicht überraschen, wenn sie tatsächlich (unnötigerweise) einen virtuellen Host verwenden würden, und deshalb Hostkönnen Sie sich nur mit einem bestimmten Header, der auf die IP des Routers eingestellt ist, authentifizieren, da alles andere nicht mit diesem virtuellen Host übereinstimmt.

Der Name hat damit nichts zu tun, es ist nur so, dass curl/wget automatisch den richtigen Host-Header basierend auf diesem DNS-Namen setzt. Wenn Sie diesen Header entfernen oder überschreiben und ihn wieder auf die IP des Modems setzen können, funktioniert es einwandfrei (verwenden Sie wget --header="Host:" ...zum Entfernen des Headers).

verwandte Informationen