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


0
#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;
}
g++ -o get_ip get_ip.cpp
./get_ip