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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23
101  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
102  Seguridad Informática / Hacking / Re: Sniffear red local con wireshark en xubuntu en: 23 Noviembre 2015, 17:43 pm
Activé el modo monitor y ejecuté wireshark, pero no me muestra dirección IP si no nombres, el del router y dispositivos, pero me limita algunas cosas
Me muestra un Nokia en protocolo LLC, que puedo hacer para ver las páginas visualizadas y obtener los POST de algún logueo en una web (por HTTP) y obtener user and password
Eso es porque no la tienes que poner en modo monitor, sino en modo promiscuo. El modo monitor solo sirve para recibir paquetes que vuelan por el aire. Parece un poema, pero es así. Y el modo promiscuo es para que tu ordenador no ignore los paquetes que le llegan y no pertenezcan a su dirección MAC, sino que los lea todos. Wireshark configura tu tarjeta de red por defecto en modo promiscuo. Si no te deja puede ser por distintios motivos:
-Tú tarjeta de red no soporta el modo promiscuo (raro es)
-Wireshark no la pone en modo promiscuo.
En el segundo caso, bastan con escribir un 1 en el fichero /proc/sys/net/ipv4/ip_forward. Para ello ejecuta :
Código:
echo '1' > /proc/sys/net/ipv4/ip_forward
Y para quitar el modo promiscuo, un 0
Código:
echo '0' > /proc/sys/net/ipv4/ip_forward
103  Programación / Programación C/C++ / Re: ¿Qué ocurre al crear un socket? en: 23 Noviembre 2015, 16:48 pm
a ver, cuando tienes un socket haces una conexión a esa conexión se le asigna un número pero antes has de decirle a donde te quieres conectar, es decir, indicar la dirección del servidor.

Ten encuentra que para servidores no es necesario porque ellos están escuchan y aceptan clientes mientras que los clientes si tienes que conocer previamente la dirección del servidor.

te recomiendo que te mires la capa de protocolos TCP/IP para que lo entiendas mejor.
Si eso ya lo sé, pero lo que quiero saber es cómo entiende el ordenador que el numero entero que contiene la variable del socket es X dirección IP, y no un numero aleatorio.
¿Es relevante la estructura o puede ser eliminada despues de haber aceptado la conexion?
104  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
105  Programación / Programación C/C++ / Re: ¿Cómo funciona select() en c? en: 22 Noviembre 2015, 22:11 pm
Hola,

Te comento un poco a grandes rasgos lo que he visto:

tienes esta parte repetida encima del while y dentro:

Código
  1. socket_cliente[host]=accept(socket_servidor,(struct sockaddr *)&cliente[host],&clilong);
  2. if(socket_cliente[host]<0){
  3. printf("Error aceptando el trafico con el host %s\n",
  4. inet_ntoa(cliente[host].sin_addr));
  5. close(socket_cliente[host]);
  6. close(socket_servidor);
  7. return 1;
  8. }
  9. else
  10. printf("Conectado con el host %s\n",inet_ntoa(cliente[host].sin_addr));
  11. host++;
  12. FD_ZERO(&desc);
  13. FD_SET(socket_servidor,&desc);
  14. for(c=0;c<host;c++)
  15. FD_SET(socket_cliente[c],&desc);
  16.  

lo primero que yo te aconsejaría es que si escribes un if{} el else que también tengo las llaves {} así evitaras confusiones.

la segunda cosa que veo rara es que solo incrementas el número de host cuando aceptas la primera conexión, es decir, dentro del while aceptas pero no incrementas el contador de host o yo no he visto donde esta el host++; como en el fragmento de arriba.

Si yo fuese tu interaria aceptar las conexiones dentro del while te simplificará mucho la tarea.

espero haberte ayudado. :silbar:
-Al principio la función la utilizo para que se conecte el primer cliente.
-Sí que incremento hosts:
Código
  1. if(FD_ISSET(socket_servidor,&desc)){
  2.                                clilong=sizeof(cliente[host]);
  3.                                socket_cliente[host]=accept(socket_servidor,
  4.                                                        (struct sockaddr *)&cliente[host],&clilong);
  5.                                if(socket_cliente[host]>0){
  6.                                        printf("Se ha conectado el host %s\n",
  7.                                                                inet_ntoa(cliente[host].sin_addr));
  8.                                        host++;
  9.                                        printf("Hosts %d\n",host);
  10.                                }
  11.                                else
  12.                                        printf("Error al conectarse nuevo host\n");
  13. }
  14.  
Código
  1.                                        host++;
  2.                                        printf("Hosts %d\n",host);
  3.  
Y bueno, sí que podré la funcion de aceptar solo en el while
106  Programación / Programación C/C++ / Re: Convertir de void a int en: 22 Noviembre 2015, 20:07 pm
numero es un puntero, y tu quieres coger el contenido al que apunta numero, no el contenido de numero (la dirección), entonces debes cambiar esa línea por algo tipo
Código:
int a = *(intptr_t*)numero;
 si luego lo imprimes por ejemplo usando printf veras que es el valor correcto, por ejemplo el sigiente código imprimirá 123

Código
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. void funcion(void *numero) {
  5.  int a = *(intptr_t*)numero;
  6.  printf("%d", a);
  7. }
  8.  
  9. int main() {
  10.  int n = 123;
  11.  funcion((void*)&n);
  12.  
  13. }
  14.  

Como decia MAFUs, vamos...
Vale, solucionado, gracias
107  Programación / Programación C/C++ / Re: ¿Cómo funciona select() en c? en: 22 Noviembre 2015, 18:45 pm
Si no sabes qué problemas tienes, ¿cómo sabes que tienes problemas?

Di qué error tienes, qué no ocurre correctamente, o qué no sabes implementar.
Vale.
Principalmente, cuando ejecuto el programa y conecto un cliente, bien, el cliente envia paquetes y el servidor recibe e imprime. Pero cuando conecto un segundo cliente:
1-No me sale que se haya conectado.
2-No incrementa la variable host
3-No envía nada al servidor. (Enviar envía, pero el servidor no lo imprime)
Y si conecto los dos clientes a la vez despues de haber iniciado el servidor, es decir, conecto uno, sin enviar nada, y luego otro, se queda esperando una segunda conexión, y no recibe ni envía.

Es decir, que es o un if u otro. No quiero usar ni threads ni forks, he probado con sockets no bloqueantes, pero no son la solución.
Gracias
108  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.  
109  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.
110  Programación / Programación C/C++ / Re: Abrir multiples conexiones Sockets C en: 11 Noviembre 2015, 17:49 pm
Consume CPU, no memoria, si no le pones sleep en algunos bucles.

Evidentemente los bucles de algoritmos no se pueden moderar con sleeps, por cuestiones de eficiencia. Pero en este caso, si lo que se hace es esperar mensajes, no importa 10 ms de retardo en leer, y a cambio, logrará sacarle un montón de peso a la CPU.

Con esto quiero decir: pon sleeps si es necesario, no hacen mal.
Cierto, fallo mio la mala asignación del termino. Pero, ¿hay manera alguna para hacer que no consuma mucha CPU, sin necesidad de sleeps? Por ejemplo programas como dd en linux que están continuamente copiando datos de una lado a otro, no consumen mucho. ¿Cómo hacen esto? Me he descargado el codigo, pero xd no tengo mucha idea, he visto que utiliizan punteros y ya.
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines