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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Fallo al pasar por argumento ip y puerto a socket...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fallo al pasar por argumento ip y puerto a socket...  (Leído 3,711 veces)
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Fallo al pasar por argumento ip y puerto a socket...
« en: 21 Junio 2014, 11:28 am »

Mi fallo consiste en pasar por argumento la ip y el puerto. Si lo introduzco desde dentro (como está comentado) funciona...
Aquí el trozo de cliente
Código
  1.  
  2. int main(int argc, char *argv[]) {
  3. int sck, rtn;
  4. // const int PUERTO = 5050;
  5. const int PUERTO = atoi(argv[argc-1]);
  6. cout << argv[1] << ":" << PUERTO << "\n\n";
  7.  
  8. struct sockaddr_in server;
  9. char bufferIn[2000], bufferOut[2000], bufferAux[2000];
  10. //creamos socket
  11. sck = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  12. if (sck == -1) {
  13. cout << "No se puede crear el socket";
  14. }
  15. puts("Socket creado");
  16.  
  17. server.sin_family = PF_INET;
  18. server.sin_port = htons(PUERTO);
  19. server.sin_addr.s_addr = inet_addr(argv[1]);
  20. // server.sin_addr.s_addr = inet_addr("127.0.0.1");
  21.  
  22. //Conectando al servidor
  23. if (connect(sck, (struct sockaddr*) (&server), sizeof(server)) < 0) {
  24. perror("Conexion fallida. error");
  25. return 1;
  26. }

Espero que podais decirme en que tontería estoy metiendo la pata.

Muchas gracias;)


« Última modificación: 21 Junio 2014, 18:03 pm por NikNitro! » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #1 en: 21 Junio 2014, 16:53 pm »

¿Cua es la primera linea de salida del programa? No deberia haber ninguna diferencia mientras tengas *:5050 ...


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #2 en: 21 Junio 2014, 17:11 pm »

Código:
niknitrodeb@debian:~$ ./a.out 127.0.0.1 5050
127.0.0.1:5050

Socket creado
Conexion fallida. error: Connection refused
niknitrodeb@debian:~$ ./a.out "127.0.0.1" 5050
127.0.0.1:5050

Socket creado
Conexion fallida. error: Connection refused
niknitrodeb@debian:~$ ./a.out '127.0.0.1' 5050
127.0.0.1:5050

Socket creado
Conexion fallida. error: Connection refused
niknitrodeb@debian:~$


Ni con comillas simples, ni dobles ni sin ellas. Sin embargo si guardara puertos e ip dentro del main funciona; pero necesito que sea por paso de argumentos.

Saludos;)

PD: aquí tienes un trozo del servidor:

