美文网首页
获取网卡地址

获取网卡地址

作者: 小明讲啥故事 | 来源:发表于2018-04-13 10:45 被阅读6次

    这是获取网卡的硬件地址的代码,如果无法编译通过,记得把下面的这几个头文件加上把。

    #include // Per msqr

    #include

    #include

    #include

    #pragma mark MAC addy

    // Return the local MAC addy

    // Courtesy of FreeBSD hackers email list

    // Accidentally munged during previous update. Fixed thanks to mlamb.

    - (NSString *) macaddress

    {

    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("en0")) == 0) {

    printf("Error: if_nametoindex error/n");

    return NULL;

    }

    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {

    printf("Error: sysctl, take 1/n");

    return NULL;

    }

    if ((buf = malloc(len)) == NULL) {

    printf("Could not allocate memory. error!/n");

    return NULL;

    }

    if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {

    printf("Error: sysctl, take 2");

    return NULL;

    }

    ifm = (struct if_msghdr *)buf;

    sdl = (struct sockaddr_dl *)(ifm + 1);

    ptr = (unsigned char *)LLADDR(sdl);

    // NSString *outstring = [NSString stringWithFormat:@"x:x:x:x:x:x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

    NSString *outstring = [NSString stringWithFormat:@"xxxxxx", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

    free(buf);

    return [outstring uppercaseString];

    }

    这写头文件是用于获取ip等系列功能的

    #include

    #include

    #include

    #include

    #import

    #import "wwanconnect.h//frome apple 你可能没有哦

    #import

    获取ip地址的代码有很多

    这是外网可见的ip地址,如果你在小区的局域网中,那就是小区的,不是局域网的内网地址。

    - (NSString *) whatismyipdotcom

    {

    NSError *error;

    NSURL *ipURL = [NSURL URLWithString:@"http://www.whatismyip.com/automation/n09230945.asp"];

    NSString *ip = [NSString stringWithContentsOfURL:ipURL encoding:1 error:&error];

    return ip ? ip : [error localizedDescription];

    }

    这是获取本地wifi的ip地址

    // Matt Brown's get WiFi IP addy solution

    // Author gave permission to use in Cookbook under cookbook license

    // http://mattbsoftware.blogspot.com/2009/04/how-to-get-ip-address-of-iphone-os-v221.html

    - (NSString *) localWiFiIPAddress

    {

    BOOL success;

    struct ifaddrs * addrs;

    const struct ifaddrs * cursor;

    success = getifaddrs(&addrs) == 0;

    if (success) {

    cursor = addrs;

    while (cursor != NULL) {

    // the second test keeps from picking up the loopback address

    if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)

    {

    NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];

    if ([name isEqualToString:@"en0"])  // Wi-Fi adapter

    return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)];

    }

    cursor = cursor->ifa_next;

    }

    freeifaddrs(addrs);

    }

    return nil;

    }

    NSString和Address的转换

    + (NSString *) stringFromAddress: (const struct sockaddr *) address

    {

    if(address && address->sa_family == AF_INET) {

    const struct sockaddr_in* sin = (struct sockaddr_in*) address;

    return [NSString stringWithFormat:@"%@:%d", [NSString stringWithUTF8String:inet_ntoa(sin->sin_addr)], ntohs(sin->sin_port)];

    }

    return nil;

    }

    + (BOOL)addressFromString:(NSString *)IPAddress address:(struct sockaddr_in *)address

    {

    if (!IPAddress || ![IPAddress length]) {

    return NO;

    }

    memset((char *) address, sizeof(struct sockaddr_in), 0);

    address->sin_family = AF_INET;

    address->sin_len = sizeof(struct sockaddr_in);

    int conversionResult = inet_aton([IPAddress UTF8String], &address->sin_addr);

    if (conversionResult == 0) {

    NSAssert1(conversionResult != 1, @"Failed to convert the IP address string into a sockaddr_in: %@", IPAddress);

    return NO;

    }

    return YES;

    }

    获取host的名称

    - (NSString *) hostname

    {

    char baseHostName[256]; // Thanks, Gunnar Larisch

    int success = gethostname(baseHostName, 255);

    if (success != 0) return nil;

    baseHostName[255] = '/0';

    #if TARGET_IPHONE_SIMULATOR

    return [NSString stringWithFormat:@"%s", baseHostName];

    #else

    return [NSString stringWithFormat:@"%s.local", baseHostName];

    #endif

    }

    从host获取地址

    - (NSString *) getIPAddressForHost: (NSString *) theHost

    {

    struct hostent *host = gethostbyname([theHost UTF8String]);

    if (!host) {herror("resolv"); return NULL; }

    struct in_addr **list = (struct in_addr **)host->h_addr_list;

    NSString *addressString = [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding];

    return addressString;

    }

    这是本地host的IP地址

    - (NSString *) localIPAddress

    {

    struct hostent *host = gethostbyname([[self hostname] UTF8String]);

    if (!host) {herror("resolv"); return nil;}

    struct in_addr **list = (struct in_addr **)host->h_addr_list;

    return [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding];

    }

    相关文章

      网友评论

          本文标题:获取网卡地址

          本文链接:https://www.haomeiwen.com/subject/gyfckftx.html