web-dev-qa-db-fra.com

Comment obtenir l'adresse MAC d'un périphérique iOS par programme

Comment obtenir le code MAC d'un périphérique iOS par programme dans mon application?

16
iPhoneDeveloper

Maintenant, les appareils iOS 7 - retournent toujours retournent une adresse MAC de 02: 00: 00: 00: 00: 00.

Donc, mieux utiliser [UIDevice identifierForVendor]

il est donc préférable d'appeler cette méthode pour obtenir une clé unique spécifique à app

La catégorie sera plus appropriée

#import "UIDevice+Identifier.h"

- (NSString *) identifierForVendor1
{
    if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
        return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    }
    return @"";
}

Appelez maintenant la méthode ci-dessus pour obtenir une adresse unique

NSString *like_UDID=[NSString stringWithFormat:@"%@",
                [[UIDevice currentDevice] identifierForVendor1]];

NSLog(@"%@",like_UDID);
17
Jøhn Nârrøw

Vous pouvez obtenir l'adresse MAC à l'aide de la fonction suivante:

+(NSString *)getMacAddress
{
    int                 mgmtInfoBase[6];
    char                *msgBuffer = NULL;
    NSString            *errorFlag = NULL;
    size_t              length;

    // 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) 
        errorFlag = @"if_nametoindex failure";
    // Get the size of the data available (store in len)
    else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) 
        errorFlag = @"sysctl mgmtInfoBase failure";
    // Alloc memory based on above call
    else if ((msgBuffer = malloc(length)) == NULL)
        errorFlag = @"buffer allocation failure";
    // Get system information, store in buffer
    else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
    {
        free(msgBuffer);
        errorFlag = @"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
        NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
                                      macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]];
        if(IsDEBUG) NSLog(@"Mac Address: %@", macAddressString);

        // Release the buffer memory
        free(msgBuffer);

        return macAddressString;
    }

    // Error...
    if(IsDEBUG) NSLog(@"Error: %@", errorFlag);

    return errorFlag;
}

Mais comme il l'a dit #Randomclik, l'adresse mac n'est pas disponible à partir de iOS 7 et plus.

forme Apple:

Dans iOS 7 et versions ultérieures, si vous demandez l'adresse MAC d'un périphérique iOS, le système renvoie la valeur 02: 00: 00: 00: 00: 00. Si vous devez identifier le périphérique, utilisez plutôt la propriété identifierForVendor de UIDevice. (Les applications qui ont besoin d'un identifiant pour leurs propres objectifs publicitaires doivent utiliser plutôt la propriété advertisingIdentifier de ASIdentifierManager.)

link: https://developer.Apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#// Apple_ref/doc/uid/TP40013162-SW1

Conversation sur l'adresse MAC:

Comment puis-je obtenir par programme l'adresse MAC d'un iphone

10
Guy Kahlon

Il semble que dans iOS 7 et versions ultérieures, obtenir une adresse MAC ne fonctionnera pas. Regardez Quoi de neuf sur le document iOS d’Apple. (Section API obsolètes.)

2
Randomclik

tout le monde est bien avisé d'utiliser la méthode officielle ios 7 et d'utiliser [UIDevice identifierForVendor]

http://developer.Apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

Et pensez aussi à la migration d'anciennes hypothèses.

1
Karsten

Vous pouvez l'obtenir en combinant les deux réponses suivantes, je suppose. 

Tout d’abord, recherchez l’ip du périphérique en utilisant les éléments suivants:

https://stackoverflow.com/a/30754194/1089206

Deuxièmement, recherchez le MAC de cette adresse en utilisant les éléments suivants:

https://stackoverflow.com/a/31246085/1089206

Je vais l'essayer maintenant et je vous ferai savoir comment ça se passe.

0
sambavadekar