2011-11-24 3 views
2

fsockopen 함수에 대한 약간의 도움이 필요합니다. 나는 그것이 인증을 요청하지 않는 경우 포트 80 fsockopen 체크 IP를 확인해야합니다fsockopen 함수에 대한 도움이 필요합니다

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

:

나는이 PHP 코드가 있습니다.

어딘가에 isset($_SERVER['PHP_AUTH_USER'])을 사용해야한다고 생각하지만 혼자서 할 수는 없습니다. 누구든지 도와 줄 수 있습니까?

업데이트 ...........................

drew010 당신에게 대단히 감사합니다 @

내 안부

+3

실제 'if'조건 내에 해당 내용을 넣지 않는 것이 훨씬 낫습니다. –

+0

'@ '는 무엇인가요? 그걸 제거하지 않으면 귀중한 정보를 얻을 수 있습니까? – netcoder

답변

0

원격 서버가 인증을 요청하는지 확인하려면 요청을하고 응답을 읽어야합니다.

응답이 401 Authorization Required이면 인증을 요청하고 그렇지 않으면 인증을 요청합니다.

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"; 
    } 
} 
+0

대단히 감사합니다. 당신 말이 맞습니다. 당신은 아주 가까이에 있습니다. 잠시만 기다려주십시오. 내 업데이트를 읽으십시오. –

+0

환영합니다. 작동하지 않는 부분이 있습니까? 아니면 더 많은 것을 돕기 위해 할 수있는 부분이 있습니까? – drew010

+0

예 .. 제발 다시 내 Q를 확인해 주시겠습니까? 나는 당신을 위해 그것을 업데이 트했습니다. 다시 한 번 축 늘었습니다. –

관련 문제