• 地址本地地址获取Apple设备ip地址


    最近研究地址本地地址,稍微总结一下,以后继续补充:

        本文原始地址:获得Apple备设ip地址

        MAC 

        当地

    - (NSString *)getIPWithNSHost
    {
        //获得全部当地地址
        NSArray *addresses = [[NSHost currentHost] addresses];
        NSString *stringAddress = nil;
        for (NSString *anAddress in addresses)
        {
            //找寻确正的ip地址
            if (![anAddress hasPrefix:@"127"] && [[anAddress componentsSeparatedByString:@"."] count] == 4)
            {
                stringAddress = anAddress;
                break;
            }
        }
        return stringAddress;
    }

        程远

    - (NSString *)getIP
    {
        NSUInteger an_Integer;
        NSArray *ipItemsArray;
        NSString *externalIP;
        
        //这里就是请求一个获得公网ip的域名
        NSURL *iPURL = [NSURL URLWithString:@"http://www.dyndns.org/cgi-bin/check_ip.cgi"];
        if (iPURL)
        {
            NSError *error = nil;
            NSString *theIpHtml = [NSString stringWithContentsOfURL:iPURL encoding:NSUTF8StringEncoding error:&error];
            if (!error)
            {
                NSScanner *theScanner;
                NSString *text = nil;
                theScanner = [NSScanner scannerWithString:theIpHtml];
                while ([theScanner isAtEnd] == NO)
                {
                    // find start of tag
                    [theScanner scanUpToString:@"<" intoString:NULL] ;
                    // find end of tag
                    [theScanner scanUpToString:@">" intoString:&text] ;
                    // replace the found tag with a space
                    //(you can filter multi-spaces out later if you wish)
                    theIpHtml = [theIpHtml stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@" "] ;
                    ipItemsArray = [theIpHtml componentsSeparatedByString:@" "];
                    an_Integer = [ipItemsArray indexOfObject:@"Address:"];
                    externalIP = [ipItemsArray objectAtIndex:  ++an_Integer];
                }
                NSLog(@"%@",externalIP);
            } else
            {
                NSLog(@"Oops... g %ld, %@", [error code], [error localizedDescription]);
            }
        }
        return externalIP;
    }

        移动备设(iphone,ipod...)

    - (NSString *)getAddress
    {
    	char iphone_ip[255];
        //默许"127.0.0.1"
    	strcpy(iphone_ip,"127.0.0.1");
    	NSHost *myhost =[NSHost currentHost];
    	if (myhost)
    	{
    		NSString *ad = [myhost address];
    		if (ad)
            {
                //拷贝到符字数组
                strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]);
            }
    	}
    	return [NSString stringWithFormat:@"%s",iphone_ip];
    }

        

        mac地址

        每日一道理
    灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻。它是平凡的,外表华丽与否,那都是一样的,珍珠点缀,水晶加饰的灯它只能用以装饰,来满足人们的虚荣心,比起这,普普通通的日光灯是幸运的,因为它照明的本性没有改变,如同生活中的一部分人平平凡凡却实实在在。
    #include <stdio.h>
    
    #include <CoreFoundation/CoreFoundation.h>
    
    #include <IOKit/IOKitLib.h>
    #include <IOKit/network/IOEthernetInterface.h>
    #include <IOKit/network/IONetworkInterface.h>
    #include <IOKit/network/IOEthernetController.h>
    
    static kern_return_t FindEthernetInterfaces(io_iterator_t *matchingServices);
    static kern_return_t GetMACAddress(io_iterator_t intfIterator, UInt8 *MACAddress, UInt8 bufferSize);
    
    // Returns an iterator containing the primary (built-in) Ethernet interface. The caller is responsible for
    // releasing the iterator after the caller is done with it.
    static kern_return_t FindEthernetInterfaces(io_iterator_t *matchingServices)
    {
        kern_return_t           kernResult; 
        CFMutableDictionaryRef	matchingDict;
        CFMutableDictionaryRef	propertyMatchDict;
        
        // Ethernet interfaces are instances of class kIOEthernetInterfaceClass. 
        // IOServiceMatching is a convenience function to create a dictionary with the key kIOProviderClassKey and 
        // the specified value.
        matchingDict = IOServiceMatching(kIOEthernetInterfaceClass);
    
        // Note that another option here would be:
        // matchingDict = IOBSDMatching("en0");
        // but en0: isn't necessarily the primary interface, especially on systems with multiple Ethernet ports.
            
        if (NULL == matchingDict) {
            printf("IOServiceMatching returned a NULL dictionary.\n");
        }
        else {
            // Each IONetworkInterface object has a Boolean property with the key kIOPrimaryInterface. Only the
            // primary (built-in) interface has this property set to TRUE.
            
            // IOServiceGetMatchingServices uses the default matching criteria defined by IOService. This considers
            // only the following properties plus any family-specific matching in this order of precedence 
            // (see IOService::passiveMatch):
            //
            // kIOProviderClassKey (IOServiceMatching)
            // kIONameMatchKey (IOServiceNameMatching)
            // kIOPropertyMatchKey
            // kIOPathMatchKey
            // kIOMatchedServiceCountKey
            // family-specific matching
            // kIOBSDNameKey (IOBSDNameMatching)
            // kIOLocationMatchKey
            
            // The IONetworkingFamily does not define any family-specific matching. This means that in            
            // order to have IOServiceGetMatchingServices consider the kIOPrimaryInterface property, we must
            // add that property to a separate dictionary and then add that to our matching dictionary
            // specifying kIOPropertyMatchKey.
                
            propertyMatchDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
    													  &kCFTypeDictionaryKeyCallBacks,
    													  &kCFTypeDictionaryValueCallBacks);
        
            if (NULL == propertyMatchDict) {
                printf("CFDictionaryCreateMutable returned a NULL dictionary.\n");
            }
            else {
                // Set the value in the dictionary of the property with the given key, or add the key 
                // to the dictionary if it doesn't exist. This call retains the value object passed in.
                CFDictionarySetValue(propertyMatchDict, CFSTR(kIOPrimaryInterface), kCFBooleanTrue); 
                
                // Now add the dictionary containing the matching value for kIOPrimaryInterface to our main
                // matching dictionary. This call will retain propertyMatchDict, so we can release our reference 
                // on propertyMatchDict after adding it to matchingDict.
                CFDictionarySetValue(matchingDict, CFSTR(kIOPropertyMatchKey), propertyMatchDict);
                CFRelease(propertyMatchDict);
            }
        }
        
        // IOServiceGetMatchingServices retains the returned iterator, so release the iterator when we're done with it.
        // IOServiceGetMatchingServices also consumes a reference on the matching dictionary so we don't need to release
        // the dictionary explicitly.
        kernResult = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, matchingServices);    
        if (KERN_SUCCESS != kernResult) {
            printf("IOServiceGetMatchingServices returned 0x%08x\n", kernResult);
        }
            
        return kernResult;
    }
        
    // Given an iterator across a set of Ethernet interfaces, return the MAC address of the last one.
    // If no interfaces are found the MAC address is set to an empty string.
    // In this sample the iterator should contain just the primary interface.
    static kern_return_t GetMACAddress(io_iterator_t intfIterator, UInt8 *MACAddress, UInt8 bufferSize)
    {
        io_object_t		intfService;
        io_object_t		controllerService;
        kern_return_t	kernResult = KERN_FAILURE;
        
        // Make sure the caller provided enough buffer space. Protect against buffer overflow problems.
    	if (bufferSize < kIOEthernetAddressSize) {
    		return kernResult;
    	}
    	
    	// Initialize the returned address
        bzero(MACAddress, bufferSize);
        
        // IOIteratorNext retains the returned object, so release it when we're done with it.
        while ((intfService = IOIteratorNext(intfIterator)))
        {
            CFTypeRef	MACAddressAsCFData;        
    
            // IONetworkControllers can't be found directly by the IOServiceGetMatchingServices call, 
            // since they are hardware nubs and do not participate in driver matching. In other words,
            // registerService() is never called on them. So we've found the IONetworkInterface and will 
            // get its parent controller by asking for it specifically.
            
            // IORegistryEntryGetParentEntry retains the returned object, so release it when we're done with it.
            kernResult = IORegistryEntryGetParentEntry(intfService,
    												   kIOServicePlane,
    												   &controllerService);
    		
            if (KERN_SUCCESS != kernResult) {
                printf("IORegistryEntryGetParentEntry returned 0x%08x\n", kernResult);
            }
            else {
                // Retrieve the MAC address property from the I/O Registry in the form of a CFData
                MACAddressAsCFData = IORegistryEntryCreateCFProperty(controllerService,
    																 CFSTR(kIOMACAddress),
    																 kCFAllocatorDefault,
    																 0);
                if (MACAddressAsCFData) {
                    CFShow(MACAddressAsCFData); // for display purposes only; output goes to stderr
                    
                    // Get the raw bytes of the MAC address from the CFData
                    CFDataGetBytes(MACAddressAsCFData, CFRangeMake(0, kIOEthernetAddressSize), MACAddress);
                    CFRelease(MACAddressAsCFData);
                }
                    
                // Done with the parent Ethernet controller object so we release it.
                (void) IOObjectRelease(controllerService);
            }
            
            // Done with the Ethernet interface object so we release it.
            (void) IOObjectRelease(intfService);
        }
            
        return kernResult;
    }
    
    int main(int argc, char *argv[])
    {
        kern_return_t	kernResult = KERN_SUCCESS;
        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
            {
                //这里输出本级mac地址
    			printf("This system's built-in MAC address is %02x:%02x:%02x:%02x:%02x:%02x.\n",
    					MACAddress[0], MACAddress[1], MACAddress[2], MACAddress[3], MACAddress[4], MACAddress[5]);
    		}
        }
        
        (void) IOObjectRelease(intfIterator);	// Release the iterator.
            
        return kernResult;
    }

        

    文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

  • 相关阅读:
    第三个Sprint冲刺第三天
    回答第1-17章
    阅读第13-17章
    阅读第10、11、12章
    阅读第8,9,10章
    作业5.2 5.3
    四则运算 测试与封装 5.1
    阅读第5-7章
    阅读1-5章
    我给队友做的汉堡包
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3067758.html
Copyright © 2020-2023  润新知