Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Administración del sistema » Seguridad


Nuevo tema Responder al tema
 [ 2 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Mié Mar 05, 2008 12:00 am
Mensajes: 18

Nota Publicado: Mar Ago 26, 2008 6:16 pm 
Arriba  
alguien sabe como debo programar un script en perl o en c para que escuche por un puerto predeterminado como por ejemplo en 5555?

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Jue Abr 17, 2008 11:00 pm
Mensajes: 330
Ubicación: Buenos Aires

Nota Publicado: Mié Ago 27, 2008 7:13 pm 
Arriba  
PERL ni idea, te paso un ejemplo de programa cliente y programa servidor escrito en C.

Código:
/* srv.c
*
*   Un simple "servidor" que escucha al cliente clnt.c
*
*/

/*
*  Estos headers estan en /usr/include
*/
#include <stdio.h>         
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT   3389   /* El puerto que sera abierto */
#define BACKLOG   5   /* El maximo numero de conexiones permitidas */

int main(void) {

   int fd_srv, fd_clnt;    /* los ficheros descriptores */

   struct sockaddr_in server;   /* para la informacion de la direccion del servidor */

   struct sockaddr_in client;   /* para la informacion de la direccion del cliente */

   int sin_size;

   /* A continuacion la llamada a socket()
   *    AF_INET y SOCK_STREAM estan definidas en bits/socket.h, la cual esta incluida en sys/socket.h
   */
   if ((fd_srv=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) { 
      printf("error en socket()\n");
      exit(-1);
   }

   /*  Completamos la estructura server
   */

      server.sin_family = AF_INET;         

      /*
      *  htons -> Nodo a variable corta de red
      *  htonl -> Nodo a variable larga de red
      *  ntohs -> Red a variable corta de nodo
      *  ntohl -> Red a variable larga de nodo
      */
      server.sin_port = htons(PORT);

      /*
      * INADDR_ANY esta definida en netinet/in.h
      *  y coloca nuestra direccion IP automaticamente
      */
      server.sin_addr.s_addr = INADDR_ANY;

      /* Escribimos ceros en el resto de la estructura */
      bzero(&(server.sin_zero),8);

   /* Terminada la estructura server
   */

   /* A continuacion la llamada a bind() */
   if(bind(fd_srv, (struct sockaddr*)&server, sizeof(struct sockaddr)) == -1) {
      printf("error en bind() \n");
      exit(-1);
   }     

   if(listen(fd_srv, BACKLOG) == -1) {  /* llamada a listen() */
      printf("error en listen()\n");
      exit(-1);
   }

   while(1) {
      sin_size = sizeof(struct sockaddr_in);
      if ((fd_clnt = accept(fd_srv, (struct sockaddr *)&client, &sin_size)) == -1) {
         printf("error en accept()\n");
         exit(-1);
      }

      /* Mostrara la direccion IP del cliente */
      printf("Se obtuvo una conexion desde %s\t%d\n", inet_ntoa(client.sin_addr), client.sin_addr);

      /* Enviamos el mensaje de bienvenida al cliente */
      send(fd_clnt, "Bienvenido a mi servidor.\n", 26, 0);

      close(fd_clnt); /* Cierra la conexion con el cliente */
   }
}


Código:
/* clnt.c
*
*   Este programa se conecta al srv.c
*   Debemos pasar como argumento de la linea de comandos la IP donde esta corriendo el srv.c
*
*/

/*
*  Estos headers estan en /usr/include
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>   /* netbd.h es necesitada por la estructura hostent ;-) */

#define PORT       3550   /* El Puerto Abierto del nodo remoto */
#define MAXDATASIZE    100   /* El numero maximo de datos en bytes que puede recibir este programejo */

int main(int argc, char *argv[]) {

   int fd, numbytes;       

   char buf[MAXDATASIZE];   /* en donde es almacenara el texto recibido */

   /*
    * hostent esta definida en netdb.h
   */
   struct hostent *he;      /* estructura que recibira informacion sobre el nodo remoto */

   struct sockaddr_in server;   /* informacion sobre la direccion del servidor */

   if (argc !=2) {
      printf("Uso: %s <Direccion IP del servidor de flujos>\n", argv[0]);
      exit(-1);
   }

   if ((he = gethostbyname(argv[1])) == NULL) {       
      printf("gethostbyname() error\n");
      exit(-1);
   }

   if ((fd = socket(AF_INET, SOCK_STREAM, 0))==-1){ 
      printf("socket() error\n");
      exit(-1);
   }

   server.sin_family = AF_INET;
   server.sin_port = htons(PORT);
   server.sin_addr = *((struct in_addr *)he->h_addr); 
   /* he->h_addr pasa la informacion de "*he" a "h_addr" */
   bzero(&(server.sin_zero),8);

   if(connect(fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) {
      printf("connect() error\n");
      exit(-1);
   }

   if ((numbytes = recv(fd, buf, MAXDATASIZE, 0)) == -1) {
      printf("Error en recv() \n");
      exit(-1);
   }

   buf[numbytes]='\0';

   /* muestra el mensaje de bienvenida del servidor */
   printf("Mensaje del Servidor: %s\n",buf);

   close(fd);   /* cerramos fd */

}


Slds.

 Perfil YIM  
Mostrar mensajes previos:  Ordenar por  
 [ 2 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO