elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  mostrar en cliente el resultado de execvp de servidor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: mostrar en cliente el resultado de execvp de servidor  (Leído 4,235 veces)
tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
mostrar en cliente el resultado de execvp de servidor
« en: 20 Marzo 2018, 18:34 pm »

tengo este codigo estandard de ejemplo no es el coidgo en si:
este codigo esta en el servidor y funciona bien con telnet
Código
  1. if(!fork())
  2. {
  3.     dup2(sockClie,0);//stdin
  4.     dup2(sockclie,1);//stdout
  5.     close(sockClie);
  6.   fgets(arg,sizeof arg,stdin);
  7.     execvp(arg,arg);
  8. }
  9.  
el problema q tengo es que no me funciona en mi programa cliente q hago una conecion normal con el connect(sd,....); por ejemplo cuando ejecuto telnet ip puerto me hace peticion del comando y luego muestra el resultado en la pantalla de telnet .. quiero q mi clilene haga lo mismo pero nada porfa  agradezco de antemano su ayuda gracias


« Última modificación: 20 Marzo 2018, 19:25 pm por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #1 en: 20 Marzo 2018, 19:04 pm »

Si muestras tu código podríamos ver donde falla. A lo mejor no es allí y es en otro sitio.


En línea

tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #2 en: 20 Marzo 2018, 19:07 pm »

Código
  1. while(1)
  2. {
  3. tam_cliente=sizeof cliente;
  4. sock_cliente=accept(sock_servidor,(struct sockaddr *)&cliente,&tam_cliente);
  5. if(sock_cliente<0)
  6. {
  7. perror("acceptando cliente");
  8. return -1;
  9. }
  10.  
  11. ip_cliente=inet_ntoa(cliente.sin_addr);
  12. puerto_cliente=ntohs(cliente.sin_port);
  13. printf("cliente conectado:%s:%d\n",ip_cliente,puerto_cliente);
  14. memset(mensaje_cliente,0,sizeof mensaje_cliente);
  15. //read(sock_cliente,&mensaje_cliente,sizeof mensaje_cliente);
  16. //printf("mensaje cliente:%s\n",mensaje_cliente);
  17. if(!fork())
  18. {
  19. printf("inicio fork\n");
  20. close(sock_servidor);
  21. dup2(sock_cliente,0);
  22. dup2(sock_cliente,1);
  23. close(sock_cliente);
  24. printf("introduzca comando:\n");
  25. fgets(mensaje_cliente,20,stdin);
  26. printf("mensaje_cliente=\n%s",mensaje_cliente);
  27. char *com[]={"ls","-l",NULL};
  28.                        execvp(com[0],com);
  29. exit(1);
  30. }
  31. close(sock_cliente);
  32. }
  33.  
  34. me funciona con telnet pero no con mi programa cliente que tengo creado en c que tiene las funciones basicas de conectar con servidor



Código
  1. int main()
  2. {
  3.   struct sockaddr_in cli;
  4.   struct sockaddr_in serv;
  5.   int s_cliente,s_servidor;
  6.  
  7.   s_cliente=socket(PF_INET,SOCK_STREAM,0);
  8.   if (s_cliente<0)
  9.   {
  10.      perror("socket");
  11.      return -1;
  12.   }
  13.  
  14.   cli.sin_family=AF_INET;
  15.   cli.sin_port=htons(0);
  16.   cli.sin_addr.s_addr=htonl(INADDR_ANY);
  17.   if(bind(s_cliente,(struct sockaddr *)&cli,sizeof cli)<0)
  18.   {
  19.      perror("bind");
  20.      return -1;
  21.   }
  22.  
  23.   serv.sin_family=AF_INET;
  24.   serv.sin_port=htons(PUERTO);
  25.   serv.sin_addr.s_addr=inet_addr("127.0.0.1");
  26.  
  27.   if(connect(s_cliente,(struct sockaddr *)&serv,sizeof serv)<0)
  28.   {
  29.      perror("connectando");
  30.      return -1;
  31.   }
  32.   char cadena[30];
  33.   //printf("introduzca el comando:\n");
  34.   //scanf("%[^\n]",cadena);
  35.   //fflush(stdin);
  36.   //send(s_cliente,cadena,sizeof cadena,0);
  37.   recv(s_cliente,cadena,sizeof cadena,0);
  38.   close(s_cliente);
  39.   return 0;
  40. }


