여기에 무선 en1의 IP 주소를 보내고 출력하는 내 기능이 있습니다.My Get IP Address C 함수가 올바른 값을 출력하지 않습니다.
char* getIPAddress(char* src)
{
struct ifaddrs *ifaddr, *ifa;
int family;
if (getifaddrs(&ifaddr) == -1) {
perror("getifaddrs");
exit(EXIT_FAILURE);
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL)
continue;
family = ifa->ifa_addr->sa_family;
if (0 == strcmp(ifa->ifa_name,"en1") && (family == AF_INET)) { // v4
// en1
inet_ntop(ifa->ifa_addr->sa_family,&((struct sockaddr_in*)ifa)->sin_addr,src,sizeof(struct sockaddr_in));
}
}
freeifaddrs(ifaddr);
return src;
}
나는 129.10.10.50과 비슷한 것을 기대하지만, 지금은 공백으로 출력됩니다.
잠시 동안 연결이 비활성 상태이면이 문제가 발생할 수 있습니다. 일반적으로 더미 패킷을 보내는 것은 그 문제를 해결합니다. "en1"문자열이 "en0"으로되어 있는지 확실하지 않습니다 ... 여러 개의 어댑터가 없으면 이전에 보았던 것입니다. ... 리눅스에서/proc/net/arp를 사용할 수 있습니다 – technosaurus
'inet_ntop()'호출로'if' 문이 실제로 true로 평가되어 실행되는지 여부를 확인 했습니까? –