Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2007
keikurono keikurono is offline
Miembro
 
Registrado: mar 2007
Posts: 16
Poder: 0
keikurono Va por buen camino
Talking programar, para internet con delphi

hola a todos

bueno, tengo un problema, no se como programar con delphi para que desde el programa creado con él, se pueda conectar a internet (via consola osea >>telnet www.nombre_pagina.com )para luego dar comandos en el (osea en la consola) lo queria hacer con el cmd pero no me sé los comandos de este, y
me parecio mas facil hacerlo via delphi.

osea lo que quiero hacer es: via telnet conectarme a mi router y luego dar los comandos uno tras otro hasta reiniciarlo, pero lo quiero hacer cada x minutos y esto me hace pensar que lo pueda hacer con el delphi con esa paleta llamada time pero de allí ahora que lo pienso como hago para conectarme al cmd ???

haver que me dicen para hacer la jugada ojo que mi router no lo tengo a la mano ...

saludos.
Responder Con Cita
  #2  
Antiguo 21-05-2007
keikurono keikurono is offline
Miembro
 
Registrado: mar 2007
Posts: 16
Poder: 0
keikurono Va por buen camino
haa y una cosa mas ... si alguien sabria de algun manual delphi para programar, y como utilizar la paleta internet de delphi se agradeceria..

saludoss..
Responder Con Cita
  #3  
Antiguo 21-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Te veo un poco perdido , no entiendo por que metes al cmd en esto. El cmd simplemente es un interprete de comandos. Supongo que tu estas hablando del telnet, que no es un "comando" del cmd, sino que es un programa.

Por otro lado, para conectarte por telnet al router no necesitas de ningún programa. El protocolo telnet es de los mas sencillos, básicamente consiste en enviar y recibir lineas de texto, nada mas. Así que con muy poco, puedes hacer que tu programa se comunique con el router.

No indicas que versión de delphi estas usando, ni de que componentes dispones. Si tienes instalados los componentes Indy, en la paleta encontraras un cliente de telnet, si solo dispones de TClientSocket o TTCPClient (el que viene con los turbos), tampoco te sera muy difícil. Y si no dispones de nada, pues lo hacemos a mano .

Por ejemplo, esto lo utilizo con mi router ADSL COMTREND, que me puso Telefónica, para reiniciarlo. En tu caso tendrás que adaptarlo a tu marca y modelo de router, ya que los comandos y respuestas pueden ser diferentes.

// Es una aplicación de consola
Código Delphi [-]
program TelScript;

{$APPTYPE CONSOLE}

uses Windows, Sysutils, WinSock;

// Crea un socket y lo conecta a la direccion indicada.
function Conectar(Host: string; Puerto: Integer): TSocket;
var
  Address: u_long;
  HostEnt: phostent;
  Addr: sockaddr_in;
begin
  Result:= INVALID_SOCKET;
  Address:= inet_addr(Pchar(Host));
  if Address = INADDR_NONE then
  begin
    HostEnt:= gethostbyname(PChar(Host));
    if HostEnt <> nil then
      Address:= PInAddr(HostEnt.h_addr_list^)^.S_addr;
  end;
  if Address <> INADDR_NONE then
  begin
    Result:= socket(AF_INET, SOCK_STREAM, 0);
    if Result <> INVALID_SOCKET then
    begin
      Addr.sin_family:= AF_INET;
      Addr.sin_addr.S_addr:= Address;
      Addr.sin_port:= htons(Puerto);
      if connect(Result, Addr, Sizeof(Addr)) = SOCKET_ERROR then
      begin
        closesocket(Result);
        Result:= INVALID_SOCKET;
      end;
    end;
  end;
end;

// Envia un texto al router
function Enviar(Socket: TSocket; Str: string): Boolean;
begin
  Result:= send(Socket,PChar(Str)^,Length(Str),0) <> SOCKET_ERROR;
end;

// Esta funcion espera hasta que recibe una respuesta, si transcurrido
// un tiempo prudencial no se recibe la respuesta esperada la
// funcion termina y devuelve FALSE
const
  Alfanumericos = ['A'..'Z','a'..'z','0'..'9',':','-','<','>',' ','.'];

