获取机器的ip地址这个问题几乎与先前提出的问题相同。获取本地计算机的IP地址-问题。但是,我需要找到Linux机器.那么:如何以编程方式在C+-检测我的应用程序正在运行的Linux服务器的IP地址。服务器至少有两个IP地址,我需要一个特定的IP地址(给定网络中的IP地址(公共地址)。我相信有一个简单的功能可以做到-但是在哪里呢?为了让事情更清楚一点:服务器显然有“localhost”:127.0.0.1服务器将有一个内部(管理)IP地址:172.16.x.x服务器将具有外部(公共)IP地址:80.190.x.x我需要找到外部IP地址来将我的应用程序绑定到它。显然,我也可以绑定到INADDR_ANY(实际上这就是我目前所做的)。不过,我更希望能探测到公共地址。
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
创建一个套接字。 表演 ioctl(<socketfd>, SIOCGIFCONF, (struct ifconf)&buffer);
/usr/include/linux/if.h
ifconf
ifreq
/usr/include/linux/sockios.h
幕布斯7119047
TA贡献1794条经验 获得超8个赞
void GetPrimaryIp(char* buffer, size_t buflen) { assert(buflen >= 16); int sock = socket(AF_INET, SOCK_DGRAM, 0); assert(sock != -1); const char* kGoogleDnsIp = "8.8.8.8"; uint16_t kDnsPort = 53; struct sockaddr_in serv; memset(&serv, 0, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr(kGoogleDnsIp); serv.sin_port = htons(kDnsPort); int err = connect(sock, (const sockaddr*) &serv, sizeof(serv)); assert(err != -1); sockaddr_in name; socklen_t namelen = sizeof(name); err = getsockname(sock, (sockaddr*) &name, &namelen); assert(err != -1); const char* p = inet_ntop(AF_INET, &name.sin_addr, buffer, buflen); assert(p); close(sock);}
- 3 回答
- 0 关注
- 563 浏览
添加回答
举报
0/150
提交
取消