Доступ к веб-странице cgi-bin через терминал

Вопрос или проблема

У меня есть пара Antminer L3+, работающих на ОС на основе unix и программном обеспечении cgminer. У него есть защищенный паролем веб-интерфейс, например, http://10.12.1.1/cgi-bin/reboot.cgi. Я могу получить к нему доступ напрямую из браузера, например, так: http://root:[email protected]/cgi-bin/reboot.cgi, чтобы перезагрузить устройство.

Но когда я запускаю то же самое из терминала, например, curl http://root:[email protected]/cgi-bin/reboot.cgi, я получаю ошибку 401.

Я также пытался использовать curl в PHP с параметрами, чтобы имитировать браузер, но все равно получаю ошибку 401.

Есть идеи, почему это может происходить?

Вероятно, вы отправляете неправильную аутентификацию. Попробуйте --digest, а если это не сработает, попробуйте --anyauth, и используйте --verbose, чтобы выяснить, что работает, затем найдите правильный параметр аутентификации в руководстве и используйте только его (для безопасности).

Еще одна вещь, которую вы можете попробовать, это включение куки. Некоторые маршрутизаторы устанавливают куки при получении 401 и ожидают получить их обратно в следующем запросе. Вы можете читать и записывать куки с помощью --cookie cookies.txt --cookie-jar cookies.txt. Если вам не важно сохранять куки (например, вы перезагружаете маршрутизатор) и вам не нужно парсить вывод, тогда --cookie-jar - достаточно, чтобы включить механизм куки и записать их в stdout.

Спасибо Джей. Вот работающий параметр для выполнения URL cgi-bin локальной сети, например, http://root:[email protected]/cgi-bin/reboot.cgi из терминала или с помощью PHP-скрипта (вместо браузера). Это можно выполнить из локальной или удаленной сети (через предварительно настроенный порт на вашем файерволе/маршрутизаторе).

Из удаленной сети:

curl --digest --user 'username:password' http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi

Из локальной сети:

curl --digest --user 'username:password' http://YOUR_LAN_IP/cgi-bin/reboot.cgi

С помощью PHP-скрипта:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_URL, 'http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi');
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

print_r($output);
print_r($info);

https://azure.io/cgi-bin/index.cgi просто найдите эту ссылку в строке поиска любого браузера, и она покажет вам вашу корневую информацию о вашей сети.

Ответ или решение

Для доступа к веб-странице cgi-bin с помощью терминала на ваших устройствах Antminer L3+, вы можете использовать команду curl, которая поддерживает аутентификацию. В вашем случае необходимо убедиться, что вы используете правильный метод аутентификации, так как многие веб-интерфейсы могут требовать специфического подхода.

Шаги для доступа к cgi-bin через терминал

  1. Используйте правильный синтаксис curl:
    Основной метод для отправки GET-запроса на ваш ресурс выглядит так:

    curl --digest --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi

    Замените username и password на актуальные данные. Если у вас есть доступ через WAN, используйте внешний IP и порт, настроенный на вашем маршрутизаторе.

  2. Проверка аутентификации:
    Если вы получаете ошибку 401 (Unauthorized), попробуйте использовать параметры аутентификации, специфичные для вашего случая. Например:

    curl --anyauth --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi

    Это даст curl возможность выбрать метод аутентификации, который требует сервер.

  3. Включение кук:
    Некоторые маршрутизаторы могут устанавливать куки при первом запросе и ожидать их в последующем. Для работы с куками используйте следующую команду:

    curl --cookie-jar cookies.txt --cookie cookies.txt --digest --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi

    Это позволит curl сохранять куки для дальнейшего использования в текущей сессии.

Пример с использованием PHP

Для выполнения запроса через PHP, вам поможет следующий код:

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_URL, 'http://YOUR_IP/cgi-bin/reboot.cgi');

$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

print_r($output);
print_r($info);

Замените username, password, и YOUR_IP на ваши актуальные данные. Этот код выполняет GET-запрос, используя аутентификацию Digest, что чаще всего является необходимым для доступа к защищённым ресурсам.

Заключение

С помощью вышеописанных команд и методов вы сможете успешно получить доступ к cgi-bin страницам вашего устройства через терминал или PHP. Если после использования данных рекомендаций проблема сохраняется, проверьте настройки вашего устройства и маршрутизатора, а также убедитесь, что учетные данные введены верно.

Оцените материал
Добавить комментарий

Капча загружается...