Мне нужна небольшая помощь о функции fsockopen - PullRequest
2 голосов
/ 24 ноября 2011

Мне нужна небольшая помощь с функцией fsockopen.

У меня есть этот код PHP:

if (in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554,47830,50070))
    || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 1))

Мне нужно fsockopen проверить IP-адреса по порту 80, если он не запрашивает аутентификацию.

Я думаю, что должен где-то использовать isset($_SERVER['PHP_AUTH_USER']), но я не могу сделать это сам. Кто-нибудь может помочь?

Обновление ...........................

@ drew010 Большое спасибо

Мои наилучшие пожелания

1 Ответ

0 голосов
/ 24 ноября 2011

Чтобы узнать, запрашивает ли удаленный сервер аутентификацию, вам нужно сделать запрос и прочитать ответ.

Если ответ 401 Требуется авторизация, то он запрашивает аутентификацию, в противном случае это не так.

if (in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554,47830,50070)) {
    $fp = @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 1);

    if ($fp) {
        $url = "/";

        fputs($fp, "GET $url HTTP/1.1\r\nHost: {$_SERVER['REMOTE_ADDR']}\r\nConnection: close\r\n\r\n");
        $resp = '';

        while(!feof($fp)) {
            $resp .= fgets($fp, 1024);
        }

        if (preg_match('/^http\/1\.\d+ 401/i', $resp)) {
            echo "Requires authentication";
        } else {
            echo "No auth required.";
        }
    } else {
        echo "Failed to connect on port 80, reason: $errstr";
    }
}
...