让php中的Telnet程序陷入这样的困境:转义字符是';^]';
我正在尝试创建如下内容:让php中的Telnet程序陷入这样的困境:转义字符是';^]';,php,telnet,php-socket,Php,Telnet,Php Socket,我正在尝试创建如下内容: telnet towel.blinkenlights.nl 666 telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 您必须在终端中写入它&它会向您发送一些响应,如果服务器请求,用户也可以发送输入 我找了很多,但还不够。只需以下代码: <?php $IP_ADDR='127.0.0.1'; $PORT='80'; echo "We
telnet towel.blinkenlights.nl 666
telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
您必须在终端中写入它&它会向您发送一些响应,如果服务器请求,用户也可以发送输入
我找了很多,但还不够。只需以下代码:
<?php
$IP_ADDR='127.0.0.1';
$PORT='80';
echo "Welcome to LOCALHOST...";
$connection = fsockopen($IP_ADDR, $PORT);
if(!$connection){
echo "No Connection";
}else{
echo "Hello, what's your name?";
}
?>
因此,在与localhost连接后,它不会显示输出,我必须键入任何字符,然后按enter键,然后显示此输出:
g
Welcome to LOCALHOST...Hello, what's your name?Connection closed by foreign host.
那么,我如何避免每次为输出插入字符时出现这种情况呢
请帮帮我。
谢谢
编辑代码:
My Code :
$IP_ADDR='127.0.0.1';
$PORT='80';
$connection = fsockopen($IP_ADDR, $PORT);
if(!$connection){
echo "No Connection";
}else{
$filename = "sampledata.txt";
$somecontent = "Weekend is about to come.";
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file";
exit;
}
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file";
exit;
}
echo "Success";
fclose($handle);
} else {
echo "The file $filename is not writable";
}
}
Output :
telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
d
Success, wrote (Weekend is about to come.) to file (sampledata.txt)Connection closed by foreign host.
echo
在这里不起作用,因为echo
将输出放到STDIO
。您需要使用fwrite
函数写入套接字,就像对普通系统文件那样
请查看:
您可以使用在PHP脚本中创建服务器。查看PHP文档提供的页面,了解如何在PHP中创建服务器
#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = '192.168.1.53';
$port = 10000;
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}
do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}
/* Send instructions. */
$msg = "\nWelcome to the PHP Test Server. \n" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));
do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($msgsock)) . "\n";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\n";
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf\n";
} while (true);
socket_close($msgsock);
} while (true);
socket_close($sock);
?>
#/usr/local/bin/php-q
但它仍然显示“转义字符为“^]”。而不是直接显示输出。我编辑了问题并添加了最近的代码。请看一看,帮帮我。ThanksIt有点不清楚如何使用fsockopen()
调用。您没有使用$connection
变量执行任何操作。您想用PHP脚本启动服务器(可以通过“telnet”连接),还是想用PHP脚本作为客户端连接到现有的telnet服务器?在您的场景中,什么是服务器,什么是客户端?@Progman让我在这里澄清一下。我想用php实现这一点。像这样的。如果有人键入telnet subdomain.mydomain.com
它应该连接到它,而不显示转义字符是“^]”。
显示一个菜单来执行类似于1的操作。登录2。登记册3。像这样退出。我们使用这个telnet telehack.com
的方式,因此我将拥有自己的基于linux的共享服务器和MySQL数据库来存储数据。或者如果我错了,请指导我如何实现这一点。非常感谢你,我只是第一次访问这个网站,得到了这个例子。但是错误是权限被拒绝了&还有socket\u bind():无法绑定地址[98]:地址已在使用中。所以我把我的Apache2端口从80改为2323,这样在1024以上我们就不需要许可,端口就可以使用了。所以请告诉我哪里做错了?我刚刚更改了您上面提供的代码中的以下行:$address='192.168.1.203'代码>$port=2323代码>@AndroidDeveloper您不能在同一端口上运行两个应用程序/服务/服务器。当apache在端口80上运行,并且PHP脚本尝试在同一端口上创建服务器时,您将收到此错误消息。您必须为PHP脚本选择一个空闲端口,而不是使用(apache服务器)已经使用的端口。您可以让apache服务器在端口80上运行,并让PHP脚本在任何其他可用端口(如示例中的端口10000)上运行服务器。非常感谢,先生,脚本现在运行正常。但我如何在实际服务器上运行它,而不是端口号10000,如何像这样运行telnet subdomain.mydomain.com
,所以它将端口23作为默认端口。就像这个示例telnet tower.blinkenlights.nl
@AndroidDeveloper如果不向apache配置添加其他端口,请将其保留在端口80上。在PHP脚本中使用端口10000并运行它。只要PHP脚本正在运行,您就可以通过telnet ip 10000连接到它。顺便说一句:PHP脚本不需要通过apache执行。如果可能,您可以从CLI运行它,如“php yourfile.php”。通过这种方式,您根本不需要apache服务器就可以从PHP脚本获得服务器。