如果我尝试通过 http://modem/ 连接,调制解调器会拒绝登录凭据。如果我使用 http:// 连接,则运行正常/

如果我尝试通过 http://modem/ 连接,调制解调器会拒绝登录凭据。如果我使用 http:// 连接,则运行正常/

这真是太糟糕了:)

我的调制解调器是 ZTE ZXHN H108L,连接到 Linux 防火墙/路由器/网关。网关是 Slackware 14.0 系统,DNS、DHCP、VPN 和透明 PROXY 在其上运行。网关有 2 个硬件网卡。eth1连接到调制解调器(192.168.231.117),并eth0连接到内联网(192.168.112.0/24)。

我使用 dns 为多个内部网和 vpnnet 主机命名。调制解调器有一个方便的名称“modem.skails.office”(如果我坐在这个内部网上的一台电脑上,则简称为“modem”)。来自/var/named/skails.office.hosts

modem                   A       192.168.231.117

nslookup正确解析内联网所有电脑的调制解调器地址。

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

因此,当我尝试从网关的浏览器(firefox)访问调制解调器时,我输入http://192.168.231.117/。我提供凭据并正常登录。

如果我尝试通过发出地址http://modem/或执行相同操作http://modem.skails.office/,我仍然会看到登录窗口,但它不会接受我的凭据。我真的不知道这里可能存在什么问题。

我曾经tcpdump -i eth1 host modem and port 80记录过一次成功和失败的登录尝试并获取状态页面。

  1. tcpdump 成功 wget --user admin --password 1234 "http://192.168.231.117/status/status_deviceinfo.htm" -O -

连接到 192.168.231.117:80...已连接。HTTP
请求已发送,正在等待响应...401 未授权
重新使用与 192.168.231.117:80 的现有连接。HTTP
请求已发送,正在等待响应...200 OK
长度:未指定 [text/html]
...

  1. tcpdump 失败 wget --user admin --password 1234 "http://modem/status/status_deviceinfo.htm" -O -

正在解析调制解调器 (modem)... 192.168.231.117
正在连接到调制解调器 (modem)|192.168.231.117|:80... 已连接。HTTP
请求已发送,正在等待响应... 401 未授权
正在重新使用现有连接调制解调器:80.
HTTP 请求已发送,等待响应... 401 未授权
授权失败。

你能从中得到什么吗?你还需要我可能没想到的其他数据吗?我该如何进一步调查此事?

答案1

调制解调器的 Web 服务器并非设计用于处理HostHTTP 标头中除其 IP 之外的其他内容,因此您会获得未定义的行为,在这种情况下,这意味着当您在该标头中发送除其 IP 之外的其他内容时,身份验证会失败Host

通常,除非您使用虚拟主机(允许在指向同一 IP 的多个域下托管多个站点,并使用该Host标头来判断请求了哪个站点),否则您应该完全忽略该标头,而该固件的开发人员显然没有这样做。如果他们真的使用虚拟主机(不必要),我不会感到惊讶,这就是为什么只有Host设置为路由器 IP 的特定标头允许您进行身份验证,因为其他所有内容都不匹配该虚拟主机。

名称与此无关,只是 curl/wget 会根据该 DNS 名称自动设置正确的主机标头。如果您可以删除或覆盖该标头并将其重新设置为调制解调器的 IP,那么它就可以正常工作(用于wget --header="Host:" ...删除标头)。

相关内容