c++获取本地ip地址
时间: 2023-09-04 07:13:00 浏览: 139
VC 获取公网 ip 地址
5星 · 资源好评率100%
你可以使用C++编程语言通过以下方式获取本地IP地址:
```cpp
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_fd == -1) {
std::cerr << "Failed to create socket" << std::endl;
return 1;
}
sockaddr_in sa;
std::memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("8.8.8.8"); // 使用一个公共的IP地址作为目标,如Google DNS服务器地址
int connect_result = connect(socket_fd, reinterpret_cast<const sockaddr*>(&sa), sizeof(sa));
if (connect_result == -1) {
std::cerr << "Failed to connect" << std::endl;
close(socket_fd);
return 1;
}
sockaddr_in local_addr;
socklen_t addr_len = sizeof(local_addr);
int getsockname_result = getsockname(socket_fd, reinterpret_cast<sockaddr*>(&local_addr), &addr_len);
if (getsockname_result == -1) {
std::cerr << "Failed to get local address" << std::endl;
close(socket_fd);
return 1;
}
char ip_addr[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(local_addr.sin_addr), ip_addr, INET_ADDRSTRLEN);
std::cout << "Local IP address: " << ip_addr << std::endl;
close(socket_fd);
return 0;
}
```
这段代码使用了`socket`、`connect`和`getsockname`函数来获取本地IP地址。它创建了一个UDP套接字,并通过连接到一个公共IP地址(如Google DNS服务器地址)来获取本地IP地址。然后使用`getsockname`函数获取套接字的本地地址,最后使用`inet_ntop`函数将二进制IP地址转换为字符串形式。在此示例中,我们使用了Google DNS服务器地址,你可以根据需要更改为其他可访问的IP地址。
请注意,这种方法仅适用于已连接到网络的设备。如果设备没有连接到网络,将无法获取到IP地址。此外,代码中没有处理错误情况的详细信息,你可以根据需要进行错误处理和异常情况处理。
阅读全文