function EsperarStr(Socket: TSocket; Str: string; TimeOut: Cardinal): boolean;
var
  i,j: integer;
  s: string;
  Tick: DWORD;
  FDSet: TFDSet;
  TimeVal: TTimeVal;
  Buffer: array[0..1024] of Char;
begin
  s:= '';
  Tick := GetTickCount;
  while not (pos(Str, s) > 0) do
  begin
    TimeVal.tv_sec := 0;
    TimeVal.tv_usec := 500;
    FD_ZERO(FDSet);
    FD_SET(Socket, FDSet);
    if select(0, @FDSet, nil, nil, @TimeVal) > 0 then
    begin
      fillchar(Buffer, sizeof(Buffer), 0);
      i := recv(Socket, Buffer, sizeof(Buffer) - 1, 0);
      if (i > 0) then
      begin
        for j:= 0 to i-1 do
          if Buffer[j] in Alfanumericos then
            s:= s + Buffer[j];
      end else
        break;
    end
    else if (GetTickCount - Tick) > TimeOut then
      break;
  end;
  Result:= pos(Str, s) > 0;
end;

// Este es el script que se ejecuta en el router, dependiendo del router,
// puede que sea necesario cambiar alguna cosa. Este esta diseñado
// para un router ADSL CONTREND de telefonica.
function Script(Socket: TSocket): Boolean;
begin
  Result:= FALSE;
  // Esperamos a que nos pida el login
  if EsperarStr(Socket,'ogin:',5000) then
  begin
    // Enviamos el login (1234 en mi caso)
    Enviar(Socket,'1234'+#13);
    // Esperamos a que nos pida el password
    if EsperarStr(Socket,'assword:',5000) then
    begin
      // Enviamos el password (1234 en mi caso)
      Enviar(Socket,'1234'+#13);
      // Esperamos hasta ver el prompt
      if EsperarStr(Socket,'->',5000) then
      begin
        // Enviamos el comando reboot
        Enviar(Socket,'reboot'+#13);
        // Esperamos hasta que el router comienza con el reset
        if EsperarStr(Socket,'wait...',5000) then
        begin
          Result:= TRUE;
        end;
      end;
    end;
  end;
end;

// Esta funcion la usamos para mostrar mensajes
procedure Mensaje(Str: string);
begin
  Messagebox(0,PChar(Str),'TelScript',MB_OK);
end;

procedure Vamos;
var
  WSAData: TWSADATA;
  Socket: TSocket;
begin
  if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  begin
    // Conectamos con el router, en mi caso, la direccion es 192.168.1.1
    Socket:= Conectar('192.168.1.1',23);
    if Socket <> INVALID_SOCKET then
    begin
      // Ejecutamos el script
      if Script(Socket) then
        Mensaje('El script termino con exito')
      else
        Mensaje('El script no pudo completarse');
      closesocket(Socket);
    end else
      Mensaje('No puedo establecer la conexion con el router');
    WSACleanup;
  end;
end;

begin
  Vamos;
end.

Última edición por seoane fecha: 21-05-2007 a las 20:17:02.
Responder Con Cita
  #4  
Antiguo 13-12-2008
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 17
jeremiselxi Va por buen camino
Hola seoane

Cita:
Empezado por seoane Ver Mensaje
Te veo un poco perdido , no entiendo por que metes al cmd en esto. El cmd simplemente es un interprete de comandos. Supongo que tu estas hablando del telnet, que no es un "comando" del cmd, sino que es un programa.

Por otro lado, para conectarte por telnet al router no necesitas de ningún programa. El protocolo telnet es de los mas sencillos, básicamente consiste en enviar y recibir lineas de texto, nada mas. Así que con muy poco, puedes hacer que tu programa se comunique con el router.

No indicas que versión de delphi estas usando, ni de que componentes dispones. Si tienes instalados los componentes Indy, en la paleta encontraras un cliente de telnet, si solo dispones de TClientSocket o TTCPClient (el que viene con los turbos), tampoco te sera muy difícil. Y si no dispones de nada, pues lo hacemos a mano .

Por ejemplo, esto lo utilizo con mi router ADSL COMTREND, que me puso Telefónica, para reiniciarlo. En tu caso tendrás que adaptarlo a tu marca y modelo de router, ya que los comandos y respuestas pueden ser diferentes.

// Es una aplicación de consola
Código Delphi [-]
program TelScript;

{$APPTYPE CONSOLE}

uses Windows, Sysutils, WinSock;

// Crea un socket y lo conecta a la direccion indicada.
function Conectar(Host: string; Puerto: Integer): TSocket;
var
  Address: u_long;
  HostEnt: phostent;
  Addr: sockaddr_in;
begin
  Result:= INVALID_SOCKET;
  Address:= inet_addr(Pchar(Host));
  if Address = INADDR_NONE then
  begin
    HostEnt:= gethostbyname(PChar(Host));
    if HostEnt <> nil then
      Address:= PInAddr(HostEnt.h_addr_list^)^.S_addr;
  end;
  if Address <> INADDR_NONE then
  begin
    Result:= socket(AF_INET, SOCK_STREAM, 0);
    if Result <> INVALID_SOCKET then
    begin
      Addr.sin_family:= AF_INET;
      Addr.sin_addr.S_addr:= Address;
      Addr.sin_port:= htons(Puerto);
      if connect(Result, Addr, Sizeof(Addr)) = SOCKET_ERROR then
      begin
        closesocket(Result);
        Result:= INVALID_SOCKET;
      end;
    end;
  end;
end;

// Envia un texto al router
function Enviar(Socket: TSocket; Str: string): Boolean;
begin
  Result:= send(Socket,PChar(Str)^,Length(Str),0) <> SOCKET_ERROR;
end;

// Esta funcion espera hasta que recibe una respuesta, si transcurrido
// un tiempo prudencial no se recibe la respuesta esperada la
// funcion termina y devuelve FALSE
const
  Alfanumericos = ['A'..'Z','a'..'z','0'..'9',':','-','<','>',' ','.'];

function EsperarStr(Socket: TSocket; Str: string; TimeOut: Cardinal): boolean;
var
  i,j: integer;
  s: string;
  Tick: DWORD;
  FDSet: TFDSet;
  TimeVal: TTimeVal;
  Buffer: array[0..1024] of Char;
begin
  s:= '';
  Tick := GetTickCount;
  while not (pos(Str, s) > 0) do
  begin
    TimeVal.tv_sec := 0;
    TimeVal.tv_usec := 500;
    FD_ZERO(FDSet);
    FD_SET(Socket, FDSet);
    if select(0, @FDSet, nil, nil, @TimeVal) > 0 then
    begin
      fillchar(Buffer, sizeof(Buffer), 0);
      i := recv(Socket, Buffer, sizeof(Buffer) - 1, 0);
      if (i > 0) then
      begin
        for j:= 0 to i-1 do
          if Buffer[j] in Alfanumericos then
            s:= s + Buffer[j];
      end else
        break;
    end
    else if (GetTickCount - Tick) > TimeOut then
      break;
  end;
  Result:= pos(Str, s) > 0;
end;

// Este es el script que se ejecuta en el router, dependiendo del router,
// puede que sea necesario cambiar alguna cosa. Este esta diseñado
// para un router ADSL CONTREND de telefonica.
function Script(Socket: TSocket): Boolean;
begin
  Result:= FALSE;
  // Esperamos a que nos pida el login
  if EsperarStr(Socket,'ogin:',5000) then
  begin
    // Enviamos el login (1234 en mi caso)
    Enviar(Socket,'1234'+#13);
    // Esperamos a que nos pida el password
    if EsperarStr(Socket,'assword:',5000) then
    begin
      // Enviamos el password (1234 en mi caso)
      Enviar(Socket,'1234'+#13);
      // Esperamos hasta ver el prompt
      if EsperarStr(Socket,'->',5000) then
      begin
        // Enviamos el comando reboot
        Enviar(Socket,'reboot'+#13);
        // Esperamos hasta que el router comienza con el reset
        if EsperarStr(Socket,'wait...',5000) then
        begin
          Result:= TRUE;
        end;
      end;
    end;
  end;
end;

// Esta funcion la usamos para mostrar mensajes
procedure Mensaje(Str: string);
begin
  Messagebox(0,PChar(Str),'TelScript',MB_OK);
end;

procedure Vamos;
var
  WSAData: TWSADATA;
  Socket: TSocket;
begin
  if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  begin
    // Conectamos con el router, en mi caso, la direccion es 192.168.1.1
    Socket:= Conectar('192.168.1.1',23);
    if Socket <> INVALID_SOCKET then
    begin
      // Ejecutamos el script
      if Script(Socket) then
        Mensaje('El script termino con exito')
      else
        Mensaje('El script no pudo completarse');
      closesocket(Socket);
    end else
      Mensaje('No puedo establecer la conexion con el router');
    WSACleanup;
  end;
end;

begin
  Vamos;
end.
lo he intentado de todas formas y por mas que trato lo unico que me sale es este mensaje Mensaje('El script no pudo completarse');
en esta pagina esta mas o menos lo que quiero hacer..
http://jhonatan.net78.net/nuevo/invento.html
yo uso delphi 6 y ademas el modem es el Thomson Tg 585 v7....
si es posible hacerlo mas facil o como tu quieras... de antemano gracias por contestarme y ayudarme....
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #5  
Antiguo 13-12-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pon el código que estas usando, porque es un poco difícil ayudarte sin saber lo que estas haciendo
Responder Con Cita
  #6  
Antiguo 14-12-2008
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 17
jeremiselxi Va por buen camino
gracias seoane por intentar ayudarme

yo encontre una pagina que te enseña a usar el componente idtelnet via grafica y funciona bien... pero gracias a todos por responder en mi tema y a mi pregunta....... la pagina es la siguiente...
http://delphiallimite.blogspot.com/2...de-telnet.html
esta pagina es jevi para novatos como yo. espero que les ayude tanto como a mi....
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #7  
Antiguo 31-12-2008
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 17
jeremiselxi Va por buen camino
hola seoane

Cita:
Empezado por seoane Ver Mensaje
Pon el código que estas usando, porque es un poco difícil ayudarte sin saber lo que estas haciendo
quiero darte las gracias por ser una persona preocupada por ayudar a los demas en todo lo que puedas. espero alqun dia ser como tu... ah otra cosa...el ejemplo que puse mas arriba de el programa telnet con delphi tiene un solo problema.... ejemplo, si tu tienes en un notepad el usuario y la contraseña entrando por telnet tu puedes copiar el username y pergarlo todo en el telnet cliente y asimismo con el password, pero si tu lo haces asi con el programa ese que consegui no funciona eso. te explico donde yo trabajo que en claro dandole soporte a puerto rico hay una pagina donde estan unos codigos para programar el wireless por medio del telnet pero consola y utilizan mucho el copiar y pegarlo en el ternel, pero que pasa? que cuando hago esto con el programa no funciona.... necesito a ver si tu me puedes ayudar..... muchas gracias de antemano y palante mi hermano...
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #8  
Antiguo 21-05-2007
keikurono keikurono is offline
Miembro
 
Registrado: mar 2007
Posts: 16
Poder: 0
keikurono Va por buen camino
Gracias por responder rapidamente..

...Este programa es solo para entrar al router o es para reiniciarlo ??

ademas yo quiero reiniciar el router cada "x" minutos..

no entiendo algunos componentes me dirias de algun manual de como usar socket y entre otross que no los comprendo como
var
Address: u_long; ?
HostEnt: phostent;?
Addr: sockaddr_in;??......



...y utilizo delphi 7!!!!

saludoss
Responder Con Cita
  #9  
Antiguo 08-06-2007
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 19
fide Va por buen camino
Notice!

A mi tambien me hace mucha falta aprender a trabajar bien con los sockets.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
programación para Internet ¿con delphi? Lore Castillo Varios 1 07-12-2006 06:58:57
Ayuda para empezar usar Internet en Delphi ggram2 Internet 3 09-11-2005 19:27:20
programar para Pockets mia Varios 2 21-07-2005 12:58:59
Programar para APPLE eduarcol Varios 0 27-02-2005 21:59:56
Programar para PDA Novás Varios 2 02-12-2003 16:06:30


La franja horaria es GMT +2. Ahora son las 20:04:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi