fwrite () yazmıyorum.

2 Cevap php

Bir Win32 sistemde bir uzak istemci komutlar göndermek için bir script kurmak için çalışıyor. İşte kod:

$command = $_POST['command'];
$host = $_POST['host'];
$port = $_POST['port'];
$fp = @fsockopen($host, $port, $e, $s, 15);
if (!$fp) {
    echo 'Error! Here\'s your problem: ' . $e . ': ' . $s;
}else{
    $fw = fwrite($fp, $command);
        if (!$fw){
            echo 'Failed sending command.';
            fclose($fp);
        }else{
            fclose($fp);
            echo 'Successfully sent: ' . $command;
        }
}

Benim dostum uzak istemci üzerinde çalışıyor, ve o bu komut '' gönderdiğini söylüyor

Ancak, benim komut dosyası yankılanır Successfully sent: test

Ben yanlış bir şey yapıyor, ya da onun ucunda bir sorun muyum?

2 Cevap

(Not a solution ...yet)
What does

$command = $_POST['command'];
$host = $_POST['host'];
$port = $_POST['port'];

$fp = @fsockopen($host, $port, $e, $s, 15);
if (!$fp) {
  echo 'Error! Here\'s your problem: ' . $e . ': ' . $s;
}
else{
  $fw = fwrite($fp, $command);

  if (false===$fw) {
    echo 'Failed sending command. ';
    if ( function_exists('error_get_last') ) {
      var_dump( error_get_last() );
    }
  }
  else if ( strlen($command)!==$fw ) {
    printf('only %d of strlen(%s)=%d bytes have been sent', $fw, $command, strlen($command));
  }
  else{
    echo 'Successfully sent ', $fw, ' bytes. command=', $command;
  }
  fclose($fp);
}

yazdırabilir?

güncelleme: Bu kukla sunucu komut karşı test zaman (php-cli ile) çalışır mı?

$srv = socket_create_listen(8082);

for($dbgCounter=0; $dbgCounter < 60; $dbgCounter++ ) {
  echo '.';
  $read = array($srv); $write=array(); $ex=array();
  if ( 0 < socket_select($read,  $write, $ex, 1) ) {
    echo "\n";
    $c = socket_accept($srv);
    echo "socket accepted\n";
    while( 0<socket_recv($c, $buffer, 1024, 0) ) {
      var_dump($buffer);
    }
    echo "socket_close\n";
    socket_close($c);
    $dbgCounter = PHP_INT_MAX;
  }
}
echo "done.\n";

(Böyle bir şey varsa) İlk uzak makinede daha sonra aynı makinede ($ _POST ['host'] === 'localhost') üzerinde deneyin.

UDP bağlantıları ile test edilir? Bu (çünkü güvenlik duvarı kuralları veya anti-virus/malware yazılım yani) UDP kullanırken soketi açılması sessizce başarısız olması mümkündür, ve (üzerinde UDP ilgili uyarıyı görmek ona veri yazmaya çalıştığınızda, sadece bu fark edeceksiniz http://php.net/manual/en/function.fsockopen.php). error_reporting(E_ALL); gerçek nedenini bulmak için yardımcı olabilir ekleme.