আমি কীভাবে প্রোগ্রামে কোনও আইফোনের ম্যাক ঠিকানা পেতে পারি


144

কীভাবে প্রোগ্রামিয়ালি আইফোনের ম্যাক ঠিকানা এবং আইপি ঠিকানা পাবেন?


আমি আইফোন অ্যাপ্লিকেশনটিতে ম্যাক অ্যাড্রেস এবং আইপি অ্যাড্রেসটি প্রোগ্রামগতভাবে পেতে চাই।

ওয়াইফাই ম্যাকের ঠিকানা? নাকি ব্লুথুথ? অনেক ম্যাক ঠিকানা আছে।
mskw

11
আইওএস 7 থেকে শুরু করে, 02:00:00:00:00:00আপনি কোনও ডিভাইসে ম্যাক ঠিকানা চাইলে সিস্টেমটি সর্বদা মানটি দেয়। আমার উত্তর নীচে পরীক্ষা করুন।
হেজাজি

IOS এর জন্য এবং আপ (আজ পর্যন্ত) পড়ুন stackoverflow.com/questions/11836225/...
rptwsthi

উত্তর:


114

দ্রষ্টব্য iOS7 হিসাবে, আপনি আর ডিভাইস ম্যাক ঠিকানা পুনরুদ্ধার করতে পারবেন না। প্রকৃত ম্যাকের পরিবর্তে একটি স্থির মান ফিরে আসবে


কিছুক্ষণ আগে আমি হোঁচট খেয়েছি। থেকে মূলত এখানে আমি এটি একটি বিট এবং পরিষ্কার জিনিষ আপ রুপান্তরিত করা হয়েছে।

আইপিএড্রেস।
আইপিএড্রেস.সি

এবং এটি ব্যবহার করার জন্য

InitAddresses();
GetIPAddresses();
GetHWAddresses();

int i;
NSString *deviceIP = nil;
for (i=0; i<MAXADDRS; ++i)
{
    static unsigned long localHost = 0x7F000001;        // 127.0.0.1
    unsigned long theAddr;

    theAddr = ip_addrs[i];

    if (theAddr == 0) break;
    if (theAddr == localHost) continue;

    NSLog(@"Name: %s MAC: %s IP: %s\n", if_names[i], hw_addrs[i], ip_names[i]);

        //decided what adapter you want details for
    if (strncmp(if_names[i], "en", 2) == 0)
    {
        NSLog(@"Adapter en has a IP of %s", ip_names[i]);
    }
}

অ্যাডাপ্টারের নামগুলি সিমুলেটর / ডিভাইসের পাশাপাশি ডিভাইসে ওয়াইফাই বা সেল নির্ভর করে।


আমি কেবল আশ্চর্য হয়েছি যে এটি জেনেরিক ওএস এক্স পদ্ধতির চেয়ে আলাদা কিনা (আমি জিজ্ঞাসা করছি কারণ আমি একজন ম্যাক এন 100 বি)
তামাস সিজনে

2
@ এবিসি: আমি আপনাকে সে সম্পর্কে আরও একটি প্রশ্ন পোস্ট করার পরামর্শ দিচ্ছি। অন্য কোনও প্রশ্নের জন্য মন্তব্যে এটি কবর দেওয়ার পরে আরও ভাল হন।
পাইজামসাম

1
তবে ইথার_টোয়ার কল কি? এটি প্রাইভেট এপিআই না তাই না?
স্টিগি

1
@ নিকটেসলা আমি নিশ্চিতভাবে মন্তব্য করতে পারি না, তবে এটি কেবল বেসিক নেটওয়ার্কিং কল করার পরে আমি কোনও সমস্যা দেখতে পাচ্ছি না। যদিও এটি আইওএস 5 থেকে ইউডিআইডি অপসারণের সাথে ম্যাক অ্যাড্রেস পেয়েছে এবং এটি কোনও একক বিকল্প অনন্য শনাক্তকারী বিকাশের জন্য ব্যবহার করা ভবিষ্যতের কোনও সময়ে আপেল দ্বারা তদন্তের অধীনে আসতে পারে said
পাইজামসাম

1
সংক্রান্ত ether_ntoa: সতর্কবাণী, খুঁজে বার করো stackoverflow.com/a/13412265/88597
ohho

45

আপডেট: এটি আইওএস-এ কাজ করবে না You আপনার এএসআইডিটিফায়ার ম্যানেজারটি ব্যবহার করা উচিত ।


মোবাইল ডেভেলপার টিপস ওয়েবসাইটে আরও পরিষ্কার সমাধান :