este es el programa cliente




· Los códigos deben ir en etiquetas GeSHi
· No se debe publicar 2 veces seguidas, usar el boton modificar
>aquí las reglas del foro
-Engel Lex
« Última modificación: 20 Marzo 2018, 19:25 pm por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #3 en: 20 Marzo 2018, 19:13 pm »

Supongo que no lo sabes, pero deberías encerrar el código entre etiquetas GeSHi. Edita tus mensajes, ve al desplegable 'Código GeSHi' que tienes en las herramientas de edición, arriba de la respuesta, elige el lenguaje que vas a usar en tus ejemplos y aparecerán unas etiquetas tal que así [etiqueta][/etiqueta]. Mete en medio de ellas tu código. Tal que así:
[etiqueta]TU_CODIGO[/etiqueta].

Por otra parte, pon el código completo, porqué tener que andar haciendo parches para hacerlo ejecutable como que da pereza. Y paso. Y creo que el resto de la gente piensa igual.
« Última modificación: 20 Marzo 2018, 19:20 pm por MAFUS » En línea

tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #4 en: 20 Marzo 2018, 19:22 pm »

ok soy nuevo en esto gracias por responder
En línea

tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #5 en: 20 Marzo 2018, 19:25 pm »

servidor:

Código
  1. #include <stdio.h>
  2. #include<sys/types.h>
  3. #include<sys/socket.h>
  4. #include<unistd.h>
  5. #include<netinet/in.h>
  6. #include<stdlib.h>
  7. #include<netdb.h>
  8. #include<string.h>
  9. #include<arpa/inet.h>
  10. #include<signal.h>
  11. #define PUERTO 7777
  12.  
  13. int main()
  14. {
  15. struct sockaddr_in servidor;
  16. struct sockaddr_in cliente;
  17. int sock_servidor,sock_cliente;
  18.  
  19. if((sock_servidor=socket(AF_INET,SOCK_STREAM,0))<0)
  20. {
  21. perror("socket");
  22. return -1;
  23. }
  24. servidor.sin_family=AF_INET;
  25. servidor.sin_port=htons(PUERTO);
  26. servidor.sin_addr.s_addr=INADDR_ANY;
  27.  
  28. if((bind(sock_servidor,(struct sockaddr *)&servidor,sizeof servidor))<0)
  29. {
  30. perror("bind");
  31. return -1;
  32. }
  33.  
  34. if(listen(sock_servidor,20)<0)
  35. {
  36. perror("listen");
  37. return -1;
  38. }
  39. int tam_cliente;
  40. char* ip_cliente;
  41. int puerto_cliente;
  42. char mensaje_cliente[20];
  43. signal(SIGCHLD,SIG_IGN);
  44. while(1)
  45. {
  46. tam_cliente=sizeof cliente;
  47. sock_cliente=accept(sock_servidor,(struct sockaddr *)&cliente,&tam_cliente);
  48. if(sock_cliente<0)
  49. {
  50. perror("acceptando cliente");
  51. return -1;
  52. }
  53.  
  54. ip_cliente=inet_ntoa(cliente.sin_addr);
  55. puerto_cliente=ntohs(cliente.sin_port);
  56. printf("cliente conectado:%s:%d\n",ip_cliente,puerto_cliente);
  57. memset(mensaje_cliente,0,sizeof mensaje_cliente);
  58. //read(sock_cliente,&mensaje_cliente,sizeof mensaje_cliente);
  59. //printf("mensaje cliente:%s\n",mensaje_cliente);
  60. if(!fork())
  61. {
  62. printf("inicio fork\n");
  63. close(sock_servidor);
  64. dup2(sock_cliente,0);
  65. dup2(sock_cliente,1);
  66. close(sock_cliente);
  67. printf("introduzca comando:\n");
  68. fgets(mensaje_cliente,20,stdin);
  69. printf("mensaje_cliente=\n%s",mensaje_cliente);
  70. char *com[]={"ls","-l",NULL};
  71.                        execvp(com[0],com);
  72. exit(1);
  73. }
  74. close(sock_cliente);
  75. }
  76. return 0;
  77. }
  78.  

