2014-06-09 5 views
2

로컬 라우터에 자동으로 로그인하기위한 페이지를 만들려고합니다. 현재 CURL을 사용하여 페이지에 로그인하고 인증합니다. 이 코드 부분이 올바르게 작동하는 것 같습니다. 내가 겪고있는 문제는 일단 CURL이 인증되면 사용자를이 페이지로 리디렉션하여 탐색 할 수 있도록해야하지만 CURL에서 수집 한 쿠키를 사용해야합니다. 그것은, 그러나,이 작동하지 않는 순간컬 포스트 트위터 로그인 및 리디렉션

$data = array(
'username' => 'admin', 
'password' => 'admin', 
); 
$ch = @curl_init(); 
curl_setopt($ch, CURLOPT_URL,'http://192.168.69.1:65080/login.cgi'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'public_html/cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'public_html/cookie.txt'); 

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

print_r($result); 
print_r($info); 


//Working until this point 
preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m); 
parse_str($m[1], $cookies); 

foreach($cookies as $key=>$cookie) 
{ 
    setcookie($key, $cookie, time() + 60*60*24*30, '/'); 
} 

header("location:".$info['redirect_url']); 

당신은 내가 $result 정보를 통해 루프에 조각을 발견 한 후 리디렉션하기 전에 쿠키로 설정 볼 수 있듯이 약자로 여기

내 코드입니다 올바르게 로그인 페이지가 아닌 로그인 페이지로 리디렉션됩니다.

리디렉션 URL을 URL로 사용하여 CURL을 닫기 전에 추가 호출을하면 인덱스 페이지의 부분 인쇄가 표시되지만 중요한 이미지 등은 표시되지 않습니다. 하지만 단순히 페이지를 인쇄하는 대신 페이지에 액세스하여 탐색 할 수 있어야합니다. 여기

여기 여기

Array 
(
    [url] => http://192.168.69.1:65080/login.cgi 
    [content_type] => text/html 
    [http_code] => 302 
    [header_size] => 314 
    [request_size] => 251 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 0.484 
    [namelookup_time] => 0 
    [connect_time] => 0 
    [pretransfer_time] => 0 
    [size_upload] => 255 
    [size_download] => 0 
    [speed_download] => 0 
    [speed_upload] => 526 
    [download_content_length] => -1 
    [upload_content_length] => 255 
    [starttransfer_time] => 0 
    [redirect_time] => 0 
    [certinfo] => Array 
     (
     ) 

    [redirect_url] => http://192.168.69.1:65080/index.cgi 
) 

$info의 인쇄가 마지막으로 여기 내 cookie.txt

# Netscape HTTP Cookie File 
# http://curl.haxx.se/docs/http-cookies.html 
# This file was generated by libcurl! Edit at your own risk. 

192.168.69.1 FALSE / FALSE 0 AIROS_SESSIONID d19e097a07b7b76fd7d90267a8e1f4d2 
192.168.69.1 FALSE / FALSE 1370775278 show_security_warning deleted 
192.168.69.1 FALSE / FALSE 2147483647 ui_language en_US 

입니다 $cookies의 인쇄입니다 $result

HTTP/1.1 302 Found 
Location: /index.cgi 
Set-cookie: show_security_warning=deleted; expires=Sunday, 09-Jun-13 10:54:00 GMT 
Set-cookie: ui_language=en_US; expires=Tuesday, 19-Jan-38 03:14:07 GMT 
Content-Type: text/html 
Transfer-Encoding: chunked 
Date: Mon, 09 Jun 2014 10:54:01 GMT 
Server: lighttpd/1.4.31 

의 인쇄입니다

Array 
(
    [show_security_warning] => deleted 
) 

누군가가 다음 단계를 달성하는 올바른 방향으로 나를 지적 할 수 있다면, 나는 가장 감사 할 것입니다.

+0

그러나이 줄을'curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, true);라고 추가하면 여전히 위와 같은 내용으로 strugling됩니다. 모든 필드와 필요한 정보 (예 : 상태 등)가 포함 된 페이지를 반환합니다. 그러나 페이지에 자바 스크립트가 채워지는 경우 아무 것도 값을 갖지 않습니다. CURL은 이것을 파싱 할 수 없으므로 팬텀과 비슷한 것을보고 있습니다.나는 희망이 없다. 나는 아직도 CURL이 수집 한 쿠키를 어떻게 사용할 수 있는지 알고 싶습니다. 하지만이 쿠키는 127.0.0.1 용이며 다른 문제로 여겨지는 라우터 IP가 아닙니다. –

답변

1

전략이 ​​성공적으로 완료 될지 확신하지 못합니다.

웹 클라이언트로 작동하고 있습니다. 이는 Curl과 웹 브라우저가 라우터에 의해 별개의 호스트로 간주되는 것을 의미합니다. 그것이 그래서, 파일 이름이 단지 세션 ID 쿠키 값에 따라 달라집니다에 세션을 저장 (또는 ... 나는 PHP의 모든 버전 몰라했다)를 훔칠 수를 :

[CLIENT (WEB BROWSER)] ---HTTP---> [PHP WEBSERVER] 
            [CURL] ---HTTP---> [ROUTER (WEBSERVER)] 

PHP는 특정 행동이있다 세션 쿠키를 캡처하여/쿠키 값을 복제하여

모든 CGI 라이브러리가 동일한 작업을 수행하는 것은 아닙니다. 보안 전용 장치 (예 : 클라이언트 IP 및 세션 쿠키 값을 기반으로 키)에서 예상해야하므로 라우터에 안전한 세션 저장 방법이 있다고 생각합니다. 이 경우 귀하의 방법은 쓸모가 없습니다.

자바 스크립트 기반 양식 (ID/비밀번호를 게시하기 위해)과 라우터 로그인 페이지를 요청하는 iframe (라우터 쿠키 값을 초기화하기 위해)을 사용하는 것이 좋습니다. 자바 스크립트 양식을 사용하면 아마도 사용자가 원하지 않는 자격 증명을 보여줄 것입니다.

+0

나는 이것이 두려워 할 수도있다. 나는 자바 스크립트 iframe을보고 제출 양식을했지만 크로스 도메인 등 문제가 있었다. 마음에 솔루션이 있다면이 방법에 대한 또 다른 질문이있다. http://stackoverflow.com/questions/24076855/automate-router -log-in –

+0

당신 만이 대답했기 때문에 현상금에 대한 경쟁이별로 없었습니다. 귀하의 도움에 많은 감사 드리며 결국 크롬 확장을 작성하여 문제를 해결할 수있었습니다. 그러나 당신이 말했듯이, 나는 CURL을 사용하여 더 이상 앞으로 나아 가지 못했습니다. –