Я часто подключаюсь к сети, которая открыта, но требует использования аутентификации по ключу перед использованием на веб-странице. Можно ли автоматизировать аутентификацию с помощью скрипта?
источник
Я часто подключаюсь к сети, которая открыта, но требует использования аутентификации по ключу перед использованием на веб-странице. Можно ли автоматизировать аутентификацию с помощью скрипта?
Какая забавная проблема.
Хотя я уверен, что ответ Ондрюка, вероятно, сработает, я немного против того, чтобы что-то, зависящее от настольного программного обеспечения, управляло доступностью сети.
Я бы посоветовал вам поиграть с библиотекой Python's Mechanize . Вы можете установить его из репозиториев через:
sudo apt-get install python-mechanize
Тогда получите сценарий. Вы должны начать с выяснения структуры страницы, которую вы отправляете. Вам необходимо найти, куда вы отправляете форму и какие поля необходимо заполнить, чтобы отправить. Когда вы это знаете, это действительно так просто, как просто написать небольшой анализатор форм и отправитель. Mechanize делает всю тяжелую работу. Вот быстрый пример, адаптированный из их документов по формам :
import sys
from mechanize import ParseResponse, urlopen, urljoin
# replace this with the actual login page
# you'll need to do some research
uri = "http://theloginpage.com/"
response = urlopen(uri)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form
form["username"] = "your username"
form["username"] = "password"
# form.click() returns a mechanize.Request object
# (see HTMLForm.click.__doc__ if you want to use only the forms support, and
# not the rest of mechanize)
print urlopen(form.click()).read()
В зависимости от того, как работает их система, этого может быть достаточно. Возможно, вам придется связать некоторые файлы cookie, чтобы сохранить сеанс, пока они включают соединение, но технически говоря, нет никаких аргументов, почему они должны этого требовать.
Тогда вам просто нужно привязать это к сетевой системе, чтобы она вызывалась. Загрузка с него /etc/network/if-up.d
должна работать, но я предлагаю вам поставить код перед префиксом, чтобы убедиться, что вы действительно находитесь в той точке доступа, для которой работает ваш логин.
В зависимости от типа имеющегося портала, вы можете пройти аутентификацию с помощью POST-запроса, отправленного с помощью Wget (используйте Tamper Data, чтобы узнать, какие данные необходимо отправить) или с помощью сценария iMacros в Firefox.
Вы можете добавить скрипт, чтобы
/etc/network/if-up.d
он запускался каждый раз, когда устанавливается сетевое соединение.iwconfig
Прежде чем что-то делать, попросите сценарий проверить, в какой сети вы находитесь , и обязательно запустите команды,sudo -u yourusername
чтобы не запускать веб-браузер с правами root.источник