Esempio n. 1
0
std::pair<bool, MACAddressType> GetPrimaryMacAddress() {
  kern_return_t  kernResult = KERN_SUCCESS; // on PowerPC this is an int (4 bytes)
  /*
   *  error number layout as follows (see mach/error.h and IOKit/IOReturn.h):
   *
   *  hi                lo
   *  | system(6) | subsystem(12) | code(14) |
   */

  io_iterator_t  intfIterator;
  MACAddressType mac_address = {0};

  kernResult = FindEthernetInterfaces(&intfIterator, "en0");

  if (KERN_SUCCESS != kernResult) {
    //printf("FindEthernetInterfaces returned 0x%08x\n", kernResult);
    (void) IOObjectRelease(intfIterator);  // Release the iterator.
    return std::pair<bool, MACAddressType>(false, mac_address);
  }
  else {
    kernResult = GetMACAddress(intfIterator, mac_address.array, sizeof(MACAddressType));

    if (KERN_SUCCESS != kernResult) {
      kernResult = FindEthernetInterfaces(&intfIterator, "en1");
      
      if (KERN_SUCCESS != kernResult) {
        //printf("FindEthernetInterfaces returned 0x%08x\n", kernResult);
        (void) IOObjectRelease(intfIterator);  // Release the iterator.
        return std::pair<bool, MACAddressType>(false, mac_address);
      }
      else {
        kernResult = GetMACAddress(intfIterator, mac_address.array, sizeof(MACAddressType));
        
        if (KERN_SUCCESS != kernResult) {
          //printf("GetMACAddress returned 0x%08x\n", kernResult);
          (void) IOObjectRelease(intfIterator);  // Release the iterator.
          return std::pair<bool, MACAddressType>(false, mac_address);
        }
        else {
          (void) IOObjectRelease(intfIterator);  // Release the iterator.
          return std::pair<bool, MACAddressType>(true, mac_address);
        }
      }
      
    }
    else {
      (void) IOObjectRelease(intfIterator);  // Release the iterator.
      return std::pair<bool, MACAddressType>(true, mac_address);
    }
  }
}
Esempio n. 2
0
NSString *getMACAddressString()
{
	static NSString *addressString = nil;
	
	if (!addressString) {
		kern_return_t  kernResult = KERN_SUCCESS; // on PowerPC this is an int (4 bytes)
		/*
		 *  error number layout as follows (see mach/error.h and IOKit/IOReturn.h):
		 *
		 *  hi                lo
		 *  | system(6) | subsystem(12) | code(14) |
		 */
		
		io_iterator_t  intfIterator;
		UInt8      MACAddress[kIOEthernetAddressSize];
		
		kernResult = FindEthernetInterfaces(&intfIterator);
		
		if (KERN_SUCCESS != kernResult) {
			printf("FindEthernetInterfaces returned 0x%08x\n", kernResult);
		}
		else {
			kernResult = GetMACAddress(intfIterator, MACAddress, sizeof(MACAddress));
			
			if (KERN_SUCCESS != kernResult) {
				printf("GetMACAddress returned 0x%08x\n", kernResult);
			}
			else {
				addressString = [[NSString alloc] initWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x",
					MACAddress[0], MACAddress[1], MACAddress[2], MACAddress[3], MACAddress[4], MACAddress[5] ];
			}
		}
		
		(void) IOObjectRelease(intfIterator);  // Release the iterator.
	}
static psych_bool GetPrimaryEthernetAddress(UInt8 *MACAddress)
{
	psych_bool			errorReturn;
    kern_return_t	kernResult; 
    io_iterator_t	intfIterator;
 
	errorReturn=FALSE;
    kernResult = FindEthernetInterfaces(&intfIterator);
	if(kernResult != KERN_SUCCESS)
		errorReturn=TRUE;
    else{
        kernResult = GetMACAddress(intfIterator, MACAddress);
        if(kernResult != KERN_SUCCESS)
			errorReturn=TRUE;
    }
    
    (void) IOObjectRelease(intfIterator);  // Release the iterator.
        
    return(errorReturn);	
}
static CFStringRef
CopyPrimaryMacAddress(void)
{
	io_iterator_t intfIterator;
    UInt8 MAC[kIOEthernetAddressSize];
	CFStringRef macAddress = NULL;
 
    kern_return_t kernResult = FindEthernetInterfaces(&intfIterator);
    if (KERN_SUCCESS != kernResult) {
        DbgLog( kLogError, "FindEthernetInterfaces returned 0x%08x", kernResult );
    } else {
        kernResult = GetMACAddress(intfIterator, MAC, sizeof(MAC));
        
        if (KERN_SUCCESS != kernResult) {
            DbgLog( kLogError, "GetMACAddress returned 0x%08x", kernResult );
        } else {
			macAddress = CFStringCreateWithFormat(NULL, NULL, CFSTR("[%02x:%02x:%02x:%02x:%02x:%02x]"), MAC[0], MAC[1], MAC[2], MAC[3], MAC[4], MAC[5]);
		}
    }
    
    (void)IOObjectRelease(intfIterator);

	return macAddress;
}
Esempio n. 5
0
bool
GetMACAddress( string& mac ) {
    mac = "";

    kern_return_t	kernResult = KERN_SUCCESS;
    io_iterator_t	intfIterator;
    UInt8			MACAddress[kIOEthernetAddressSize];
 
    kernResult = FindEthernetInterfaces(&intfIterator);
    
    if (KERN_SUCCESS != kernResult) {
        IOObjectRelease(intfIterator);
		return false;
    }

	kernResult = OSXGetMACAddress(intfIterator, MACAddress, sizeof(MACAddress));
        
	if (KERN_SUCCESS != kernResult) {
		IOObjectRelease(intfIterator);
		return false;
	}

    ostringstream out;
    out << hex << nouppercase << setfill('0');
    out << setw(2) << (int)MACAddress[0] << ":"
        << setw(2) << (int)MACAddress[1] << ":"
        << setw(2) << (int)MACAddress[2] << ":"
        << setw(2) << (int)MACAddress[3] << ":"
        << setw(2) << (int)MACAddress[4] << ":"
        << setw(2) << (int)MACAddress[5];

    IOObjectRelease(intfIterator);

    mac = out.str();
	return true;
}
Esempio n. 6
0
int get_macaddr(const char *ifname, U8 *addr)
{
#if defined(__NBR_OSX__)
    kern_return_t	kernResult = KERN_SUCCESS;
    io_iterator_t	intfIterator;
    UInt8			MACAddress[kIOEthernetAddressSize];

    kernResult = FindEthernetInterfaces(&intfIterator);

    if (KERN_SUCCESS != kernResult) {
        //OSDEP_ERROUT(ERROR,SYSCALL,"FindEthernetInterfaces returned 0x%08x\n", kernResult);
        return NBR_ESYSCALL;
    }
    else {
        kernResult = GetMACAddress(intfIterator, addr, sizeof(MACAddress));

        if (KERN_SUCCESS != kernResult) {
            //OSDEP_ERROUT(ERROR,SYSCALL,"GetMACAddress returned 0x%08x\n", kernResult);
        }
		else {
			TRACE("This system's built-in MAC address is %02x:%02x:%02x:%02x:%02x:%02x.\n",
					addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
		}
    }

    (void) IOObjectRelease(intfIterator);	// Release the iterator.

    return kernResult == KERN_SUCCESS ? NBR_OK : NBR_ESYSCALL;
#elif defined(__NBR_IOS__)
    int                 mib[6];
    size_t              len;
    char                *buf;
    unsigned char       *ptr;
    struct if_msghdr    *ifm;
    struct sockaddr_dl  *sdl;
    
    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(ifname)) == 0) {
        TRACE("Error: if_nametoindex error\n");
        return NBR_ESYSCALL;
    }
    
    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
        TRACE("Error: sysctl, take 1\n");
        return NBR_ESYSCALL;
    }
    
    if ((buf = (char *)util::mem::alloc(len)) == NULL) {
        TRACE("Could not allocate memory. error!\n");
        return NBR_EMALLOC;
    }
    
    if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
        TRACE("Error: sysctl, take 2");
        util::mem::free(buf);
        return NBR_ESYSCALL;
    }
    
    ifm = (struct if_msghdr *)buf;
    sdl = (struct sockaddr_dl *)(ifm + 1);
    ptr = (unsigned char *)LLADDR(sdl);

    util::mem::copy(addr, ptr, 6);
    util::mem::free(buf);
	TRACE("MAC ADDRESS (%s): [%02X:%02X:%02X:%02X:%02X:%02X]\n", ifname,
          *addr, *(addr+1), *(addr+2), *(addr+3), *(addr+4), *(addr+5));
    return NBR_OK;
#else
	int				soc, ret;
	struct ifreq	req;

	if ((soc = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		TRACE("socket fail: ret=%d,errno=%d",soc,errno);
		ret = soc;
		goto error;
	}
	util::str::copy(req.ifr_name, ifname, sizeof(req.ifr_name));
	req.ifr_addr.sa_family = AF_INET;

	if ((ret = ioctl(soc, SIOCGIFHWADDR, &req)) < 0) {
		TRACE("ioctl fail: soc=%d,ret=%d,errno=%d",soc,ret,errno);
		goto error;
	}
	util::mem::copy(addr, &(req.ifr_addr.sa_data), 6);
	ret = 0;
	TRACE("MAC ADDRESS (%s): [%02X:%02X:%02X:%02X:%02X:%02X]\n", ifname,
		*addr, *(addr+1), *(addr+2), *(addr+3), *(addr+4), *(addr+5));
error:
	if (soc >= 0) {
		close(soc);
	}
	return ret;
#endif
}