Вот моя функция для получения и вывода IP-адреса беспроводной сети en1.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» ... это то, что я видел раньше, если у вас нет нескольких адаптеров. ... на linux вы можете использовать/proc/net/arp – technosaurus
Вы проверили, действительно ли ваш оператор 'if' с вызовом' inet_ntop() 'на самом деле оценивает значение true и выполняет? –