php发送命令到端口(通过tcp)

时间:2015-02-15 09:48:13

标签: php tcp

我正在寻找一个php脚本来通过tcp触发到特定端口的命令。该脚本在我要发送这些命令的同一台机器上运行,因此ip是127.0.0.1或localhost。

该命令将被定义为在url后面写的任何内容。例如,trigger.php?屏幕将发送命令'screen',trigger.php?sound将发送命令'sound'等。

这可能吗?我没有太多的编码知识。

简而言之:当我打开127.0.0.1/trigger.php?sound时,我希望通过tcp将命令声音发送到127.0.0.1端口33000。如果使用html或cgi更容易实现,那也没关系。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你的trigger.php会是这样的(改变http://php.net/manual/en/sockets.examples.php的例子 适合你的问题;)

<?php
$DEBUG=1;

if ($DEBUG) {
     print "<pre>\n";
     error_reporting(E_ERROR | E_WARNING | E_PARSE);
     ini_set("display_errors", 1);
     ini_set('display_startup_errors',1);
}
if (isset($_SERVER['QUERY_STRING'])
    $cmd=$_SERVER['QUERY_STRING']; //get the command name
else
    $cmd="";

print "Command to trigger: $cmd\n";
if ($cmd!="") {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) {
        echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
    } else {
        if ($DEBUG) print "Socket created successfully\n";
        $result = socket_connect($socket, "127.0.0.1", 33000);
        if ($result === false) {
            echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
        } else {
            if ($DEBUG) print "Connected successfully\n";
            socket_write($socket, $cmd, strlen($cmd));
            //Read and output possible response from the command sent
            echo "Response: ";
            while ($out = socket_read($socket, 2048)) {
                echo $out;
            }
        }
        socket_close($socket);
    }
}
if ($DEBUG) print "The end.</pre>\n";

?>

(注意我没有运行它或进行语法检查,但看起来可能是你想要的)

答案 1 :(得分:0)

所以我做了一些关于通过php发送telnet命令的研究,发现了一个类似于我需要的脚本。我修改了它并添加了user3134164的行以获取命令名称。

脚本看起来像这样,效果很好。我打开phptrigger.php?命令,我在问号后面的任何内容都将按照计划执行。非常感谢您的帮助,user3134164:)

<?php
    $socket = fsockopen("localhost", "33000", $errno, $errstr); 

    $cmd=$_SERVER['QUERY_STRING']; 

    if($socket) 
{ 
    echo "Connected. <br /><br />"; 
} 
else 
{ 
    echo "Connection failed!<br /><br />"; 
} 

    fputs($socket, "get /$cmd \r\n"); 

    $buffer = ""; 

    while(!feof($socket)) 
{ 
    $buffer .=fgets($socket, 4096); 
} 

    print_r($buffer); 
    echo "<br /><br /><br />"; 
    var_dump($buffer); 

    fclose($socket); 
?>