yf1197565391 发表于 2024-11-8 10:56:01

扫IP.PHP


[*]这个代码好像不能用,请大神修改下
[*]<?php
[*]/*
[*]食用方法:
[*]hotelscanner.php?fmt=http://x.x.x.x:9901/tsfile/live/1000_1.m3u8
[*]或
[*]hotelscanner.php?fmt=http://x.x.x.x/tsfile/live/1000_1.m3u8
[*]
[*]注意要点:
[*]1.扫描D段就将该段定为非数字字符,比如192.168.1.x,扫描C段就将该段定为非数字字符,比如192.168.x.x,以此类推。
[*]2.如果fmt格式参数不指定端口,则使用端口数组测试。
[*]3.结果在网页上显示,也会实时保存到脚本目录下的同名txt文件中。
[*]*/
[*]
[*]error_reporting(0); //禁止错误报告
[*]
[*]$arr_port = ; //可能使用的端口数组,可自行删减
[*]
[*]$fmt = $_GET['fmt']; //要测试的链接地址
[*]
[*]if (empty($fmt)) die('需指定要扫描的链接地址格式');
[*]
[*]//分解URL链接
[*]$scheme = parse_url($fmt)['scheme']; //协议
[*]$host   = parse_url($fmt)[ 'host' ]; //主机
[*]$port   = parse_url($fmt)[ 'port' ]; //端口
[*]$path   = parse_url($fmt)[ 'path' ]; //路径
[*]
[*]//判断使用端口数组
[*]if (!empty($port)) $arr_port = [$port];
[*]
[*]//分解IP地址
[*]list($a, $b, $c, $d) = explode('.', $host);
[*]
[*]echo "开始扫描:<br>";
[*]flush(); //刷新页面内容
[*]
[*]$arr_host = array(); //创建主机地址数组
[*]$start_time = microtime(true); //记录开始时间
[*]
[*]if (!is_numeric($a)) {
[*]for ($ia = 0; $ia <= 255; $ia++) {
[*]    for ($ib = 0; $ib <= 255; $ib++) {
[*]      for ($ic = 0; $ic <= 255; $ic++) {
[*]      echo "<br>$ia.$ib.$ic.(0-255): >";
[*]      for ($id = 0; $id <= 255; $id++) {
[*]          test_http($scheme, "$ia.$ib.$ic.$id", $arr_port, $path);
[*]          echo ".";
[*]      }
[*]      }
[*]    }
[*]}
[*]} else {
[*]if (!is_numeric($b)) {
[*]    for ($ib = 0; $ib <= 255; $ib++) {
[*]      for ($ic = 0; $ic <= 255; $ic++) {
[*]      echo "<br>$a.$ib.$ic.(0-255): ";
[*]      for ($id = 0; $id <= 255; $id++) {
[*]          test_http($scheme, "$a.$ib.$ic.$id", $arr_port, $path);
[*]          echo ".";
[*]      }
[*]      }
[*]    }
[*]} else {
[*]    if (!is_numeric($c)) {
[*]      for ($ic = 0; $ic <= 255; $ic++) {
[*]      echo "<br>$a.$b.$ic.(0-255): ";
[*]      for ($id = 0; $id <= 255; $id++) {
[*]          test_http($scheme, "$a.$b.$ic.$id", $arr_port, $path);
[*]          echo ".";
[*]      }
[*]      }
[*]    } else {
[*]      echo "<br>$a.$b.$c.(0-255): ";
[*]      for ($id = 0; $id <= 255; $id++) {
[*]      test_http($scheme, "$a.$b.$c.$id", $arr_port, $path);
[*]      echo ".";
[*]      }
[*]    }
[*]}
[*]}
[*]
[*]$end_time = microtime(true); //记录结束时间
[*]$seconds = round($end_time - $start_time, 3);
[*]$count_time = gmdate('H:i:s', $seconds) . '.' . explode('.', $seconds);
[*]$count_host = count($arr_host);
[*]
[*]echo "<br><br>扫描结束!<br><br>";
[*]echo "执行本次脚本获得 " . $count_host . " 个主机地址,总共消耗时间:" . $count_time . "(" . $seconds . " 秒)。<br><br>";
[*]echo "扫描结果:<br>";
[*]foreach ($arr_host as $v) echo "$v<br>"; //枚举扫描结果
[*]
[*]function test_http($scheme, $host, $arr_port, $path) {
[*]set_time_limit(0); //重置超时时间,很重要!!!
[*]
[*]$handles = array();
[*]$running = null;
[*]
[*]$mh = curl_multi_init(); //创建批处理句柄
[*]foreach ($arr_port as $port) {
[*]    $url = "{$scheme}://{$host}:{$port}{$path}";
[*]    $ch = curl_init($url);
[*]    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);         //解决CURLOPT_TIMEOUT_MS赋值小于1000报错的bug
[*]    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);       //超时时间(毫秒),数值越大,扫描越慢
[*]    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//以字符串返回
[*]    curl_multi_add_handle($mh, $ch);
[*]    $handles[$port] = $ch;
[*]}
[*]
[*]do { //执行批处理句柄
[*]    curl_multi_exec($mh, $running);
[*]    curl_multi_select($mh);
[*]} while ($running > 0);
[*]
[*]foreach ($handles as $port => $ch) { //检查每个请求的响应内容
[*]    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);   //获取响应状态码
[*]    $size = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD); //下载的数据总值
[*]    if ($code == 200 && $size > 0) {
[*]      save_result("$host:$port"); //实时保存主机地址到本地文档中
[*]      global $arr_host; //套用全局变量
[*]      array_push($arr_host, "$host:$port"); //添加到主机地址数组中
[*]      echo "'$host:$port'";
[*]    }
[*]}
[*]
[*]foreach ($handles as $ch) curl_multi_remove_handle($mh, $ch); //关闭并发请求的句柄
[*]curl_multi_close($mh);
[*]
[*]flush(); //刷新页面内容
[*]}
[*]
[*]function save_result($host) {
[*]$txt_name = basename($_SERVER['PHP_SELF']) . '.txt';
[*]$datetime = date('Y-m-d H:i:s', time());
[*]if ($file = fopen($txt_name, 'a')) { //打开文件
[*]    fwrite($file, "$datetime --> $host\r\n");
[*]    fclose($file); //关闭文件
[*]}
[*]}
[*]?>

复制代码

sungeek 发表于 2024-11-8 13:11:39

感谢楼主分享
页: [1]
查看完整版本: 扫IP.PHP