#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>

...

- (NSString *)getMacAddress
{
  int                 mgmtInfoBase[6];
  char                *msgBuffer = NULL;
  size_t              length;
  unsigned char       macAddress[6];
  struct if_msghdr    *interfaceMsgStruct;
  struct sockaddr_dl  *socketStruct;
  NSString            *errorFlag = NULL;

  // 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";
  else
  {
    // Get the size of the data available (store in len)
    if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) 
      errorFlag = @"sysctl mgmtInfoBase failure";
    else
    {
      // Alloc memory based on above call
      if ((msgBuffer = malloc(length)) == NULL)
        errorFlag = @"buffer allocation failure";
      else
      {
        // Get system information, store in buffer
        if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
          errorFlag = @"sysctl msgBuffer failure";
      }
    }
  }

  // Befor going any further...
  if (errorFlag != NULL)
  {
    NSLog(@"Error: %@", errorFlag);
    return errorFlag;
  }

  // Map msgbuffer to interface message structure
  interfaceMsgStruct = (struct if_msghdr *) msgBuffer;

  // Map to link-level socket structure
  socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);

  // Copy link layer address data in socket structure to an array
  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]];
  NSLog(@"Mac Address: %@", macAddressString);

  // Release the buffer memory
  free(msgBuffer);

  return macAddressString;
}

আইফোনডিভলপার্টিপসের পরিবর্তে মোবাইল ডেভেলপ্টিপটিতে লিঙ্কটি পরিবর্তন করুন
এসইজি

অ্যাপল আইওএস 7-তে এটি খুব সম্ভবত ভেঙে যাওয়ার সম্ভাবনা রয়েছে ... এবং আনুষ্ঠানিক অ্যাপল দেব ফোরাম ব্যতীত জাহাজী না পৌঁছানো পর্যন্ত আমরা প্রকাশ্যে এ সম্পর্কে মন্তব্য করতে পারব না।
গাবে

3
এটি আইওএস 7 এর সাথে আমার আইফোন 5 এ কাজ করে নি। এটি আমাকে দেয়: 02: 00: 00: 00: 00: 00 যা সঠিক নয়।
সুজার্ড পারফার্স

3
@ ব্রেন্ডেন আপনি আর iOS7- এ পাবলিকাপিআই ব্যবহার করে নেটওয়ার্ক ম্যাক ঠিকানা পেতে পারবেন না। সুতরাং, আপনার যদি অনন্য আইডি প্রয়োজন হয় তবে আপনার ব্যবহার করা উচিতIdentifierManager
আর্টফিল

2
আইওএস Under এর আওতায় @ সুজারডফরচার্স আপনি 02:00:00:00:00:00অ্যাপল দ্বারা গোপনীয়তা সতর্কতা হিসাবে সর্বদা একই ঠিকানার চেয়ে পাবেন ।
বেসিল বাউরেক

31

আমি ওয়াইফাই সক্ষম কিনা তা নির্বিশেষে ঠিকানাটি ফেরত দেওয়ার জন্য আমি কিছু চাইছিলাম, সুতরাং নির্বাচিত সমাধানটি আমার পক্ষে কার্যকর হয়নি। আমি কিছু কল করার পরে কিছু ফোরামে পেলাম আমি অন্য কলটি ব্যবহার করেছি। আমি নিম্নলিখিত দিয়ে শেষ (আমার মরিচা সি ক্ষমা):

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <net/if_dl.h>
#include <ifaddrs.h>


char*  getMacAddress(char* macAddress, char* ifName) {

int  success;
struct ifaddrs * addrs;
struct ifaddrs * cursor;
const struct sockaddr_dl * dlAddr;
const unsigned char* base;
int i;

success = getifaddrs(&addrs) == 0;
if (success) {
    cursor = addrs;
    while (cursor != 0) {
        if ( (cursor->ifa_addr->sa_family == AF_LINK)
            && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == IFT_ETHER) && strcmp(ifName,  cursor->ifa_name)==0 ) {
            dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
            base = (const unsigned char*) &dlAddr->sdl_data[dlAddr->sdl_nlen];
            strcpy(macAddress, ""); 
            for (i = 0; i < dlAddr->sdl_alen; i++) {
                if (i != 0) {
                    strcat(macAddress, ":");
                }
                char partialAddr[3];
                sprintf(partialAddr, "%02X", base[i]);
                strcat(macAddress, partialAddr);

            }
        }
        cursor = cursor->ifa_next;
    }

    freeifaddrs(addrs);
}    
return macAddress;
}

এবং তারপরে আমি এটি নীচে en0 এর জন্য জিজ্ঞাসা করব :

char* macAddressString= (char*)malloc(18);
NSString* macAddress= [[NSString alloc] initWithCString:getMacAddress(macAddressString, "en0")
                                              encoding:NSMacOSRomanStringEncoding];
free(macAddressString);

9
আমাকে # ডিফাইন যোগ করতে হয়েছিল IFT_ETHER 0x6
teedyay

এটি আমার জন্য কাজ করে না ... বলে যদি ifName পাশাপাশি ম্যাক্যাড্রেস ভেরিয়েবল ঘোষিত না হয়।
বাগফিক্সার

উপরের কলিং কোডটি ফাঁস হবে। বিনামূল্যে (macAddressString); উপরের কলিং পদ্ধতি থেকে ফিরে আসার আগে। এছাড়াও, উপরের কলিং কোডটি অন্য কোনও পদ্ধতিতে থাকলে ম্যাকএড্রেসটি স্বতঃপ্রযুক্ত হওয়া উচিত।

4
স্পষ্টরূপে, কোডটি নিজেই ফাঁস হবে না, মন্তব্যকারী শেষের দিকে কলিং স্নিপেটের বিষয়ে কথা বলছিল, যেখানে আমি তাদের দুটি মুক্ত না করে দুটি স্ট্রিং বরাদ্দ করি।
শিপমাস্টার

1
আমি এটি একটি দুর্দান্ত উদ্দেশ্য-সি পদ্ধতিতে রেখেছি
wsidell

23

আইওএস 7 থেকে শুরু করে, 02:00:00:00:00:00আপনি কোনও ডিভাইসে ম্যাক ঠিকানা চাইলে সিস্টেমটি সর্বদা মানটি দেয়।

আইওএস 7 এবং তার পরে, আপনি যদি কোনও আইওএস ডিভাইসের ম্যাক ঠিকানা চেয়ে থাকেন, সিস্টেমটি 02: 00: 00: 00: 00: 00 প্রদান করে। আপনার যদি ডিভাইসটি সনাক্ত করতে হয় তবে পরিবর্তে ইউআইডিভাইসির পরিচয়কারী ফরভেন্ডার সম্পত্তি ব্যবহার করুন। (যে অ্যাপ্লিকেশনগুলিতে তাদের নিজস্ব বিজ্ঞাপনের জন্য সনাক্তকারী প্রয়োজন তাদের পরিবর্তে এএসআইডিটিফায়ার ম্যানেজারের বিজ্ঞাপন পরিচয়দাতা সম্পত্তিটি বিবেচনা করা উচিত)) "

তথ্যসূত্র: রিলিজ নোট


এপিআই-এ এই হ্রাস সম্পর্কে সত্যিই দুর্দান্ত তা হ'ল এটি এখনও সিমুলেটারটিতে সঠিকভাবে কাজ করে এবং কেবলমাত্র এই মুহুর্তে হার্ডওয়্যারে।
জন নাই

12

এই সম্পর্কে বিভিন্ন সমাধান আছে, কিন্তু আমি একটি সম্পূর্ণ জিনিস খুঁজে পেল না। সুতরাং আমি এর জন্য আমার নিজস্ব সমাধান তৈরি করেছি:

nicinfo

ব্যবহারবিধি :

NICInfoSummary* summary = [[[NICInfoSummary alloc] init] autorelease];

// en0 is for WiFi 
NICInfo* wifi_info = [summary findNICInfo:@"en0"];

// you can get mac address in 'XX-XX-XX-XX-XX-XX' form
NSString* mac_address = [wifi_info getMacAddressWithSeparator:@"-"];

// ip can be multiple
if(wifi_info.nicIPInfos.count > 0)
{
    NICIPInfo* ip_info = [wifi_info.nicIPInfos objectAtIndex:0];
    NSString* ip = ip_info.ip;
    NSString* netmask = ip_info.netmask;
    NSString* broadcast_ip = ip_info.broadcastIP;
}
else
{
    NSLog(@"WiFi not connected!");
}

খুব সুন্দর এবং দরকারী বর্গ! ভাল কাজ! যাইহোক, আপনি উভয় ক্লাসে [সুপার ডেলোক] মিস করেছেন এবং একটি লাইব্রেরি অন্তর্ভুক্ত করতে ভুলে গেছেন, যা এক্সকোডে সতর্কতার দিকে পরিচালিত করে। Patched সংস্করণ এখানে পাওয়া যাবে: raptor.hk/download/NICInfo_raptor_patched.zip
Raptor

