在 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 地址,您需要对代码进行相应的修改。