Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added function to get the MAC address of the Wifi network interface

  • Loading branch information...
commit 43a1f244ef9a0620935b1d5b800c57708367881c 1 parent 9b77bec
Nicholas Humfrey authored
Showing with 62 additions and 0 deletions.
  1. +2 −0  getMacAddress.h
  2. +60 −0 getMacAddress.m
2  getMacAddress.h
View
@@ -0,0 +1,2 @@
+
+NSString* getMacAddress();
60 getMacAddress.m
View
@@ -0,0 +1,60 @@
+/* Stolen from: https://gist.github.com/1409855/ */
+/* Original source code courtesy John from iOSDeveloperTips.com */
+
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+
+NSString* getMacAddress()
+{
+ NSString *macAddressString = NULL;
+ int mgmtInfoBase[6];
+ char *msgBuffer = NULL;
+ size_t length = 0;
+
+ // Setup the management Information Base (mib)
+ mgmtInfoBase[0] = CTL_NET; // Request network subsystem
+ mgmtInfoBase[1] = AF_ROUTE; // Routing table info
+ mgmtInfoBase[2] = 0;
+ mgmtInfoBase[3] = AF_LINK; // Request link layer information
+ mgmtInfoBase[4] = NET_RT_IFLIST; // Request all configured interfaces
+
+ // With all configured interfaces requested, get handle index
+ if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0)
+ NSLog(@"if_nametoindex failure");
+ // Get the size of the data available (store in len)
+ else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0)
+ NSLog(@"sysctl mgmtInfoBase failure");
+ // Alloc memory based on above call
+ else if ((msgBuffer = malloc(length)) == NULL)
+ NSLog(@"buffer allocation failure");
+ // Get system information, store in buffer
+ else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
+ {
+ free(msgBuffer);
+ NSLog(@"sysctl msgBuffer failure");
+ }
+ else
+ {
+ // Map msgbuffer to interface message structure
+ struct if_msghdr *interfaceMsgStruct = (struct if_msghdr *) msgBuffer;
+
+ // Map to link-level socket structure
+ struct sockaddr_dl *socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);
+
+ // Copy link layer address data in socket structure to an array
+ unsigned char macAddress[6];
+ memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6);
+
+ // Read from char array into a string object, into traditional Mac address format
+ macAddressString = [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X",
+ macAddress[0], macAddress[1], macAddress[2],
+ macAddress[3], macAddress[4], macAddress[5]];
+
+ // Release the buffer memory
+ free(msgBuffer);
+ }
+
+ return macAddressString;
+}
Please sign in to comment.
Something went wrong with that request. Please try again.