Это настоящий ублюдок:)
Мой модем — 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
регистрировал успешную и неудачную попытку входа в систему и получения страницы статуса.
- успешный 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]
...
- неудачный tcpdump
wget --user admin --password 1234 "http://modem/status/status_deviceinfo.htm" -O -
Разрешение модема (модем)... 192.168.231.117
Подключение к модему (модем)|192.168.231.117|:80... подключен.
HTTP-запрос отправлен, ожидание ответа... 401 Несанкционированное
повторное использование существующего подключения кмодем:80.
HTTP-запрос отправлен, ожидается ответ... 401 Несанкционированная
авторизация не удалась.
Можете ли вы что-нибудь из этого сделать? Вам нужны какие-то другие данные, которые я, возможно, не подумал включить? Как я могу исследовать этот вопрос дальше?
решение1
Веб-сервер модема не предназначен для обработки чего-либо, кроме его IP-адреса в Host
заголовке HTTP, поэтому вы получаете неопределенное поведение, и в данном случае это означает, что аутентификация не будет пройдена, если вы отправите в этом заголовке что-либо, кроме его IP-адреса Host
.
Обычно, если вы не используете виртуальные хосты (что позволяет размещать несколько сайтов под несколькими доменами, указывающими на один и тот же IP, и использовать этот Host
заголовок для указания того, какой сайт был запрошен), вы просто должны полностью игнорировать этот заголовок, чего разработчики этой прошивки, очевидно, не сделали. Я бы не удивился, если бы они на самом деле использовали виртуальный хост (без необходимости), и именно поэтому только определенный Host
заголовок, установленный для IP маршрутизатора, позволяет вам пройти аутентификацию, потому что все остальное не соответствует этому виртуальному хосту.
Имя тут ни при чем, просто curl/wget автоматически устанавливает правильный заголовок Host на основе этого имени DNS. Если вы можете удалить или переопределить этот заголовок и вернуть его к IP модема, то все будет работать нормально (используйте wget --header="Host:" ...
для удаления заголовка).