এই ফলাফলটি পেয়ে ম্যাকের ঠিকানা: 02: 00: 00: 00: 00: 00
স্টালিন পুস্পরাজ

1
হ্যাঁ. অ্যাপল আইওএস
::৪৯

5

এটি দেখতে বেশ সুন্দর সমাধান হিসাবে দেখায়: ইউআইডিভাইস বিআইডিটিফায়ার

// Return the local MAC addy
// Courtesy of FreeBSD hackers email list
// Accidentally munged during previous update. Fixed thanks to erica sadun & 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");
        free(buf);
        return NULL;
    }

    ifm = (struct if_msghdr *)buf;
    sdl = (struct sockaddr_dl *)(ifm + 1);
    ptr = (unsigned char *)LLADDR(sdl);
    NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", 
                           *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
    free(buf);

    return outstring;
}

1
আমি আপনার সমাধানটি ব্যবহার করি, 99% কেস প্রত্যাশিত হিসাবে ভাল কাজ করে তবে 1% হার ম্যাক ঠিকানা পেতে পারে না, অ্যাপস্টোরের ব্যবহারকারীদের দ্বারা রিপোর্ট করা NULL ফেরত দেয়। এখনও প্রজননযোগ্য পদক্ষেপগুলি পান না, আপনি এটি পেয়েছেন? ধন্যবাদ.
jianhu

আমি এখনও কোনও সমস্যা লক্ষ্য করিনি, তবে আমি এক নজর রাখব!
গ্রান্টল্যান্ড চিউ

@ জিয়ানহুয়ার মন্তব্য অনুসরণ করে: আমরা কেবলমাত্র এমন এক ব্যবহারকারীের কাছ থেকে প্রতিবেদন পেয়েছি যিনি মূলত অ্যাপটি ব্যবহার করতে পারবেন না কারণ এই কোডটি তার ডিভাইসের জন্য বাতিল করে দেয় (আমরা প্রতিটি সার্ভার কলকে প্রমাণীকরণের জন্য সনাক্তকারী ব্যবহার করি)।
samvermette

আইওএস সংস্করণ 5.0.1 সহ আইফোন 4 এস এ ব্যর্থ হয়েছে অবশ্যই এটি কেবলমাত্র কিছু বিশেষ অনুষ্ঠানে on
jianhu

5

এখন আইওএস 7 ডিভাইস - সর্বদা 02: 00: 00: 00: 00: 00 এর ম্যাক ঠিকানা ফেরত চলেছে।

সুতরাং আরও ভাল ব্যবহার করুন [ইউআইডিভাইস আইডেন্টিফায়ার ফরভেন্ডর]।

অ্যাপ্লিকেশন নির্দিষ্ট অনন্য কী পেতে এই পদ্ধতিটিকে কল করা আরও ভাল

বিভাগ আরও উপযুক্ত হবে

"ইউআইডিওয়াইস + আইডেন্টিফায়ার.ইচ" আমদানি করুন

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

অনন্য ঠিকানা পেতে এখন উপরের পদ্ধতিতে কল করুন

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

NSLog(@"%@",like_UDID);

এই আইডেন্টিফায়ারটি কি একই অ্যাপ্লিকেশনটির একাধিক ইনস্টলেশনের জন্য ডিভাইস অনুযায়ী সামঞ্জস্য হতে পারে?
সামসম

4

@ গ্রান্টল্যান্ড এই "চমত্কার ক্লিন সলিউশন" আইফোনের ডেভেলপার টিপস সমাধানের তুলনায় আমার নিজের উন্নতির সাথে একই দেখাচ্ছে।

আপনি আমার পদক্ষেপটি এখানে দেখতে পারেন: 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
{
    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]];
        NSLog(@"Mac Address: %@", macAddressString);

        // Release the buffer memory
        free(msgBuffer);

        return macAddressString;
    }

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

    return nil;
}

এবং আমি বুঝতে পারি না কেন আমি নিজের উত্তরগুলির জন্য মন্তব্যগুলি যুক্ত করতে পারি তবে অন্যের উত্তরের জন্য নয়? : /
সিওর

1
কারণ আপনার খ্যাতি যথেষ্ট বেশি নয়।
হনুস

ধন্যবাদ, দেখে মনে হচ্ছে কিছু লোক এই সমাধানের নিজস্ব রূপগুলি নিয়ে এসেছে: ios.biomsoft.com/2011/11/07/determine-mac-address
josh-fuggle

1

