Alguien puede darme una luz sobre como puedo programar un Emulador Telnet en Php.
(un Script que me permita hacer una conexion Telnet a un servidor y puerto especifico y enviar- recibir mensajes)
O si alguien sabe de un script ya hecho pues mucho mejor... xD
Please!! ayuda...
Lee sobre manejo de sockets
Saludos
Alguna otra guia mas especifica?¿ :-\
Olvidenlo...
Lo he logrado ;D
Ahora alguien sabe de algun host que permita abrir sockets?¿
Tengo un problema con el emulador de telnet que estoy creando:
el problema es el siguiente:
Tengo la conexión con el servidor abierta, un inputbox donde ingreso el comando que le enviare al servidor, y el textarea donde se deben ver todos los comandos enviados y las respuestas recibidas. Pero para enviar un comando lo envio a la misma pagina en forma de formulario con Post y luego lo trato de enviar con fputs, pero al hacerlo me da error:
"Warning: fputs(): supplied argument is not a valid stream resource in ****\***.php on line 138" huh
imagino que esto ocurre debido a que en el momento en que llamo de nuevo a la pagina para enviarle un nuevo comando la conexión que he abierto en un principio se pierde, y el identificador de la conexión que le paso a fputs no es valido.
Alguien sabe como puedo recoger el comando del input box y actualizar el contenido del textarea sin perder la conexión??? rolleyes
Ayuda... tongue
Puedes meterlo en variables de Session
primero hazte una clase simple para manejo de sockets
las operaciones basicas conectar , cerrar la conexion, recoger datos , enviar datoss y lo que creas necesario , despues haz un include de esa clase y crea una variable session de una instancia de esa clase
asi la session se encargara de hacer perdurar tu objeto
Saludos
<?php
$da = fsockopen("$HOST", 23, $errno, $errstr, 30);
if (!$da) {
echo "$errstr ($errno)<br />\n";
} else {
$salida = "$USER\r\n";
$salida .= "$PASS\r\n";
$salida .= "$COMANDOS\r\n";
$salida .= "exit\r\n";
fwrite($da, $salida);
while (!feof($da)) {
echo fgets($da, 128);
}
fclose($da);
}
?>
Defines host, user, pass y los comandos.
Cita de: alone-in-the-chat en 20 Diciembre 2007, 18:03 PM
Puedes meterlo en variables de Session
primero hazte una clase simple para manejo de sockets
las operaciones basicas conectar , cerrar la conexion, recoger datos , enviar datoss y lo que creas necesario , despues haz un include de esa clase y crea una variable session de una instancia de esa clase
asi la session se encargara de hacer perdurar tu objeto
Saludos
Intente lo de las sesiones y no funciono.. :-\
El identificador de la conexion se me desaparace en cuanto intento enviar un comandp.. :P
Aca lo basico del codigo para ver si alguien detecta cual es el error.. :-[
Code: Page.php
Obtengo el servidor al que me voy a conectar...
Citar
<?php
session_start();//Start session
header("Cache-control: provate");//Fix the IE6 Sessions problem
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<form action="page2.php" method=post>
<input name="server" type="text" id="text" />
<input type="submit" name="Submit" value="Submit" />
</form>
</body>
</html>
CODE: page2.php
Aqui hago todo el manejo... El problema es que el identificador del Socket de la conexion se desaparece en cuanto intento enviar un commando.. :-\\
Citar
<?php
session_start();//Start out session
header("Cache-control: provate");//Fix the IE6 Sessions problem
?>
<?php
if($HTTP_POST_VARS["server"])
{
$_SESSION['server'] = $HTTP_POST_VARS["server"];
$_SESSION['conection'] = fsockopen($_SESSION['server'],25);
$_SESSION['screen']=fgets($_SESSION['conection'],256);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Typer" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>
</head>
<body>
<p align="center" class="style1">SERVER: <?php print($_SESSION['server']) ?> </p>
<p align="center" class="style1">CONECTION: <?php print($_SESSION['conection']) ?> </p>
<p align="center">
<?php
if($HTTP_POST_VARS["command"])
{
fwrite($_SESSION['conection'], $HTTP_POST_VARS["command"]);
$response=fgets($_SESSION['conection'],256) ;
$_SESSION['screen'] = $_SESSION['screen']."\r\n". $HTTP_POST_VARS["command"]."\r\n".$response;
}
?>
<form action="page2.php" method=post>
<div align="center">
<textarea name="Tex" cols="40" rows="10" id="Tex"><?php print($_SESSION['screen'])?>
</textarea>
</p>
</div>
<p align="center">
<input name="command" type="command" id="command" />
</p>
<p align="center">
<input type="submit" name="Submit" value="Submit" />
</p>
</body>
</html>
Bueno por lo que parece la conexion abierto mediante sockets se cierra apenas termina de ejecutarse el script
por lo tanto intentar mantener una conexion socket por session es imposible
Estoy intentando hacerlo manteniendo los comandos que vas ingresando
:-\
veremos como va la cosa te voy poniendo un avance .
Aun hay que modificarlo aver si mas tarde me doy un toke
sockets.php
<?php
class CI_Sockets {
var $socket;
function createSock($server,$port)
{
$direccion = gethostbyname($server);
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$resultado = socket_connect($this->socket, $direccion, $port);
if ($resultado < 0)
{
return false;
}else{
return true;
}
}
function up($string)
{
return socket_write($this->socket, $string);
}
function get()
{
if(!socket_last_error($this->socket))
{
if($buffer=socket_read($this->socket,4096,PHP_NORMAL_READ))
{
return $buffer;
}
}
}
function closeSocket()
{
return socket_close($this->socket);
}
}
?>
page1.php
<?php
session_start();
session_destroy();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Define</title>
</head>
<body>
<form action="page2.php" method="post">
<input name="server" type="text" id="text" />
<input type="submit" name="Submit" value="Submit" />
</form>
</body>
</html>
page2.php
<?php
include("sockets.php");
session_start();
if (!session_is_registered("Srv") && isset($_POST['server']))
{
session_register("Srv","Commands");
$_SESSION['Srv'] = $_POST['server'];
$_SESSION['Commands'] = array();
}
$ci_socket = new CI_Sockets();
$ci_socket->createSock($_SESSION['Srv'],PUERTO,$socket);
if (isset($_POST['command']))
{
$_SESSION['Commands'][] = $_POST['command'];
$_SESSION['Commands'] = array_unique($_SESSION['Commands']);
$cadena = "";
foreach($_SESSION['Commands'] as $var)
{
$ci_socket->up(trim($var));
$cadena .= $ci_socket->get();
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Typer" content="text/html; charset=iso-8859-1" />
<title> =_= </title>
</head>
<body>
<form method=post>
<div align="center">
<textarea name="command" cols="40" rows="10" id="command" />
<?php
echo $cadena;
?>
</textarea>
</div>
<p align="center">
<input name="command" type="command" id="command" />
</p>
<p align="center">
<input type="submit" name="Submit" value="Submit" />
</p>
</body>
</html>
<?php
$ci_socket->closeSocket();
?>
ya voy saliendo del trabajo X) veamos si llegando a mi casa continuo buscando en foros eh encontrado que varios se chocaron con esto
Veremos si puedo darle solucion :-\
Se aceptan sugerencias
;D