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

 

 


Tema destacado:


  Mostrar Temas
Páginas: 1 2 [3] 4 5 6 7
21  Programación / Programación C/C++ / Problemas con Windows API en C en: 1 Diciembre 2015, 22:43 pm
Hola.
Estaba siguiendo la windows api, concretamente esta guía: https://msdn.microsoft.com/en-us/library/windows/desktop/aa385096(v=vs.85).aspx
pero me da errores de compilación con cualquier compilador, tanto gcc de mingw como el de Dev-C++, que también usa mingw. Me suelta este error:
Código:
undefined reference to `InternetOpen@20`
collect2: Id returned 1 exit status

Con un codigo tan mediocre como este:
Código:
#include<stdio.h>
#include<stdlib.h>
#include<wininet.h>
int main(){
HINTERNET conexion;
conexion=InternetOpen("FTP",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
return 0;
}

Y me pasa mas o menos lo mismo con los sockets.
Cuando utilizo las funciones definidas aquí: https://msdn.microsoft.com/en-us/library/windows/desktop/ms741394(v=vs.85).aspx o incluso las de un tutorial cualquiera sobre sockets en windows, me sigue dando error de compilación.
Utilzo Windows 7, obviamente pirata, (VIVA EL SOFTWARE LIBRE), supongo que lo de estar pirateado no importará, pero bueno. Windows 7 Home Premium.
22  Programación / Programación C/C++ / Duda con la libreria FTP y librerias estaticas en: 28 Noviembre 2015, 15:50 pm
Hola.
Estaba probando http://nbpfaus.net/~pfau/ftplib/ftplib.html y no se si me podríais ayudar a desarrollar algún programa con esta librería.
He estado probando pero no tengo ni idea como funcionan las funciones. He estado mirando el programa qftp que hay aquí http://nbpfaus.net/~pfau/ftplib/ pero al compilarlo y ejecutarlo muestra un error con una librería dinamica llamada libftp.so, así que si el creador no lo ha hecho bien, no sé como voy a hacerlo yo  jeje
23  Programación / Programación C/C++ / ¿Qué ocurre al crear un socket? en: 22 Noviembre 2015, 22:17 pm
Hola.
Hace poco me introduje en el mundo de los sockets en C, y hay una duda que no la consigo resolver.
Cuando creas un socket, se le asigna una variable entera, ya sea porque vas a enviar información o porque vas a recibirla con la funcion accept().
Cuando yo envío con la función send() o write(), ¿como entiende el ordenador que se lo voy a enviar a la dirección 192.168.1.1 si solo le estoy pasando un entero?
¿No es necesaria una estructura?
He leido que al igual que se le asigna el numero 0 a stdin, el 1 a stdout y el 2 a stderr, se le asignará de 3 en adelante a los sockets.
Pero ¿cómo entiende el ordenador que lo quiero enviar a X dirección IP pasándole solo el entero?
Gracias
24  Programación / Programación C/C++ / ¿Cómo funciona select() en c? en: 22 Noviembre 2015, 18:30 pm
Hola.
Estoy utilizando la función select() para hacer un servidor de chat pero, no sé que problemas tengo jeje. Espero vuestra ayuda.
Ignorad que el código no esté dividido en funciones.
No quiero que me terminéis el programa, solo quiero que me digais, qué problemas tiene. Compilar compila, pero cuando se conectan dos hosts, el segundo no envía mensajes, o cuando se conecta éste, no sucede lo que debe suceder.
Gracias.
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<netinet/in.h>
  7. #include<netdb.h>
  8. #include<fcntl.h>
  9. #include<arpa/inet.h>
  10. #define PUERTO 3317
  11. //PROBLEMA:
  12. //Cuando se va un host deja un espacio libre que hay que rellenar
  13. void usage(char *arg){
  14. printf("%s <puerto>\n",arg);
  15. }
  16. int main(int argc, char **argv){
  17. pid_t id;
  18. fd_set desc;
  19. int c,l,j;
  20. int host=0;
  21. int clilong;
  22. int socket_servidor;
  23. int socket_cliente[25];
  24. char *buffer=calloc(220,sizeof(char));
  25. struct sockaddr_in servidor;
  26. struct sockaddr_in cliente[25];
  27. socket_servidor=socket(AF_INET,SOCK_STREAM,0);
  28. servidor.sin_family = AF_INET;
  29. if(argc>1){
  30. int port=atoi(argv[1]);
  31. servidor.sin_port = htons(port);
  32. }
  33. else
  34. servidor.sin_port = htons(PUERTO);
  35. servidor.sin_addr.s_addr = INADDR_ANY;
  36. if(bind(socket_servidor,(struct sockaddr *)&servidor,sizeof(servidor))<0){
  37. printf("El puerto %d está en uso\n",PUERTO);
  38. usage(argv[0]);
  39. close(socket_servidor);
  40. return 1;
  41. }
  42. listen(socket_servidor,25);
  43. printf("Escuchando por el puerto %d\n",ntohs(servidor.sin_port));
  44. clilong=sizeof(cliente[host]);
  45. socket_cliente[host]=accept(socket_servidor,(struct sockaddr *)&cliente[host],&clilong);
  46. if(socket_cliente[host]<0){
  47. printf("Error aceptando el trafico con el host %s\n",
  48. inet_ntoa(cliente[host].sin_addr));
  49. close(socket_cliente[host]);
  50. close(socket_servidor);
  51. return 1;
  52. }
  53. else
  54. printf("Conectado con el host %s\n",inet_ntoa(cliente[host].sin_addr));
  55. host++;
  56. FD_ZERO(&desc);
  57. FD_SET(socket_servidor,&desc);
  58. for(c=0;c<host;c++)
  59. FD_SET(socket_cliente[c],&desc);
  60. while(1){
  61. if(select(host+4,&desc,NULL,NULL,NULL)<0){
  62. printf("Error\n");
  63. close(socket_cliente[host]);
  64. close(socket_servidor);
  65. return 1;
  66. }
  67. for(c=0;c<host;c++){
  68. printf("C: %d\n",c);
  69. if(FD_ISSET(socket_servidor,&desc)){
  70.                                clilong=sizeof(cliente[host]);
  71.                                socket_cliente[host]=accept(socket_servidor,
  72.                                                        (struct sockaddr *)&cliente[host],&clilong);
  73.                                if(socket_cliente[host]>0){
  74.                                        printf("Se ha conectado el host %s\n",
  75.                                                                inet_ntoa(cliente[host].sin_addr));
  76.                                        host++;
  77.                                        printf("Hosts %d\n",host);
  78.                                }
  79.                                else
  80.                                        printf("Error al conectarse nuevo host\n");
  81. }
  82.                        if(FD_ISSET(socket_cliente[c],&desc)){
  83. printf("Esperando algo\n");
  84. j=recv(socket_cliente[c],buffer,220,0);
  85. if(j>0){
  86. printf("\n%s\n",buffer);
  87. for(l=0;l<=host;l++)
  88. send(l,buffer,220,0);
  89. }
  90. if(j==0){
  91. printf("El host %s se ha desconectado\n",
  92. inet_ntoa(cliente[c].sin_addr));
  93. close(socket_cliente[c]);
  94. host--;
  95. printf("Hosts: %d\n",host);
  96. }
  97. }
  98. }
  99. }
  100. free(buffer);
  101. return 0;
  102. }
  103.  
25  Programación / Programación C/C++ / Convertir de void a int en: 16 Noviembre 2015, 21:14 pm
Hola.
Estoy probando eso de los threads en Linux con la programación en C para hacer un servidor de mensajes multicliente. El problema con el que me topo es:
1. La función para pasar el thread solo me permite pasar el argumento como void *.
2. La función no me permite pasar más de un argumento.
¿Me podríais ayudar?
He estado probando con la conversión clasica tal que así:
Código
  1. #include<stdint.h>
  2. ...
  3. void funcion(void *numero){
  4.      int a=(intptr_t)numero;
  5. ...
  6.  
Al imprimirlo dentro de 'función' me devulve un valor aleatorio.
Gracias de antemano.
26  Programación / Programación C/C++ / Abrir multiples conexiones Sockets C en: 9 Noviembre 2015, 12:32 pm
Hola.
Estoy introduciéndome en el mundo de los sockets en Linux y haciendo tanto cliente como servidor quise iniciar mi primer chat. Hasta ahí bien, pero ahora lo que quiero es que el servidor del chat pueda soportar varias conexiones (que hacerlo, lo hace) pero que lea también de éstas. Es decir, este "chat" solo funciona por turnos jeje. Escribo mi código:
Servidor:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<unistd.h>
  5. #include<sys/types.h>
  6. #include<sys/socket.h>
  7. #include<netinet/in.h>
  8. #include<netdb.h>
  9. int main(int argc, char **argv){
  10. if(argc<2){
  11. printf("%s <puerto>\n",argv[0]);
  12. return 1;
  13. }
  14. int con_ser,con_cli,puerto;
  15. int I;
  16. socklen_t clilen;
  17. char *buffer;
  18. struct sockaddr_in cliente;
  19. struct sockaddr_in servidor;
  20. con_ser=socket(AF_INET,SOCK_STREAM,0);
  21. if(con_ser<0){
  22. printf("Error creando el socket\n");
  23. close(con_ser);
  24. return 1;
  25. }
  26. bzero((char *)&servidor,sizeof(servidor));
  27. puerto=atoi(argv[1]);
  28. servidor.sin_family = AF_INET;
  29. servidor.sin_port = htons(puerto);
  30. servidor.sin_addr.s_addr = INADDR_ANY;
  31. I=bind(con_ser,(struct sockaddr *)&servidor,sizeof(servidor));
  32. if(I<0){
  33. printf("Error al asignar el puerto\n");
  34. close(con_ser);
  35. return 1;
  36. }
  37. listen(con_ser,3);
  38. clilen = sizeof(cliente);
  39. con_cli=accept(con_ser,(struct sockaddr *)&cliente,&clilen);
  40. if(con_cli<0){
  41. printf("Error en la transaccion\n");
  42. close(con_ser);
  43. return 1;
  44. }
  45. buffer=calloc(220,sizeof(char));
  46. do{
  47. I=read(con_cli,buffer,220);
  48. if(I<0){
  49. printf("Error recibiendo información\n");
  50. close(con_ser);
  51. return 1;
  52. }
  53. if(strcmp(buffer,"101001001")!=0)
  54. printf("%s",buffer);
  55. else{
  56. printf("EOF\n");
  57. break;
  58. }
  59. free(buffer);
  60. buffer=calloc(220,sizeof(char));
  61. printf("%s: ",getlogin());
  62. fgets(buffer,220,stdin);
  63. I=write(con_cli,buffer,220);
  64. if(I<0){
  65.                        printf("Error enviando información\n");
  66.                        close(con_ser);
  67.                        return 1;
  68.                }
  69. }while(1);
  70. return 0;
  71. }
  72.  

Cliente:
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<unistd.h>
  5. #include<sys/types.h>
  6. #include<sys/socket.h>
  7. #include<netinet/in.h>
  8. #include<netdb.h>
  9. #define RED     "\x1b[31m"
  10. #define GREEN   "\x1b[32m"
  11. #define YELLOW  "\x1b[33m"
  12. #define BLUE    "\x1b[34m"
  13. #define MAGENTA "\x1b[35m"
  14. #define CYAN    "\x1b[36m"
  15. #define RESET   "\x1b[0m"
  16. int cmp(char *s1, char *s2, char *s3){
  17. int ret = 0;
  18. strcat(s3,": ");
  19. strcat(s3,s2);
  20. while(!(ret=*(unsigned char *)s1 - *(unsigned char *)s3) && *s3)
  21. ++s1, ++s3;
  22. if(ret<0)
  23. ret=-1;
  24. if(ret > 0)
  25. ret=1;
  26. return ret;
  27. }
  28. int main(int argc, char **argv){
  29. if(argc<3){
  30. printf(YELLOW"%s <host> <puerto>\n"RESET,argv[0]);
  31. return 1;
  32. }
  33. int conexion,puerto,i;
  34. char *frase;
  35. char *buffer;
  36. struct hostent *server;
  37. struct sockaddr_in cliente;
  38. server=gethostbyname(argv[1]);
  39. if(server==NULL){
  40. printf(RED"Host erróneo, introduce el host\n"RESET);
  41. return 1;
  42. }
  43. conexion=socket(AF_INET,SOCK_STREAM,0);
  44. puerto=atoi(argv[2]);
  45. cliente.sin_family = AF_INET;
  46. cliente.sin_port = htons(puerto);
  47. bcopy((char *)server->h_addr,(char *)&cliente.sin_addr.s_addr,sizeof(server->h_length));
  48. i=connect(conexion,(struct sockaddr *)&cliente,sizeof(cliente));
  49. if(i<0){
  50. printf("Error conectando con el host\n");
  51. close(conexion);
  52. return 1;
  53. }
  54. printf(YELLOW"Escribe "RED"\"EOF\""RESET" para salir\n"RESET);
  55. do{
  56. buffer=calloc(220,sizeof(char));
  57. if(buffer==NULL){
  58. printf("No se ha podido reservar memoria\n");
  59. close(conexion);
  60. return 1;
  61. }
  62. frase=calloc(200,sizeof(char));
  63. if(frase==NULL){
  64. printf("No se ha podido reservar memoria\n");
  65.                        close(conexion);
  66.                        return 1;
  67.                }
  68. printf(YELLOW"%s: "RESET,getlogin());
  69. fgets(frase,200,stdin);
  70. strcat(buffer,getlogin());
  71. strcat(buffer,": ");
  72. strcat(buffer,frase);
  73. if(cmp(buffer,"EOF\n",getlogin())==0){
  74. write(conexion,"101001001",10);
  75. break;
  76. }
  77. i=write(conexion,buffer,220);
  78. if(i<0){
  79. printf(RED"Error al enviar los datos\n"RESET);
  80. break;
  81. }
  82. free(frase);
  83. i=read(conexion,buffer,220);
  84. if(i<0){
  85.                        printf(RED"Error al recibir los datos\n"RESET);
  86.                        break;
  87.                }
  88. printf("%s",buffer);
  89. }while(1);
  90. close(conexion);
  91. free(buffer);
  92. return 0;
  93. }
  94.  

Se agradece de antemano
27  Programación / Programación C/C++ / Eliminar una linea concreta de un fichero en: 7 Noviembre 2015, 23:10 pm
Hola buenas, no sé como podría borrar una línea entera de un fichero.
Para hacer esto he leido el fichero entero guardando cada línea en un vector de dos dimensiones, saltandome la línea que quería eliminar, y posteriormente eliminando el fichero para crear otro. Pero busco algo más eficiente, para poder hacerlo en ficheros grandes y tal. ¿Como podría eliminar una fila concreta?
28  Seguridad Informática / Hacking / Puertas traseras con interactividad bash en: 27 Octubre 2015, 18:05 pm
Hola. Últimamente me ha dado por probar programas que creen puertas traseras como Pupy, que lo recomiendo bastante, para Linux.
Pero, por ejemplo, a la hora de ejecutar un comando como sudo o ssh no me aparece para escribir la contraseña. He creado una backdoor con metasploit y tal, pero no funciona tampoco el ssh ni sudo.
Lo primero que hago al ejecutarse la shell es ejecutar bash, y después intento ejecutar sftp o ssh o sudo, y como bien he dicho antes, nada.
No se si podríais recomendarme algún programa para crear puertas traseras que me permitan ejecutar estos comandos, ya que en mi casa las uso mucho para entrar directamente a mi servidor desde el movil sin tener que escribir autenticaciones ni nah.
Lo busco para Linux, gracias.
29  Programación / Programación C/C++ / Problema lectura de datos por fichero en: 7 Octubre 2015, 00:29 am
Cuando leo con la funcion fread de un fichero binario, y lo imprimo por pantalla se me imprime el último numero dos veces. No es la primera vez que me pasa, y no sé por qué sucede.
¿Me podeis echar una mano?
30  Programación / Programación C/C++ / Validar la entrada de datos C en: 6 Octubre 2015, 20:14 pm
Código:
...
scanf("%d",&a);
if(isdigit(y)==0){
    printf("...");
}
else
    printf("Introduce un numero\n");
...
return 0;
Si yo escribo un caracter cuando llego al scanf se crashea y no sigue funcionando, no se imprime el else. ¿Cómo compruebo la entrada de datos?
Páginas: 1 2 [3] 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines