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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 47
31  Programación / Programación C/C++ / Re: Hacer Ping en codigo C y que cree un txt con los resultados de cada IP en: 18 Noviembre 2020, 15:38 pm
Buenos días,

Lo primero de todo, darte las gracias por tu ayuda, por más que busco y pruebo no soy capaz de dar con lo que se me pide..
He probado a añadir en el código lo que me indicas y me da error en la línea 9, está claro que es porque estoy haciendo algo mal, pero no consigo ver que es lo que está sin inicializar como me indica el programa.

Primero que todo, como te ha comentado Alberto, depender de llamadas al sistema (system) no es recomendable por varios motivos, uno de ellos es por la poca portabilidad que te brinda. La solucion mas "limpia" es implementar la peticion ICMP por ti misma, de esta forma te evitas dependencias y el codigo es mas portable. Sin embargo, implementar tu propia funcion ping no es una tarea trivial. Necesitas trabajar con raw sockets, DNS lookups y hacer toda la manipulacion del paquete ICMP por ti misma. Estamos hablando que necesitas tener conocimientos avanzados de sockets y nociones basicas de networking y/o del paquete ICMP, ademas de un conocimiento avanzado de C para poder implemetarlo todo. Una posible implementacion la puedes ver aqui:

https://www.geeksforgeeks.org/ping-in-c/amp/

En este caso, y dado tu nivel de C en estos momentos, yo diria que todo esto va muy por encima de ti. Si es algo que quieres aprender puedes empezar con todo lo que he comentado antes y crearte una version mejorada mas adelante, pero si por ahora necesitas el trabajo hecho, la opcion mas viable es depender de la utilidad del sistema, al menos es mi opinion.
En este caso si decides continuar usando la utilidad "ping", te vuelvo a comentar que lo mejor es el uso de la funcion "popen()" (pipes) en lugar de "system()" para manipular el resultado de la ejecucion del "ping" evitando el uso de ficheros

Referente a tu codigo, el uso de:

Código
  1. while (!feof(f))
  2.    printf("%c", getc(f));

y

Código
  1. while (fgets(ip, MAX_IP_LEN, f))

deberian ser excluyentes, no debes usar ambos en este caso. Una posible variante a lo que tienes, usando popen() podria ser lo siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX_IP_LEN 40
  4. #define MAX_COMMAND_LEN 100
  5. #define MAX_LINE_LEN 255
  6. #define println() printf("\n")
  7.  
  8. void leerArchivo(const char *archivo);
  9. void arrancarPing(const char *ip);
  10.  
  11. int main(void)
  12. {
  13.    char opcion;
  14.    char archivo[MAX_LINE_LEN];
  15.  
  16.    printf("Seleccione la opción que desea realizar: \n\n"
  17.        "a. Una función que lea el contenido de un archivo .txt con diferentes direcciones ip, en la que la ruta del archivo se solicitará al usuario por pantalla. La ruta y nombre del archivo tienen que ser preguntados al usuario y visualizados por pantalla. Por último, el programa debe lanzar un ping para cada una de las direcciones ip del archivo e informar cuales de ellas responden correctamente a este comando."
  18.        "b. Sin desarrollar.\n\n"
  19.        "c. Sin desarrollar.\n\n"
  20.        "d. Salir del programa. \n\n");
  21.    scanf("%c", &opcion);
  22.  
  23.    while (opcion != 'a' && opcion != 'A' && opcion != 'b' && opcion != 'B' && opcion != 'c' && opcion != 'C' && opcion != 'd' && opcion != 'D')
  24.    {
  25.        printf("Opción incorrecta, eliga una de las opciones disponibles. (a,b,c o d).\n");
  26.        fflush(stdin);
  27.        scanf("%c", &opcion);
  28.    }
  29.  
  30.    switch (opcion)
  31.    {
  32.        case 'a':
  33.        case 'A':
  34.            printf("\n Introduce la ruta del archivo a leer: \n");
  35.            println();
  36.            scanf("%s", archivo);
  37.            println();
  38.            leerArchivo(archivo);
  39.            break;
  40.        case 'b':
  41.        case 'B':
  42.            printf("Prueba de funcionamiento opcion B\n");
  43.            break;
  44.        case 'c':
  45.        case 'C':
  46.            printf("Prueba de funcionamiento opcion C\n");
  47.            break;
  48.        case 'd':
  49.        case 'D':
  50.            break;
  51.    }
  52.  
  53.    return 0;
  54. }
  55.  
  56. void leerArchivo(const char *archivo)
  57. {
  58.    FILE * f;
  59.    char ip[MAX_IP_LEN] = { 0 };
  60.  
  61.    f = fopen(archivo, "rt");
  62.    if (f == NULL)
  63.    {
  64.        printf("Problemas de apertura del archivo\n");
  65.    }
  66.    else
  67.    {
  68.        while (fgets(ip, MAX_IP_LEN, f))
  69.        {
  70.            arrancarPing(ip);
  71.        }
  72.  
  73.        fclose(f);
  74.    }
  75. }
  76.  
  77. void arrancarPing(const char *ip)
  78. {
  79.    char line[MAX_LINE_LEN] = { 0 };
  80.    char command[MAX_COMMAND_LEN] = { 0 };
  81.    FILE * fp;
  82.  
  83.    snprintf(command, MAX_COMMAND_LEN, "ping %s", ip);
  84.    fp = popen(command, "r");
  85.    if (fp == NULL)
  86.    {
  87.        /*Handle error */
  88.        return;
  89.    }
  90.  
  91.    while (fgets(line, MAX_LINE_LEN, fp) != NULL)
  92.    {
  93.        /*Execution output */
  94.        /*Verifica aqui la respuesta del host */
  95.        printf("%s", line);
  96.    }
  97.  
  98.    pclose(fp);
  99. }