Código
  1. int main(int argc, char *argv[]) {
  2.  
  3. int listen_socket, cliente, rtn;
  4. struct sockaddr_in server, clientinfo;
  5. // const int PUERTO = 5050;
  6. const int PUERTO;
  7. PUERTO = atoi(argv[0]);
  8.  
  9. //SOCKET
  10. listen_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  11. if (listen_socket == -1) {
  12. perror("No se puede crear el socket");
  13. return 1;
  14. }
  15. cout << "Socket creado\n";
  16.  
  17. //preparar la estructura sockaddr_in
  18. server.sin_family = AF_INET;
  19. server.sin_addr.s_addr = INADDR_ANY;
  20. server.sin_port = htons(PUERTO);
  21.  
  22. //BIND
  23. rtn = bind(listen_socket, (struct sockaddr*)&server, sizeof(server));
  24. if (rtn < 0) {
  25. perror("Error en el bind");
  26. return 1;
  27. }
  28. puts("Bind hecho");
  29.  
  30. //LISTEN
  31. rtn = listen(listen_socket, 1); //1 es el maximo de conexiones a la vez
  32. puts("Esperando conexiones entrantes");
  33. /*if (rtn < 0) {
  34. perror("Error en el listen");
  35. return 1;
  36. }*/
  37.  
  38. while (true) {
  39.  
  40. sockaddr client;
  41. socklen_t c = sizeof(client);
  42. //ACCEPT
  43. cliente = accept(listen_socket, &client, &c);
  44. if (cliente < 0) {
  45. perror("Error en el accept");
  46. return 1;
  47. }
  48. cout << "Conexion aceptada en el puerto " << server.sin_port << "\n";
  49. fflush(stdout);
  50.  

El cual abro antes y se queda:
Código:
niknitrodeb@debian:~$ ./server.out 5050
Socket creado
Bind hecho
Esperando conexiones entrantes
__________________________________________________________________________________________________________

EDITO: Le he hecho un cambio en el servidor y no me muestra el puerto bien... El cambio es el siguiente:
Código:
        const int PUERTO = atoi(argv[0]); //Porque me daba error separado (supongo que por modificar una constante)
//Y bajo el listen he cambiado ese put por esto:

puts("Esperando conexiones entrantes en el puerto ");
cout << server.sin_port;

RESULTADO:

Código:
niknitrodeb@debian:~$ ./server.out 5050
Socket creado
Bind hecho
Esperando conexiones entrantes en el puerto


No me muestra el puerto. ¿Será que no lo toma bien de argv?

Salud
« Última modificación: 21 Junio 2014, 17:25 pm por NikNitro! » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #3 en: 21 Junio 2014, 17:45 pm »

niknitrodeb@debian:~$ ./a.out 127.0.0.1 5050
127.0.0.1:5050

¿Como que no funciona ahi?

El primer argumento (argv[0]) suele ser el nombre del programa y solo el segundo el pasado por linea de comandos, asi que el servidor tiene que ser el problema. Primero proba con el valor hardcodeado en el servidor y no en el cliente ... eso deberia funcionar, entonces arregla el servidor.

« Última modificación: 21 Junio 2014, 17:48 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #4 en: 21 Junio 2014, 17:52 pm »

Sabía que era una tontería. Acertaste xD. Metí la pata escribiendo el 0 -.-

Por cierto, una duda... Ahora mismo funciona, antes cuando metía los valores dentro del main también; pero en ambos casos usa un puerto distinto al que le doy. Por ejemplo ahora mismo:
SERVIDOR:
Código:
niknitrodeb@debian:~$ ./server.out 5050
Socket creado
Bind hecho
Esperando conexiones entrantes en el puerto
47635Conexion aceptada en el puerto 47635
Conectado en el puerto 47635. Esperando accion.
RECIBIDO: hola

enviado : hola
Conectado en el puerto 47635. Esperando accion.
RECIBIDO: que


enviado : que

Conectado en el puerto 47635. Esperando accion.

CLIENTE:
Código:
niknitrodeb@debian:~$ ./a.out 127.0.0.1 5050
127.0.0.1:5050

Socket creado
Conectado

Conectado al servidor 127.0.0.1:47635.
Que desea enviar?
hola

Devuelto hola

Conectado al servidor 127.0.0.1:47635

Y si cierro y abro vuelven a usar el mismo. Es por algo en especial? Funcionar funciona xD
Será que el 5050 lo usan para la conexion y luego ese lo usan para transmitir datos?

Saludos y gracias Eternal Idol ;)
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #5 en: 21 Junio 2014, 18:02 pm »

47635 es 5050 en big endian.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #6 en: 21 Junio 2014, 18:03 pm »

Ok, buscaré info. Muchas gracias ;)
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Fallo al pasar por argumento ip y puerto a socket...
« Respuesta #7 en: 21 Junio 2014, 18:07 pm »

Mira htons tambien. De nadas.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fallo de ¿puerto? en metasploit (exploit java)
Hacking
illera88 2 6,052 Último mensaje 2 Diciembre 2010, 06:09 am
por Shell Root
Como pasar una cadena char a hexadecimal por argumento a un constant char?
Programación C/C++
ahaugas 3 5,694 Último mensaje 13 Enero 2013, 14:09 pm
por ahaugas
Pasar el nombre de una subrutina como argumento de una función?
.NET (C#, VB.NET, ASP)
Eleкtro 1 3,485 Último mensaje 19 Abril 2013, 19:45 pm
por Eleкtro
[C#] Pasar un argumento por Uri
.NET (C#, VB.NET, ASP)
DeMoNcRaZy 3 2,923 Último mensaje 13 Septiembre 2015, 14:37 pm
por Eleкtro
Pasar color como argumento en javascript
Desarrollo Web
FerJGS 1 2,316 Último mensaje 15 Febrero 2016, 00:36 am
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines