पर इंटरफ़ेस से मैक पता यह एक बेवकूफ सवाल हो सकता है और अगर मैं पहले से ही यहां संबोधित किया गया हूं, तो मैं क्षमा चाहता हूं, लेकिन मैंने बहुत भाग्य के बिना काफी कुछ खोजा है। मैं सी में अपना इंटरफ़ेस का हार्डवेयर पता प्राप्त करने का प्रयास कर रहा हूं और मैं ओएस एक्स (x86-64) का उपयोग कर रहा हूं। मुझे पता है कि इसे ifconfig
के साथ कैसे प्राप्त किया जाए, लेकिन मैं चाहता हूं कि मेरा प्रोग्राम स्वचालित रूप से किसी भी कंप्यूटर, कम से कम ओएस एक्स कंप्यूटर के लिए इसे प्राप्त करे। मुझे एक और थ्रेड मिला जो इस link को पोस्ट करता है जो कि मैं चाहता हूं (कुछ संशोधनों के साथ), लेकिन मैं iokit
ld
में फ़ंक्शन लिंक नहीं बना सकता (मेरा कंपाइलर gcc
है)। मैंने -lIOKit
और -framework IOKit
को gcc
कमांड लाइन में झंडे जोड़ने की कोशिश की, लेकिन मुझे अभी भी वही लिंक त्रुटियां मिलती हैं। यहां मेरे कोड का एक लिंक दिया गया है: header और source।ओएस एक्स (सी)
7
A
उत्तर
6
This little program ओएसएक्स पर बदलाव किए बिना काम करेगा।
कोड: (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;
}
हालांकि, आप बदलना चाहिए size_t len;
+0
धन्यवाद, यह वही है जो मैं चाहता था। –
मैं हमेशा सोचा था कि पावलोव एक कुत्ता था ... कोई करने
int len;
? –हाँ, मेरा नाम सिर्फ शब्दों पर एक खेल है। –