csdn のポイント無料ダウンロード、pudn のポイント無料ダウンロード、またはポイント無料の 51cto が必要な場合は、http://www.itziy.com/ にアクセスしてください。 コマンドラインから直接 php を呼び出すと、使用方法が表示されます。メソッド 機能説明 1. サポートエージェント 2. 再帰チェック数の設定をサポート 3. 出力タイプ制御とチェックコンテンツ制御をサポート
機能:代替主肉眼尽量多的抓取可能请求包及url地址等,方便渗透测试
- error_reporting(E_ERROR | E_WARNING | E_PARSE);
- ini_set('memory_limit','1024M');
- set_time_limit(0);
- define('CHECK_A_TAG', false);
- define(' CHECK_JS_TAG', true);
- define('CHECK_URL', true);
- define('SAVE_ERROR', true);
- $checkArr = array(
- '$.load',
- '.ajax',
- '$. post',
- '$.get',
- '.getJSON'
- );
- if ($argc < 2)
- die(showerror('申し訳ありませんが、パラメータエラー', array('例: php debug.php url num ファイル名ヘッダープロキシ', '詳細情報:', 'url: 確認したい対象URLアドレス', 'num: 再帰のページ数、デフォルト3', 'filename: 出力ファイル名デフォルト名ret.txt ', 'header: リクエスト ヘッダー ファイルのデフォルト null', 'proxy: プロキシを使用したい場合は、ここに設定します。デフォルトはプロキシを使用しません')));
- if (!check_extension())
- die(showerror('extension curl はサポートされていません', 'PHP Curl 拡張機能のサポートを開いてください'));
- //グローバル変数
- $url = トリム($argv[1]);
- if (stripos($url, 'http') === false)
- $url = 'http://'.$url;
- $num = isset($argv[2]) ? intval($argv[2]) : 3;
- $output = isset($argv[3]) ?トリム(str_replace("\", '/', $argv[3])) : str_replace("\", '/', dirname(__FILE__)).'/ret.txt';
- $header = null;
- $proxy = null;
- $host = null;
- if (isset($argv[4]))
- {
- $header = トリム(str_replace("\", '/', $argv[4]));
- if (file_exists($header))
- $header = array_filter(explode("n", str_replace("r", '', file_get_contents($header))));
- else
- {
- $file = str_replace(" \", '/', dirname(__FILE__)).'/'.$header;
- if (file_exists($file))
- $header = array_filter(explode("n", str_replace("r", '', file_get_contents($file))));
- else
- $header = null;
- }
- }
- if (isset($argv[5]))
- $proxy = trim($argv[5]);
- if (!is_array($header) || empty($header))
- $header = null;
- $result = check_valid_url($url);
- $outputArr = array();
- if (!empty($result))
- {
- $result = str_replace("r", '', $result);
- $result = str_replace("n", '', $result);
- $tmpArr = parse_url($url);
- if (! isset($tmpArr['host']))
- die(showerror('URL 解析エラー', 'ホスト フォーム URL を取得できません: '.$url));
- $host = $tmpArr['host'];
- if (stripos($host, 'http') === false)
- $host = 'http://'.$host;
- unset($tmpArr);
- //現在のページを確認します
- if (!isset ($outputArr[md5($url)]))
- {
- $outputArr[md5($url)] = $url;
- file_put_contents($output, $url."n", FILE_APPEND);
- echo 'url: ' ,$url,' ajax が必要なので保存',PHP_EOL;
- }
- work($result);
- }
- echo 'runfinish',PHP_EOL;
- function work($result, $reverse = false)
- {
- グローバル $num, $host, $outputArr, $checkArr, $output;
- if (!$result)
- return;
- $result = str_replace("r", '', $result);
- $result = str_replace ("n", '', $result);
- while ($num > 0)
- {
- echo 'remain: ',$num、' URL アドレスのチェックを開始します',PHP_EOL,PHP_EOL;
- preg_match_all('//i', $result, $match);
- if (CHECK_A_TAG && isset($match[2]) && !empty($match) [2]))
- {
- foreach ($match[2] as $mc)
- {
- $mc = トリム($mc);
- if ($mc == '#')
- continue;
- if (stripos( $mc, 'http') === false)
- $mc = $host.$mc;
- if (($ret = check_valid_url($mc)))
- {
- if (!isset($outputArr[md5( $mc)]))
- {
- $outputArr[md5($mc)] = $mc;
- file_put_contents($output, $mc."n", FILE_APPEND);
- echo 'url: ',$mc,' find ajax が必要なので保存',PHP_EOL;
- }
- }
- }
- }
- // ページ URL をチェック
- echo 'remain: ',$num,' 今、ページ URL のチェックを開始します',PHP_EOL,PHP_EOL;
- preg_match_all('/(https?|ftp|mms)://([A-z0-9]+[_-]?[A-z0-9]+.)*[A-z0-9]+-? [A-z0-9]+.[A-z]{2,}(/.*)*/?/i', $result, $match);
- if (CHECK_URL && isset($match[2]) && !empty($match[2]))
- {
- foreach ($match [2] as $mc)
- {
- $mc = トリム($mc);
- if ($mc == '#')
- continue;
- if (stripos($mc, 'http') === false)
- $mc = $host.$mc;
- if (($ret = check_valid_url($mc)))
- {
- if (!isset($outputArr[md5($mc)]))
- {
- $outputArr[ md5($mc)] = $mc;
- file_put_contents($output, $mc."n", FILE_APPEND);
- echo 'url: ',$mc,' ajax が必要なので保存',PHP_EOL;
- }
- }
- }
- }
- //javascript ajax require
- をチェックします echo 'remain: ',$num,' now start to check for javascript ajax require',PHP_EOL,PHP_EOL;
- preg_match_all('//i', $result, $match);
- if (CHECK_JS_TAG && isset($) match[2]) && !empty($match[2]))
- {
- foreach ($match[2] as $mc)
- {
- $mc = トリム($mc);
- if ($mc == ' #')
- 続行;
- if (stripos($mc, 'http') === false)
- $mc = $host.$mc;
-
- if (($ret = check_valid_url($mc)))
- {
- //現在のページを確認します
- foreach ($checkArr as $ck)
- {
- if (!isset($outputArr[md5($mc)]) && strpos($ret, $ck) !== false)
- {
- $outputArr[md5($mc)] = $mc;
- file_put_contents($output, $mc."n", FILE_APPEND);
- echo 'url: ',$mc,' ajax が必要なので保存',PHP_EOL ;
- Break;
- }
- }
- }
- }
- }
-
- if ($reverse)
- return;
-
- //次のページをチェック
- preg_match_all('//i', $result, $match);
- if (isset($match[2]) && !empty( $match[2]))
- {
- echo '次のページをチェック、残りのページ数: ',$num,PHP_EOL;
- foreach ($match[2] as $mc)
- {
- $mc = trim($mc );
- if ($mc == '#')
- continue;
- if (stripos($mc, 'http') === false)
- $mc = $host.$mc;
- echo '次のページを確認します: ',$mc,PHP_EOL;
- work(check_valid_url($mc), true);
- }
- }
- $num--;
- sleep(3);
- }
- }
-
- function check_valid_url($url)
- {
- if (stripos($url, 'http') === false)
- $url = 'http://'.$url;
- $ch =curl_init();
- curl_setopt($ch, CURLOPT_URL, $url) ;
- curl_setopt($ch、CURLOPT_HEADER、true);
- curl_setopt($ch、CURLOPT_FOLLOWLOCATION、true);
- curl_setopt($ch、CURLOPT_RETURNTRANSFER、true);
- curl_setopt($ch、CURLOPT_USERAGENT、'Mozilla/5.0 (互換性あり; Googlebot/2.1; +http://www.google.com/bot.html)');
- if (!is_null($header))
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- if (!is_null($proxy))
- curl_setopt($ch, CURLOPT_PROXY, $proxy);
- $ret =curl_exec($ch);
- $errinfo =curl_error($ch);
- curl_close($ch);
- unset($ch);
- if (! empty($errinfo) || ((strpos($ret, '200 OK') === false) && (strpos($ret, '302 Moved') === false)) || 114so.cn') !== false)
- {
- showerror('url をチェック: '.$url. ' いくつかのエラーを見つけます', array($errinfo, $ret));
- if (SAVE_ERROR)
- file_put_contents(dirname( __FILE__).'/error.txt', $url."n", FILE_APPEND);
- return false;
- }
- return $ret;
- }
-
- function check_extension()
- {
- if (!function_exists('curl_init' ) || !extension_loaded('curl'))
- return false;
- return true;
- }
-
- 関数 showerror($t, $c)
- {
- $str = "######## ################################################ ############n";
- $str .= "# ".$t."n";
- if (is_string($c))
- $str .= "# ".$ c;
- elseif (is_array($c) && !empty($c))
- {
- foreach ($c as $c1)
- $str .= "# ".$c1."n";
- }
- $str .= "n########################################### ###########################n";
- echo $str;
- unset($str);
- }
复制代
|