Все что я нашел в сети под lin не работает
вот код на Си, работает как в убунту если собрать обычным гцц, так и на ARM архитектуре (я собирал тулчейном, который собрал при помощи buildroot), таких как Omap2 (AM37xx) и AT91 (AT91SAM9G20-EK)
- Код: Выделить всё
/******************************************************************************
Description.: функция get_addr_of_if вернет IP-адрес in,
* заданный в сетевом порядке расположения байтов для сетевого
* интерфейса if_name.
* для преобразования данного адреса в строковое представление
* используйте функцию inet_ntoa().
Input Value.: if_name - имя сетевого интерфейса в строковом представлении
* например "eth0"
* addr - указатель на структуру адреса, в которую будет скопирован
* адрес сетевого интерфейса. Данный формат IP адреса необходим
* в таких функциях как connect
Return Value: <> 0 - Error см комментарии.
* == 0 - Good job
******************************************************************************/
int get_addr_of_if(const char *if_name, struct in_addr* addr)
{
struct ifaddrs *ifa_head;
struct ifaddrs *ifa_cur;
int result;
if( !if_name || !addr )
return -1; //входные параметры не верны
if( getifaddrs(&ifa_head) != 0 )
return -2; //ошибка в получении списка сетевых интерфейсов
result = -3;
for( ifa_cur = ifa_head; ifa_cur; ifa_cur = ifa_cur->ifa_next )
{
if( ifa_cur->ifa_name != NULL && ifa_cur->ifa_addr != NULL )
{
if( strcmp(if_name, (char *)ifa_cur->ifa_name) != 0 || ifa_cur->ifa_addr->sa_family != AF_INET ) // || !(ifa_cur->ifa_flags & IFF_UP) )
continue;
memcpy(addr, &(((struct sockaddr_in *)ifa_cur->ifa_addr)->sin_addr), sizeof(struct in_addr) );
result = 0; //good job
break;
}
}
freeifaddrs(ifa_head);
return (result);
}