C/Visual C - Dirección IP

 
Vista:

Dirección IP

Publicado por Ibon (3 intervenciones) el 11/12/2002 15:25:44
¿ Como puedo recuperar la dirección IP del puesto en el que estoy trabajando? ¿ me puede alguien mandar el codigo fuente? ( soy novato en esto del C++)
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

Recuperar la dirección IP local en C++

Publicado por Alejandro (980 intervenciones) el 23/04/2025 17:27:18
Aquí tienes un ejemplo de cómo recuperar la dirección IP de la máquina en la que estás trabajando utilizando C++. Este código utiliza la biblioteca estándar de sockets de C++ para obtener la dirección IP local.

Código en C++



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
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
 
int main() {
    // Crear un socket
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        std::cerr << "Error al crear el socket" << std::endl;
        return 1;
    }
 
    // Configurar la dirección del servidor (cualquier dirección IP)
    struct sockaddr_in servaddr;
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(80); // Puerto 80 (HTTP)
 
 // Conectar el socket a la dirección del servidor
    if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
        std::cerr << "Error al conectar el socket" << std::endl;
        close(sockfd);
        return 1;
    }
 
    // Obtener la dirección IP local
    struct sockaddr_in localaddr;
    socklen_t len = sizeof(localaddr);
    if (getsockname(sockfd, (struct sockaddr*)&localaddr, &len) < 0) {
        std::cerr << "Error al obtener la dirección IP local" << std::endl;
        close(sockfd);
        return 1;
    }
 
    // Convertir la dirección IP a una cadena legible
    char ip[INET_ADDRSTRLEN];
    if (inet_ntop(AF_INET, &localaddr.sin_addr, ip, sizeof(ip)) == nullptr) {
        std::cerr << "Error al convertir la dirección IP" << std::endl;
        close(sockfd);
        return 1;
    }
 
    std::cout << "La dirección IP local es: " << ip << std::endl;
 
    // Cerrar el socket
    close(sockfd);
    return 0;
}

Explicación del código



1. Crear un socket: Se crea un socket utilizando `socket(AF_INET, SOCK_DGRAM, 0)`. Esto permite la comunicación a través de la red.

2. Configurar la dirección del servidor: Se configura una dirección de servidor ficticia (en este caso, se utiliza el puerto 80, que es el puerto HTTP).

3. Conectar el socket: Se conecta el socket a la dirección del servidor. Esto es necesario para poder obtener la dirección IP local.

4. Obtener la dirección IP local: Se utiliza `getsockname` para obtener la dirección IP local asociada con el socket.

5. Convertir la dirección IP: Se convierte la dirección IP a una cadena legible utilizando `inet_ntop`.

6. Mostrar la dirección IP: Finalmente, se imprime la dirección IP local en la consola.

Compilación y ejecución



Para compilar el código, puedes usar un compilador de C++ como `g++`. Por ejemplo:

1
g++ -o get_ip get_ip.cpp

Y para ejecutar el programa:

1
./get_ip

Este código debería funcionar en sistemas Linux. Si estás utilizando Windows, es posible que necesites hacer algunos ajustes en las bibliotecas y funciones de socket. ¡Espero que esto te sea útil, Ibon!
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