🗣 Wd提问: c++获取本机ip
🤖 Ai回答: 在 C++ 中获取本机 IP 地址(特别是本地局域网 IP,如 `192.168.x.x`)可以通过调用操作系统的网络 API 实现。由于不同平台(Windows 和 Linux/macOS)的 API 不同,我们需要分别处理。
下面是一个跨平台的示例代码,使用标准 C++ 和系统网络库来获取本机 IP 地址。
✅ 跨平台获取本机 IP(支持 Windows 和 Linux/macOS)
cpp
include <iostream
include <string
ifdef _WIN32
include <winsock2.h
include <ws2tcpip.h
include <iphlpapi.h
pragma comment(lib, ws2_32.lib)
pragma comment(lib, iphlpapi.lib)
else
include <sys/socket.h
include <ifaddrs.h
include <netinet/in.h
include <arpa/inet.h
include <net/if.h
endif
std::string getLocalIP() {
std::string ip = 127.0.0.1;
ifdef _WIN32
// Windows 版本
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
return ip;
}
char hostname[256];
if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) {
WSACleanup();
return ip;
}
struct addrinfo *result = nullptr;
if (getaddrinfo(hostname, nullptr, nullptr, &result) != 0) {
WSACleanup();
return ip;
}
for (struct addrinfo *ptr = result; ptr != nullptr; ptr = ptr-ai_next) {
if (ptr-ai_family == AF_INET) {
struct sockaddr_in *addr = (struct sockaddr_in*)ptr-ai_addr;
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr-sin_addr), ip_str, INET_ADDRSTRLEN);
std::string temp_ip(ip_str);
// 排除回环地址
if (temp_ip.substr(0, 3) != 127 && temp_ip.substr(0, 4) != 169.) {
ip = temp_ip;
break;
}
}
}
freeaddrinfo(result);
WSACleanup();
else
// Linux / macOS 版本
struct ifaddrs *ifaddrs_ptr = nullptr;
if (getifaddrs(&ifaddrs_ptr) == -1) {
return ip;
}
for (struct ifaddrs *ifa = ifaddrs_ptr; ifa != nullptr; ifa = ifa-ifa_next) {
if (ifa-ifa_addr == nullptr) continue;
if (ifa-ifa_addr-sa_family == AF_INET) {
struct sockaddr_in *addr = (struct sockaddr_in*)ifa-ifa_addr;
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(addr-sin_addr), ip_str, INET_ADDRSTRLEN);
std::string temp_ip(ip_str);
// 排除回环接口和无效地址
if (std::string(ifa-ifa_name) != lo && temp_ip.substr(0, 3) != 127 && temp_ip.substr(0, 4) != 169.) {
ip = temp_ip;
break;
}
}
}
freeifaddrs(ifaddrs_ptr);
endif
return ip;
}
int main() {
std::string localIP = getLocalIP();
std::cout << Local IP: << localIP << std::endl;
return 0;
}
🔧 编译说明
在 Linux/macOS 上:
bash
g++ -o getip getip.cpp
./getip
在 Windows 上(使用 Visual Studio 或 MinGW):
bash
g++ -o getip.exe getip.cpp -lws2_32 -liphlpapi
📌 注意事项
此方法获取的是非回环、非链路本地的第一个 IPv4 地址。
如果机器有多个网卡(如 Wi-Fi、以太网),只会返回第一个符合条件的。
`169.254.x.x` 是链路本地地址(无 DHCP),通常应排除。
若需获取所有 IP,可修改为返回 `std::vector<std::string`。
✅ 示例输出
Local IP: 192.168.1.100
如果你希望更简单的方式(但依赖外部命令),也可以执行 `ipconfig`(Windows)或 `ifconfig`/`hostname -I`(Linux)并解析输出,但不推荐用于生产环境。
如需更高级功能(如指定网卡、IPv6 支持等),可进一步扩展。
需要我提供“获取所有 IP”或“按网卡名称获取 IP”的版本吗?
📣 商家广告 :
👍
0
👎
IP地址: 176.86.157.20
搜索次数: 0
提问时间: 2025-11-07 00:26:27
🛒 域名购买 :
pcks.cn 82.chat ndgj.cn souzi.com.cn mmmf.com.cn psyshake.com yk.gs cgbc.cn qn.gs sxny.net
❓️ 热门提问 :
虚拟主机建站 6000电脑主机 白嫖云服务器 云计算含义是什么 域名购买哪里好 批量建群 站群平台用户增长计划 服务器器国外 服务器选择什么好 便宜的云电脑 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
oo.sd.cn dp.sh.cn iveh.cn nn.gd.cn qftg.cn Nav.Top vivo.bj.cn xphone.gold 853.cn vance.ren
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
搜全网
乐山网站推广
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。