আইওএস .0.০ বা তারপরের পরে চলমান ডিভাইসগুলিতে এটি আর সম্ভব নয় , এভাবে সুইফটে ম্যাক ঠিকানা পেতে অনুপলব্ধ।

অ্যাপল যেমন বলেছে:

আইওএস 7 এবং তার পরে, আপনি যদি কোনও আইওএস ডিভাইসের ম্যাক ঠিকানা চেয়ে থাকেন, সিস্টেমটি 02: 00: 00: 00: 00: 00 প্রদান করে। আপনার যদি ডিভাইসটি সনাক্ত করতে হয় তবে পরিবর্তে ইউআইডিভাইসির পরিচয়কারী ফরভেন্ডার সম্পত্তি ব্যবহার করুন। (যে অ্যাপ্লিকেশনগুলিতে তাদের নিজস্ব বিজ্ঞাপনের উদ্দেশ্যে সনাক্তকারী প্রয়োজন তাদের পরিবর্তে এএসআইডিটিফায়ার ম্যানেজারের বিজ্ঞাপন পরিচয়দাতা সম্পত্তিটি বিবেচনা করা উচিত))


0
#import <sys/socket.h>
#import <net/if_dl.h>
#import <ifaddrs.h>
#import <sys/xattr.h>
#define IFT_ETHER 0x6

...

- (NSString*)macAddress
{
    NSString* result = nil;

    char* macAddressString = (char*)malloc(18);
    if (macAddressString != NULL)
    {
        strcpy(macAddressString, "");

        struct ifaddrs* addrs = NULL;
        struct ifaddrs* cursor;

        if (getifaddrs(&addrs) == 0)
        {
            cursor = addrs;

            while (cursor != NULL)
            {
                if ((cursor->ifa_addr->sa_family == AF_LINK) && (((const struct sockaddr_dl*)cursor->ifa_addr)->sdl_type == IFT_ETHER) && strcmp("en0", cursor->ifa_name) == 0)
                {
                    const struct sockaddr_dl* dlAddr = (const struct sockaddr_dl*) cursor->ifa_addr;
                    const unsigned char* base = (const unsigned char*)&dlAddr->sdl_data[dlAddr->sdl_nlen];

                    for (NSInteger index = 0; index < dlAddr->sdl_alen; index++)
                    {
                        char partialAddr[3];

                        sprintf(partialAddr, "%02X", base[index]);
                        strcat(macAddressString, partialAddr);
                    }
                }

                cursor = cursor->ifa_next;
            }

        }

        result = [[[NSString alloc] initWithUTF8String:macAddressString] autorelease];

        free(macAddressString);
    }

    return result;
}

0

আইওএস 6 এ ডিভাইসের অনন্য শনাক্তকারীর উপর ভিত্তি করে একটি অনন্য স্ট্রিং তৈরি করতে:

#import <AdSupport/ASIdentifierManager.h>

NSString *uniqueString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog(@"uniqueString: %@", uniqueString);

1
এটি জিজ্ঞাসিত প্রশ্নের সাথে সম্পর্কিত কীভাবে?
ভ্যালারি ভ্যান

1
বেশিরভাগ ক্ষেত্রে ডিভাইসটিকে অনন্যরূপে সনাক্ত করতে ম্যাক ঠিকানা প্রয়োজন। পরিবর্তে, আপনি এই সমাধানটি ব্যবহার করতে পারেন।
ডেনিস কুতলুবায়েভ

0

এই প্রশ্নগুলির অনেকগুলি কেবল ম্যাকের ঠিকানাটিকে সম্বোধন করে। আপনার যদি আইপি ঠিকানার প্রয়োজন হয় তবে আমি কেবল এটি লিখেছি, কিছু কাজের প্রয়োজন হতে পারে তবে আমার মেশিনে ভাল কাজ করছে বলে মনে হচ্ছে ...

- (NSString *)getLocalIPAddress
{
    NSArray *ipAddresses = [[NSHost currentHost] addresses];
    NSArray *sortedIPAddresses = [ipAddresses sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    numberFormatter.allowsFloats = NO;

    for (NSString *potentialIPAddress in sortedIPAddresses)
    {
        if ([potentialIPAddress isEqualToString:@"127.0.0.1"]) {
            continue;
        }

        NSArray *ipParts = [potentialIPAddress componentsSeparatedByString:@"."];

        BOOL isMatch = YES;

        for (NSString *ipPart in ipParts) {
            if (![numberFormatter numberFromString:ipPart]) {
                isMatch = NO;
                break;
            }
        }
        if (isMatch) {
            return potentialIPAddress;
        }
    }

    // No IP found
    return @"?.?.?.?";
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.