- Как определить свой MAC-адрес, pavel, 02:16 , 05-Фев-08 (1)
- Как определить свой MAC-адрес, anonymous, 05:57 , 05-Фев-08 (2)
- Как определить свой MAC-адрес, Mariupolets, 16:44 , 05-Фев-08 (3)
>>ifconfig fxp0 |grep ether|awk '{print $2}' Спасибо за ответ, так я и сделал пока :). Оно конечно работает, но должны ж быть какие-то возможности через API это сделать. >В крайнем случае, можно посмотреть исходник местного ifconfig. Там смотрел. Код не простой для меня. Разбираю потихоньку, но думал, может кто уже делал... Если пойму - выложу код.
- Как определить свой MAC-адрес, Guest, 21:13 , 05-Фев-08 (5)
- Решение: Как определить свой MAC-адрес, Mariupolets, 22:47 , 06-Фев-08 (6)
Спасибо всем за ответы.Действительно, есть функция getifaddrs, возвращающая все адреса (и МАКи) для всех интерфейсов. И как я понимаю, она использует всё тот-же ioctl с запросом SIOCGIFADDR (или что-то вроде). Кому нужно, вот пример: #include <sys/types.h> // библиотека различных "макротипов" #include <sys/socket.h> // библиотека для работы с сокетами #include <net/if_dl.h> // библиотека для работы с Link Layer адресами #include <ifaddrs.h> // библиотека для работы с адресами интерфейсов #include <string.h> // библиотека работы со строками /* Функция получения MAC-адреса, возвращает структуру типа ether_addr (ethernet.h)*/ struct ether_addr *GetMyMAC( char *ifname // входной параметр - имя интерфейса ){ struct ifaddrs *ifa, *ifap; // структуры (ifaddrs.h) для получения адресов интерфейсов struct sockaddr_dl *sdl; // структура (if_dl.h) содержит MAC-адресс (и не только) /* получение всех адресов (Ethernet, IP, IP6 ... ) всех интерфейсов */ if(getifaddrs(&ifap)<0 ) return (NULL); for(ifa = ifap; ifa; ifa = ifa->ifa_next){ /* поиск нужного интерфейса и адреса */ if( (ifa->ifa_addr->sa_family != AF_LINK) || // поиск по типу адреса Link Layer (strcmp(ifa->ifa_name,ifname) != 0) ) { // поиск по имени интерфейса continue; } freeifaddrs(ifap); // очистка памяти - необязательно return (struct ether_addr *) (LLADDR((struct sockaddr_dl *)ifa->ifa_addr)); // возврат MAC-адресa } freeifaddrs(ifap); // очистка памяти return(NULL); // возврат ошибки } int main(){ struct ether_addr *MAC = GetMyMAC("bge0"); if(MAC != NULL) printf("My MAC is %s\n", ether_ntoa(MAC)); else printf("Can't get MAC\n"); }
|