32  Programación / Programación C/C++ / Re: Hacer Ping en codigo C y que cree un txt con los resultados de cada IP en: 17 Noviembre 2020, 20:59 pm
Tu funcion "arrancarPing" podria ser algo como:

Código
  1. void arrancarPing(const char* ip)
  2. {
  3.    char command[255] = {0};
  4.  
  5.    sprintf(command, "ping %s > ping2.txt", ip);
  6.    system(command);
  7. }

y la usarias justo despues de leer una linea (suponiendo que cada ip este contenida en una linea por separado) del fichero

Código
  1. const int MAX_IP_LEN = 40;
  2. char ip[MAX_IP_LEN] = {0}
  3. while (fgets(ip, MAX_IP_LEN, f))
  4. {
  5.    arrancarPing(ip);
  6. }
33  Programación / Programación General / Re: ayuda con programa en: 17 Noviembre 2020, 18:55 pm
Para windows puedes usar las APIs
- Obtener la ventana activa
  GetForegroundWindow (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow)
- Obtener el texto o titulo de la ventana
  GetWindowText (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowtexta)
- Obtener el id del proceso dueño de la ventana
  GetWindowThreadProcessId (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowthreadprocessid)
- Obtener el nombre del proceso
  OpenProcess (https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess)
  GetModuleBaseName/GetProcessImageFileName/QueryFullProcessImageName
 
Saludos
34  Programación / Programación C/C++ / Re: Hacer Ping en codigo C y que cree un txt con los resultados de cada IP en: 17 Noviembre 2020, 18:40 pm
Si quieres procesar cada IP en el fichero puedes hacerlo de dos formas:
1- Como lo estas haciendo, leyendo el contenido del fichero en una funcion antes de procesar cada IP
2- Leer cada entrada en el fichero y posteriormente procesarla en la misma funcion

El tema con la primera es que vas a necesitar almacenar el contenido del fichero en memoria (estatica o dinamica) si quieres mas adelante (otra funcion) procesar cada IP. Con la segunda opcion no necesitas guardar el contenido en memoria ya que lo lees y al momento lo procesas antes de leer la siguiente entrada

Por otra parte, para poder acceder a la salida o resultado del comando que estas ejecutando puedes usar "pipes", en este caso la funcion "popen()" en lugar de "system()", la cual te crea automaticamente una via de comunicacion con la aplicacion ejecutada y te ofrece un stream para que puedas leer su salida o resultado. Luego ya es solo comprobar que el resultado sea el esperado.

