typedef std::map<string,string> settings_t;
void loadLocalIp (settings_t &ipConfig)
{
struct ifaddrs * ifAddrStruct=NULL;
struct ifaddrs * ifa=NULL;
void * tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa ->ifa_addr->sa_family==AF_INET) { // check it is IP4
// is a valid IP4 Address
tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
char addressBuffer[INET_ADDRSTRLEN];
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
string key(ifa->ifa_name);
string value(addressBuffer);
cout<<key<<" =1 " <<value<<endl;
ipConfig.insert(std::pair<string,string>(key, value));
// printf("'%s': %s\n", ifa->ifa_name, addressBuffer);
}
}
if (ifAddrStruct!=NULL)
freeifaddrs(ifAddrStruct);//remember to free ifAddrStruct
}
int main()
{
settings_t ipConfig;
loadLocalIp(ipConfig);
cout<<ipConfig.at("enp2s0")<<endl;
return 0;
}
因此,我的结果是:
lo =1 127.0.0.1
enp2s0 =1 172.20.55.6
172.20.55.6
但是在另一台电脑上,接口名称是不同的。他们得到了如下结果:
lo =1 127.0.0.1
ens32 =1 172.20.55.9
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
Aborted (core dumped)
我希望无论接口名称如何,都能够获取我的IP地址。如果接口名称因不同计算机而异,我该如何获取本地IP地址。无论接口名称如何,它应该提供IP地址。我该怎么做?
我的问题是,目前我正在使用此方法获取本地IP。但是我应该获取任何接口名称的IP。一件事,我需要找到该接口名称并将其应用于上述代码中,或者是否有任何其他选项可以在不使用该接口的情况下查找该IP?
ipConfig.at("enp2s0")
。为什么不在创建后直接使用映射中的内容呢? - Galik