2010-01-07 18 views
11

मेरे पास कोड है जो मुझे आईएसी पर वाईएसीआई कनेक्शन के मैक पते और आईपी पते को निर्धारित करने की अनुमति देता है, लेकिन मैं यह नहीं समझ सकता कि सबनेट मास्क और राउटर पता कैसे प्राप्त करें संपर्क। क्या कोई मुझे सही दिशा में इंगित कर सकता है?आईफोन वाईफाई सबनेट मास्क और राउटर पता

+0

अभी मैं आईसीएमपी (राउटर आग्रह) या आईसीएमपी (गूंज अनुरोध, 1 हॉप, कौन जवाब देता हूं) देख रहा हूं। मुझे नहीं लगता कि मेरा राउटर राउटर आग्रह आईसीएमपी अनुरोधों का जवाब देता है; दूसरी विधि यह है कि कैसे traceroute काम करता है (मुझे विश्वास है)। एक अन्य विकल्प एक डीएचसीपी एपीआई होगा (आईफोन पर एक नहीं मिल सकता है) या जानकारी के लिए डीएचसीपी पैकेट भेज रहा है (क्योंकि मेरे मामले में हमेशा डीएचसीपी होगा और राउटर हमेशा डीएचसीपी सर्वर भी होगा)। – Bill

+0

एफवाईआई - आईफोन एप्लिकेशन को डीएलआईएनएन होम एनएटी राउटर पर सुरक्षा/एक्सेस नीतियों को नियंत्रित करने के लिए डिज़ाइन किया गया है (वेब ​​इंटरफेस का उपयोग करने के लिए दर्द है); मैं बस राउटर के पते में उपयोगकर्ता प्रकार बनाने से बचने की कोशिश कर रहा हूं। उन्हें पासवर्ड प्रदान करना होगा, इसलिए यदि कोई अच्छा समाधान नहीं मिल रहा है तो कोई बड़ा सौदा नहीं है। – Bill

+0

@bvanderw - क्या आप वाईफाई कनेक्शन के मैक पते को निर्धारित करने के लिए अपने कोड या दस्तावेज के लिए एक लिंक पोस्ट कर सकते हैं? मैं इसे ट्रैक करने में सक्षम नहीं हूं। – Ciaran

उत्तर

13

आप getifaddrs पर कॉल करके वह जानकारी प्राप्त कर सकते हैं। (मैं मेरा एक अनुप्रयोग में इस सुविधा का उपयोग iPhone के आईपी पते यह पता लगाने की।)

struct ifaddrs *ifa = NULL, *ifList; 
getifaddrs(&ifList); // should check for errors 
for (ifa = ifList; ifa != NULL; ifa = ifa->ifa_next) { 
    ifa->ifa_addr // interface address 
    ifa->ifa_netmask // subnet mask 
    ifa->ifa_dstaddr // broadcast address, NOT router address 
} 
freeifaddrs(ifList); // clean up after yourself 

यह आपको सबनेट मास्क हो जाता है; the router address, see this question के लिए।

यह पुरानी स्कूल यूनिक्स नेटवर्किंग सामग्री है, आपको यह चुनना होगा कि कौन से इंटरफेस वाईफाई कनेक्शन हैं (लूपबैक इंटरफ़ेस जैसी अन्य सामग्री भी वहां होगी)। फिर आपको आईपी पते को पढ़ने के लिए इच्छित प्रारूप के आधार पर inet_ntoa() जैसे फ़ंक्शंस का उपयोग करना पड़ सकता है। यह बुरा नहीं है, सिर्फ थकाऊ और बदसूरत। मज़े करो!

+0

ifa-> ifa_dstaddr प्रसारण पता है, राउटर पता नहीं। – Bill

+2

@ बिल: मेरा जवाब तय करें, कृपया अपने डाउनवोट पर पुनर्विचार करें। – benzado

+0

आपको ifaddrs.h आयात करने की आवश्यकता होगी –

3
NSString *address = @"error"; 
NSString *netmask = @"error"; 
struct ifaddrs *interfaces = NULL; 
struct ifaddrs *temp_addr = NULL; 
int success = 0; 

// retrieve the current interfaces - returns 0 on success 
success = getifaddrs(&interfaces); 
if (success == 0) 
{ 
    // Loop through linked list of interfaces 
    temp_addr = interfaces; 
    while(temp_addr != NULL) 
    { 
     if(temp_addr->ifa_addr->sa_family == AF_INET) 
     { 
      // Check if interface is en0 which is the wifi connection on the iPhone 

      if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
      { 
       // Get NSString from C String 
       address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
       netmask = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)]; 
      } 
     } 

     temp_addr = temp_addr->ifa_next; 
    } 
} 

// Free memory 
freeifaddrs(interfaces); 
NSLog(@"address %@", address); 
NSLog(@"netmask %@", netmask); 
संबंधित मुद्दे