Saludos
35  Informática / Hardware / Re: Problema montaje pc sobremesa en: 29 Octubre 2020, 13:34 pm
El AMD Ryzen 5 2600X no tiene graficos integrados, a no ser que tengas una GPU dedicada no vas a tener salida de video en tu vida
36  Programación / Scripting / Re: Cambiar colores en batch. en: 26 Octubre 2020, 17:24 pm
Necesitas usar secuencias de escape ANSI (Windows 10)

https://pastebin.com/F1E6gDcU

Mas informacion:
https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line
https://stackoverflow.com/questions/12572718/how-to-change-text-color-of-cmd-with-windows-batch-script-every-1-second
https://superuser.com/questions/749561/batch-file-change-color-of-specific-part-of-text

Saludos
37  Programación / Ingeniería Inversa / Re: Distinguir entre DATOS E INSTRUCCIONES? en: 22 Octubre 2020, 21:57 pm
Para comprender esto debes tener una idea del formato PE. Este formato establece que por regla general un .exe (PE) esta conformado por muchas estructuras, algunas de estas son las denominadas "sections". Un ejecutable contiene varias secciones, cada sección con sus atributos y su contenido especifico (datos, codigo, recursos, etc). Se supone que la sección "code" es la sección que contiene codigo ejecutable o instrucciones, aunque puedes tener otras secciones fuera de la sección "code" que tambien contengan codigo ejecutable. La primera instruccion que se ejecuta esta alojada en el campo AddressOfEntryPoint de la estructura _IMAGE_OPTIONAL_HEADER. Este valor indica la primera instruccion del codigo que se ejecuta una vez el loader de windows ha cargado el binario en memoria.

En esta imagen tienes muchos mas detalles al respecto

38  Programación / .NET (C#, VB.NET, ASP) / Re: mensajes box ersonalizados en: 12 Octubre 2020, 17:08 pm
https://www.codeproject.com/Tips/1081930/Custom-Message-Box-in-WPF-XAML
https://github.com/evanwon/WPFCustomMessageBox
39  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Está muriendo el foro? en: 2 Octubre 2020, 06:03 am
Añadiendo un poco a todo lo que se ha dicho anteriormente y en lo que indiscutiblemente se tiene mucha razon. En mi opinion el declive del foro tambien viene dado por los cambios generacionales. La comunidad de antaño era de mentes muy inquietas y la mayoria se gastaba el tiempo libre aprendiendo a programar o desarrollando nuevas tecnicas para vulnerar sistemas, desarrollando aplicaciones propias, etc. Personas que en lugar de perder horas usando tiktok se las hubiera perdido intentando vulnerarla xD. Fue la epoca del "boom" del conocimiento, y no solo en este foro pero en muchisimos otros, en la internet en general, la epoca pre-social media (fb, ig, yt, etc). Lamentablemente todo esto ha cambiado, aquellas generaciones han madurado, han hecho su familia y han incorporado muchas otras responsabilidades a sus vidas y las prioridades ya son otras, por lo que muchos deciden alejarse de este mundo. Por otra parte las nuevas generaciones que llegan, al menos a este foro, el mayor porciento de ellos son simplemente niños pidiendo que les hagan tareas, que les hackeen el face de la novia o que les crackeen un software comercial, asi de simple. A casi nadie le interesa aprender de verdad, solo pasan buscando resolver su problema y nunca mas los vuelves a ver. Al final los buenos, los antiguos, poco a poco se van retirando por ley de la vida y no existe una generacion nueva dispuesta a tomar la antorcha. Por muchos eventos o actividades que se realicen (y no que sean malos o fallidos en si dichas ideas), sin el interes y el respaldo de una comunidad detras, son simplemente eventos vacios.
Saludos
40  Programación / Programación General / Re: Herramienta cobertura de codigo Visual Studio Code en: 27 Septiembre 2020, 04:40 am
Esto te puede servir

https://github.com/ryanluker/vscode-coverage-gutters
https://github.com/markis/vscode-code-coverage
https://github.com/pilat/vscode-coverage-highlighter
https://github.com/rpeshkov/vscode-testcov
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 47
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines