Isso é uma verdadeira merda :)
Meu modem é um ZTE ZXHN H108L, conectado a um firewall/roteador/gateway Linux. O gateway é um sistema Slackware 14.0 no qual rodam DNS, DHCP, VPN e PROXY transparente. O gateway possui 2 NICs de hardware. eth1
está conectado ao modem (192.168.231.117) e eth0
está conectado à intranet (192.168.112.0/24).
Eu uso o DNS para dar nomes a vários hosts de intranet e VPNnet. O modem tem o nome conveniente "modem.skails.office" (ou apenas "modem" se eu estiver em um PC nesta intranet). De /var/named/skails.office.hosts
:
modem A 192.168.231.117
nslookup
resolve corretamente o endereço do modem de todos os pc's da intranet.
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
Então quando tento acessar o modem pelo navegador do gateway (firefox), digito http://192.168.231.117/
. Eu forneço as credenciais e faço logon corretamente.
Se eu tentar fazer o mesmo emitindo o endereço http://modem/
ou http://modem.skails.office/
, ainda será apresentada a janela de login, mas ela NÃO aceitará minhas credenciais. Eu realmente não sei qual poderia ser o problema aqui.
Eu costumava tcpdump -i eth1 host modem and port 80
registrar uma tentativa bem-sucedida e malsucedida de fazer logon e acessar a página de status.
- tcpdump bem sucedido
wget --user admin --password 1234 "http://192.168.231.117/status/status_deviceinfo.htm" -O -
Conectando a 192.168.231.117:80... conectado.
Solicitação HTTP enviada, aguardando resposta... 401 Não autorizado
Reutilizando conexão existente para 192.168.231.117:80.
Solicitação HTTP enviada, aguardando resposta... 200 OK
Comprimento: não especificado [text/html]
...
- tcpdump sem sucesso
wget --user admin --password 1234 "http://modem/status/status_deviceinfo.htm" -O -
Resolvendo modem (modem)... 192.168.231.117
Conectando ao modem (modem)|192.168.231.117|:80... conectado.
Solicitação HTTP enviada, aguardando resposta... 401 Não autorizado
Reutilizando conexão existente paramodem: 80.
Solicitação HTTP enviada, aguardando resposta... 401
Falha na autorização não autorizada.
Você pode fazer alguma coisa com isso? Você precisa de algum outro dado que talvez não tenha pensado em incluir? Como posso investigar mais esse assunto?
Responder1
O servidor web do modem não foi projetado para lidar com algo diferente de seu IP no Host
cabeçalho HTTP, portanto você obtém um comportamento indefinido e neste caso significa que a autenticação falha quando você envia algo diferente de seu IP nesse Host
cabeçalho.
Normalmente, a menos que você esteja usando hosts virtuais (que permitem hospedar vários sites em vários domínios apontando para o mesmo IP e usando esse Host
cabeçalho para informar qual site foi solicitado), você deve ignorar completamente esse cabeçalho, que os desenvolvedores desse firmware obviamente não funcionou. Eu não ficaria surpreso se eles estivessem realmente usando um host virtual (desnecessariamente) e é por isso que apenas um Host
cabeçalho específico definido para o IP do roteador permite a autenticação, porque todo o resto não corresponde a esse host virtual.
O nome não tem nada a ver com isso, é apenas que curl/wget define automaticamente o cabeçalho Host correto com base nesse nome DNS. Se você puder remover ou substituir esse cabeçalho e configurá-lo de volta para o IP do modem, ele funcionará perfeitamente (use wget --header="Host:" ...
para remover o cabeçalho).