0

To restart my router I can access to web page at 192.168.1.1/tools.lp and click on the restart button.

This is the code of the page

<form name="gwRestart" method="post" action="restartingAG.lp">
<input type="hidden" name="action" id="restartAction" value="saveRestart" />
    <table border='0' cellspacing='0' cellpadding='0' width='100%' style="text-align:center">
        <tr>
            <td>
            <a href="javascript:document.gwRestart.submit();">
            <div class="midarea7-1 mainButton">RESTART</div></a>
            </td><td>&nbsp;</td>
        </tr>
    </table>
</form>

I would restart my router using a php page and I tried to do it with cURL in this way

$post_data['action'] = 'saveRestart';

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

//create cURL connection
$ch = curl_init('http://192.168.1.1/restartingAG.lp');

//set options
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");

//set data to be posted
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);

//perform our request
$result = curl_exec($ch);

//show information regarding the request
print_r(curl_getinfo($ch));
//echo curl_errno($ch) . '-' . curl_error($ch);

//close the connection
curl_close($ch);

Unfortunately, I noticed that my request is redirected to index_auth.lp (login function is disabled!) and not to that required.

Array ( [url] => http://192.168.1.1/index_auth.lp [content_type] => text/html [http_code] => 200 [header_size] => 858 [request_size] => 630 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 2 [total_time] => 1.216 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 7233 [speed_download] => 5948 [speed_upload] => 0 [download_content_length] => 7233 [upload_content_length] => 0 [starttransfer_time] => 0.53 [redirect_time] => 0.686 [redirect_url] => [primary_ip] => 192.168.1.1 [certinfo] => Array ( ) [primary_port] => 80 [local_ip] => 192.168.1.5 [local_port] => 50687 ) 

Perhaps because the request is from a different ip? Can I somehow make a request as if it were made by a user on the web page? Thanks

Paolo Rossi
  • 2,490
  • 9
  • 43
  • 70

2 Answers2

0
$post_data = array();
$post_data['action'] = 'saveRestart';

foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}

$post_string = implode ('&', $post_items);

$ch = curl_init('http://192.168.1.1/restartingAG.lp');

$headers = array();
$headers[] = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$headers[] = "Cache-Control: max-age=0";
$headers[] = "Connection: keep-alive";
$headers[] = "Keep-Alive: 300";
$headers[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$headers[] = "Accept-Language: en-us,en;q=0.5";
$headers[] = "Pragma: ";    

//set options
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_REFERER, 'http://192.168.1.1/tools.lp');
curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);

$result = curl_exec($ch);

curl_close($ch);

echo "<pre>";
echo $result;
CatalinB
  • 571
  • 4
  • 11
0

From what i can, you are not to actually send your request as a POST request. Currently you are sending the message as a GET request, but with some post-data attached.

Your code is missing this line

curl_setopt($ch, CURLOPT_POST, 1);
Björn Fyrvall
  • 231
  • 1
  • 7