這可能是一個愚蠢的問題,我很抱歉,如果它已經在這裏解決,但我已經搜索了很多,沒有多少運氣。我試圖讓我的界面的硬件地址在C中,我正在使用OS X(x86-64)。我知道如何通過ifconfig
獲得它,但我希望我的程序能夠爲任何計算機自動獲取它,至少OS X電腦。我發現另一個線程發佈link這幾乎做我想做的(有一些修改),但我不能使ld
(我的編譯器是gcc
)iokit
函數鏈接。我嘗試將標記-lIOKit
和-framework IOKit
添加到gcc
命令行,但我仍然收到相同的鏈接錯誤。這是我的代碼的鏈接:header和source。來自OS X界面的MAC地址(C)
7
A
回答
6
This little program將在OSX上無需更改即可使用。
代碼:(從FreeBSD的名單學分Alecs王)
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int mib[6], len;
char *buf;
unsigned char *ptr;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
if (argc != 2) {
fprintf(stderr, "Usage: getmac <interface>\n");
return 1;
}
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
if ((mib[5] = if_nametoindex(argv[1])) == 0) {
perror("if_nametoindex error");
exit(2);
}
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
perror("sysctl 1 error");
exit(3);
}
if ((buf = malloc(len)) == NULL) {
perror("malloc error");
exit(4);
}
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
perror("sysctl 2 error");
exit(5);
}
ifm = (struct if_msghdr *)buf;
sdl = (struct sockaddr_dl *)(ifm + 1);
ptr = (unsigned char *)LLADDR(sdl);
printf("%02x:%02x:%02x:%02x:%02x:%02x\n", *ptr, *(ptr+1), *(ptr+2),
*(ptr+3), *(ptr+4), *(ptr+5));
return 0;
}
你應該,但是,改變int len;
到size_t len;
+0
謝謝,那正是我想要的。 –
相關問題
- 1. Mac OS X上的Marmalade用戶界面
- 2. Mac OS X上的PHPMailer和CC地址
- 3. GCC標誌-Os來自Mac OS X?
- 4. 圖形用戶界面編程C + +的Mac OS X獅子
- 5. 地理Django的MAC OS X
- 6. Mac OS地址簿格式
- 7. Objective-C串行 - Mac OS X
- 8. C++ #ifdef Mac OS X問題
- 9. 調試工具/方法的Mac OS X界面生成器(3.2.3)
- 10. 是否有一個Perl界面的Mac OS X默認?
- 11. Mac OS X上的Java Swing圖形用戶界面
- 12. 什麼是Mac OS X地址簿中使用的IB對象?
- 13. 綁定到mac os上的mdns多播地址x
- 14. 用於在OS X中獲取MAC地址的Shell命令
- 15. Mac OS X的並行線程假回郵地址
- 16. Graphiz for Mac OS的圖形界面?
- 17. Mac OS X PackageMaker
- 18. 在Mac OS X
- 19. Java在Mac OS X上的未來
- 20. Mac OS X中的sendmail優勝美地
- 21. 正在檢索Mac OS X代理IP地址
- 22. 在Mac OS X的桌面上繪圖
- 23. Mac OS X:我如何獲得所有可用WiFi網絡的MAC地址?
- 24. Mac OS X:master-detail界面和Cocoa Bindings
- 25. Mac OS X的儀器自動化?
- 26. Mac OS X上的Dropbox Objective-C SDK?
- 27. Clang在OS X上的地址Sanitizer
- 28. 如何以編程方式在MAC OS X中查找MAC地址?
- 29. 越來越Mac OS X 10.5 sdk
- 30. MAC OS X優勝美地:Safari設置
我一直以爲巴甫洛夫有一隻狗......不是嗎? – 2012-05-15 03:37:41
是的,我的名字只是一句話而已。 –