cliente:
Código
  1. #include<stdio.h>
  2. #include<sys/types.h>
  3. #include<sys/socket.h>
  4. #include<netinet/in.h>
  5. #include<arpa/inet.h>
  6. #include<netdb.h>
  7. #include<unistd.h>
  8. #include<stdlib.h>
  9. #include<string.h>
  10.  
  11. #define PUERTO 7777
  12. int main()
  13. {
  14. struct sockaddr_in cli;
  15. struct sockaddr_in serv;
  16. int s_cliente,s_servidor;
  17.  
  18. s_cliente=socket(PF_INET,SOCK_STREAM,0);
  19. if (s_cliente<0)
  20. {
  21. perror("socket");
  22. return -1;
  23. }
  24.  
  25. cli.sin_family=AF_INET;
  26. cli.sin_port=htons(0);
  27. cli.sin_addr.s_addr=htonl(INADDR_ANY);
  28. if(bind(s_cliente,(struct sockaddr *)&cli,sizeof cli)<0)
  29. {
  30. perror("bind");
  31. return -1;
  32. }
  33.  
  34. serv.sin_family=AF_INET;
  35. serv.sin_port=htons(PUERTO);
  36. serv.sin_addr.s_addr=inet_addr("127.0.0.1");
  37.  
  38. if(connect(s_cliente,(struct sockaddr *)&serv,sizeof serv)<0)
  39. {
  40. perror("connectando");
  41. return -1;
  42. }
  43. char cadena[30];
  44. //printf("introduzca el comando:\n");
  45. //scanf("%[^\n]",cadena);
  46. //fflush(stdin);
  47. //send(s_cliente,cadena,sizeof cadena,0);
  48. recv(s_cliente,cadena,sizeof cadena,0);
  49. close(s_cliente);
  50. return 0;
  51. }
  52.  
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #6 en: 20 Marzo 2018, 20:01 pm »

Ahora falta que una alma caritativa bajo *nix corra tu programa. Desde hace tiempo estoy trabajando con Windows. Equipo nuevo con garantía  :silbar:
En línea

tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #7 en: 20 Marzo 2018, 22:15 pm »

Jajjajajjajaj pero igual lo puedes migrar a windows es fácil , en windows trabajo con qt creator
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #8 en: 20 Marzo 2018, 22:45 pm »

Intenta convertir los datos recibidos en una cadena y mostrarla en pantalla. Es lo que falta en cliente.

No lo he probado, es intuición.
« Última modificación: 20 Marzo 2018, 22:46 pm por MAFUS » En línea

tojo2ska8

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: mostrar en cliente el resultado de execvp de servidor
« Respuesta #9 en: 21 Marzo 2018, 03:30 am »

probé con explorador de internet firefox http://direccionip:7777 y me funciona bien sin necesidad de convertir a srting execvp de igual manera me funciona con netcat nc direccionip 7777 y funciona bien me muestra el resultado en la pantalla de nc , con telnet igual funciona .. pero mi programa cliente no se como controlar o q lineas de codigo me faltan me siento bloqueado :(
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
mostrar resultado de tabla en textbox
Programación Visual Basic
oscardiaz 4 8,085 Último mensaje 18 Septiembre 2009, 04:28 am
por oscardiaz
ayuda con php mostrar foto segun resultado « 1 2 »
PHP
rainner 10 5,679 Último mensaje 30 Julio 2010, 05:50 am
por Zazú
Mostrar resultado de www.images.google.com en PictureBox
.NET (C#, VB.NET, ASP)
enterariel 9 5,039 Último mensaje 5 Agosto 2012, 02:36 am
por Keyen Night
No puedo mostrar los resultado correctos en mi calculadora « 1 2 »
.NET (C#, VB.NET, ASP)
DanielPy 12 7,243 Último mensaje 6 Mayo 2013, 21:20 pm
por engel lex
Mostrar resultado de un web service JSON
PHP
lucheano 9 5,571 Último mensaje 28 Septiembre 2015, 23:56 pm
por 0roch1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines