C/Visual C - Programa c++

 
Vista:

Programa c++

Publicado por wesley (1 intervención) el 29/04/2003 02:54:23
Mecesito un programa de identifique cuantas maquinas estan enlazadas en red y cual es el nombre de cada una de ella.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa c++

Publicado por Alejandro (1153 intervenciones) el 19/05/2025 22:28:47
Para identificar cuántas máquinas están enlazadas en una red y obtener el nombre de cada una de ellas, puedes utilizar un programa en C++. A continuación, te presento un enfoque general que puedes seguir, junto con un ejemplo de código.

Enfoque general



1. Obtener la dirección IP de la máquina local: Utiliza funciones de la biblioteca de sockets para obtener la dirección IP de tu máquina.
2. Escanear la red: Realiza un escaneo de la red local para identificar las direcciones IP activas.
3. Resolver nombres de host: Para cada dirección IP activa, utiliza funciones para resolver el nombre de host correspondiente.

Ejemplo de código en C++



Aquí tienes un ejemplo básico que ilustra cómo podrías implementar esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <arpa/inet.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <unistd.h>
 
void getLocalIP(std::string &localIP) {
    struct ifaddrs *interfaces = nullptr;
    getifaddrs(&interfaces);
 
    for (struct ifaddrs *iface = interfaces; iface != nullptr; iface = iface->ifa_next) {
        if (iface->ifa_addr->sa_family == AF_INET) {
            char ip[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, &((struct sockaddr_in *)iface->ifa_addr)->sin_addr, ip, sizeof(ip));
            localIP = ip;
            break; // Solo necesitamos una dirección IP
        }
    }
    freeifaddrs(interfaces);
}
 
std::string getHostName(const std::string &ip) {
    struct sockaddr_in sa;
    sa.sin_family = AF_INET;
    inet_pton(AF_INET, ip.c_str(), &sa.sin_addr);
 
    char host[1024];
    char service[20];
 
    if (getnameinfo((struct sockaddr *)&sa, sizeof(sa), host, sizeof(host), service, sizeof(service), 0) == 0) {
        return std::string(host);
    }
    return "Unknown";
}
 
int main() {
    std::string localIP;
    getLocalIP(localIP);
    std::cout << "Dirección IP local: " << localIP << std::endl;
 
    // Aquí puedes agregar un escaneo de la red para encontrar otras IPs
    // Por simplicidad, solo se muestra cómo obtener el nombre de host de la IP local
    std::string hostName = getHostName(localIP);
    std::cout << "Nombre de host: " << hostName << std::endl;
 
    // Implementa un escaneo de red para encontrar otras máquinas y sus nombres
    // Esto puede implicar enviar pings a un rango de direcciones IP y resolver sus nombres
 
    return 0;
}

Notas



- Este código solo obtiene la dirección IP local y su nombre de host. Para escanear la red, necesitarías implementar un método para enviar pings a un rango de direcciones IP y luego resolver los nombres de host de las IPs activas.
- Puedes utilizar bibliotecas adicionales o herramientas de red para facilitar el escaneo de la red.
- Asegúrate de tener los permisos necesarios para realizar escaneos en la red, ya que esto puede ser considerado intrusivo en algunas configuraciones de red.

Recursos adicionales



- Para más detalles sobre cómo obtener la dirección IP y el nombre de host, puedes consultar los siguientes enlaces:
- Obtener el nombre de la interfaz de red desde una dirección IPv4: https://stackoverflow.com/questions/17288908/get-network-interface-name-from-ipv4-address
- Programa en C para mostrar el nombre de host y la dirección IP: https://www.geeksforgeeks.org/c-program-display-hostname-ip-address/

Espero que esto te ayude a desarrollar tu programa. ¡Buena suerte, Wesley!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar