機能と間違ったIPアドレスを取得するには、IPアドレスを指定:メインで使用私はイーサネットを取得するgetifaddrs
char *get_ethernet_ip(const char *ethernet, char *ip, size_t len) {
struct ifaddrs *ips;
int rc = getifaddrs(&ips);
if (rc == -1) {
SYSLOG("getifaddrs() failed (%s)", strerror(errno));
return NULL;
}
for (; ips != NULL; ips = ips->ifa_next) {
if (strcasecmp(ethernet, ips->ifa_name) == 0) {
in_addr local_ip = ((sockaddr_in *)ips->ifa_addr)->sin_addr;
const char *p = inet_ntop(AF_INET, &local_ip, ip, len);
if (p == NULL) {
SYSLOG("inet_ntop() failed (%s)", strerror(errno));
return NULL;
}
return ip;
}
}
return NULL;
}
:
char ip[32];
SYSLOG("ethernet lo ip: %s", get_ethernet_ip("lo", ip, 32));
SYSLOG("ethernet eth0 ip: %s", get_ethernet_ip("eth0", ip, 32));
結果:
[を2016- 10-26 04:37:52 UTC] [server_info.cpp:90] [メイン] ethernet lo ip:1.0.0.0質問2.0.0.0
:
IP lo
ために127.0.0.1
なければならない0 [2016年10月26日午前4時37分52秒UTC] [server_info.cpp:91] [メイン]イーサネットのeth0 IP eth0
については、それは2.0.0.0
であってはなりません、そうですか?
私は 'freeifaddrs()'を呼び出さなかったことを知っています。指摘する必要はありません。 – CharlesLiuChina
"ip"の定義を少なくとも表示して、わかりやすく理解してください。 – paddy
@paddyが再編集されました。 :-) – CharlesLiuChina