温馨提示×

linux c++如何获取本机ip地址

小亿
82
2024-12-31 06:44:13
栏目: 编程语言

在 Linux 系统中,您可以使用 C++ 编写一个简单的程序来获取本地 IP 地址

#include <iostream>
#include <string>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

std::string get_local_ip() {
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        std::cerr << "Error creating socket" << std::endl;
        return "";
    }

    struct sockaddr_in server_addr;
    std::memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(0);

    if (getsockname(sockfd, (struct sockaddr*)&server_addr, &server_addr.sin_len) < 0) {
        std::cerr << "Error getting socket name" << std::endl;
        close(sockfd);
        return "";
    }

    close(sockfd);

    char ip[INET_ADDRSTRLEN];
    inet_ntop(AF_INET, &(server_addr.sin_addr), ip, INET_ADDRSTRLEN);

    return std::string(ip);
}

int main() {
    std::string local_ip = get_local_ip();
    if (!local_ip.empty()) {
        std::cout << "Local IP address: " << local_ip << std::endl;
    } else {
        std::cerr << "Failed to get local IP address" << std::endl;
    }

    return 0;
}

这个程序首先创建一个 UDP 套接字,然后使用 getsockname() 函数获取套接字的本地地址。最后,它使用 inet_ntop() 函数将 IP 地址从二进制格式转换为可读字符串。

要编译和运行此程序,请将其保存为 get_local_ip.cpp,然后在终端中执行以下命令:

g++ get_local_ip.cpp -o get_local_ip
./get_local_ip

这将输出您的本地 IP 地址。请注意,此方法仅适用于 IPv4 地址。如果您需要获取 IPv6 地址,您需要对代码进行相应的修改。

0