yf1197565391 发表于 2024-10-30 20:41:21

酒店扫ip.php

本帖最后由 yf1197565391 于 2024-10-31 18:35 编辑

求教下大神这个怎么修改成扫C.D段代码,   目前只能扫一组D段,改了半天全部都是报错


<?php
//播放格式http://127.0.0.1/jdtv.php?vid=1&id=2
header('Content-Type: text/json;charset=utf-8');
$vid=$_GET["vid"];
$id=$_GET["id"];
if($vid==null){$vid=1;}
//定义扫描ip起始和端口值
$PD=[
'1'=>['121.29.80.',':9901','240'],
'2'=>['127.0.0.',':2223','1'],
'3'=>['192.168.1.',':9901','1'],
];
$ips=@$PD[$vid];
$dk=@$PD[$vid];
$ii=@$PD[$vid];
//扫描并保存
$cache2='tv';
if(!is_dir($cache2)){
mkdir(iconv('UTF-8','GBK',$cache2),0777,true);
}
$bc="tv/".$vid."cache2.txt";
$urls=file_get_contents($bc);
if($urls==null){$urls=0;}
$hls="http://".$ips.$urls.$dk."/tsfile/live/".$id."_1.m3u8";
if(wy($hls)=='200'){
header("Location:".$hls);}else{
for($i=$ii;$i<256;$i++){
$hls="http://".$ips.$i.$dk."/tsfile/live/".$id."_1.m3u8";
if(wy($hls)=='200'){
$tv=file_put_contents($bc,$i);
header("Location:".$hls);
exit;}}}
function wy($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_TIMEOUT_MS,500);
curl_exec($ch);
$data=curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
return $data;}
?>

jiteloozz 发表于 2024-10-30 21:38:37

单从代码的运行性来说,两个for循坏缺少结束符 }。首先代码就无法运行。
$ips=@$PD[$vid];   PD数组中[$vid]定义有误,以'1'=>['121.29.80.' . $i . '.' . $j . ':9901','240']
$ii=@$PD[$vid];   PD数组中[$vid]无定义。
$hls="http://".$ips.$urls.$dk."/tsfile/live/".$id."_1.m3u8";   url结构混乱,变量代入的话,压根不是一个url地址
$id也没有格式化为0001字符串形式。
在处理代码,正常逻辑url找到有效,则输出,保存;无论是在d段还是c段。else的逻辑是没找到的处理,为什么又增加一个循坏。
坛里不是有优秀的相关扫描代码吗?

yf1197565391 发表于 2024-10-30 21:54:47

jiteloozz 发表于 2024-10-30 21:38
单从代码的运行性来说,两个for循坏缺少结束符 }。首先代码就无法运行。
$ips=@$PD[$vid];   PD数组中[$ ...

不知道哪个是更好的,想找个可以扫C/D段的,有效IP自动保存,方便调用,加快输出

tvbox007 发表于 2024-10-31 09:30:45

你真有才,php扫,不崩溃才怪

Nirvana 发表于 2024-11-1 03:30:18

刚学php时写的,所以注释写得比较详细,支持ABCD段扫描(只要你有耐心{:4_104:}),后来发现空间测绘很方便,所以这个代码已经很久不使用了,由于要用多个端口去猜,所以效率很差,你可以参考参考。



<?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); //关闭文件
}
}
?>

gbz2 发表于 2024-11-4 17:58:29

人生没有彩排,每天都是直播
页: [1]
查看完整版本: 酒店扫ip.php