मैं एक तरह से चूक के आईपी पते पाने के लिए तलाश रहे हैं अपने आप को गेटवे। मैं इस पर ध्यान केंद्रित करने जा रहा हूं - मुझे डिफ़ॉल्ट राउटर का मैक पता प्राप्त करने की आवश्यकता नहीं थी, इसलिए यह केवल आंशिक रूप से ओपी के प्रश्न का उत्तर देता है।
मुझे नेटस्टैट आउटपुट को पार्स करने का विचार पसंद नहीं आया। साथ ही, आपको आईपी पते के आधार पर एक डिफ़ॉल्ट मार्ग नहीं मिल सकता है जो आपके मशीन पर एक इंटरफ़ेस है। आपके जैसे ही सीमा के भीतर कोई भी आईपी पता डिफ़ॉल्ट गेटवे हो सकता है - एकमात्र नियम यह है कि आपके आईपी और डिफ़ॉल्ट गेटवे दोनों को एक ही सबनेट का हिस्सा होना चाहिए।
एक और चीज जिसे मैं सुनिश्चित करना चाहता था, डिफ़ॉल्ट गेटवे का आईपी पता प्राप्त करना है, भले ही मेरे स्थानीय इंटरफेस में से एक से अधिक आईपी एड्रेस सौंपा गया हो (उदाहरण के लिए मैं वाईफ़ाई और वायर्ड से जुड़ा हूं एक ही समय में ईथरनेट, और दोनों इंटरफ़ेस ऊपर आईपी पते के साथ हैं)। मेरे आवेदन के लिए, इससे कोई फ़र्क नहीं पड़ता कि डिफ़ॉल्ट मार्ग किस इंटरफ़ेस के माध्यम से सेट किया गया है (यह en0, en1, ppp0 या कुछ भी हो सकता है)।
मुझे लगता है कि यह जानकारी प्राप्त करने के लिए सबसे अच्छा (और सबसे ऐप्पल-जैसे) तरीका सिस्टम कॉन्फ़िगरेशन फ्रेमवर्क का उपयोग करना है - इस धागे में उपरोक्त पोस्ट में दिए गए लिंक ने मुझे उस दिशा में इंगित किया है, लेकिन वास्तव में बहुत अधिक विवरण नहीं दिया इसका उपयोग कैसे करें, और मुझे एप्पल दस्तावेज बहुत उपयोगी नहीं मिला (कम से कम मेरे कौशल स्तर को ध्यान में रखते हुए)।
कृपया ध्यान दें कि मैं उद्देश्य-सी में बहुत अनुभवी नहीं हूं - मैं एक ऐप लिखने के बीच में हूं जिसे मुझे खुद की जरूरत है (और जो मुझे नहीं मिला), और उस ऐप के लिए मुझे बस आईपी की आवश्यकता है डिफ़ॉल्ट गेटवे का पता।
तो - यहाँ मैं अपने अनुप्रयोग में क्या कर रहा है, और यह काम करने ठीक लग रहा है (प्लस बहुत कम और अधिकांश अन्य समाधान मैं अब तक पाया की तुलना में सरल है:
- (NSString *)defaultRouter {
SCDynamicStoreRef ds = SCDynamicStoreCreate(kCFAllocatorDefault, CFSTR("myapp"), NULL, NULL);
CFDictionaryRef dr = SCDynamicStoreCopyValue(ds, CFSTR("State:/Network/Global/IPv4"));
CFStringRef router = CFDictionaryGetValue(dr, CFSTR("Router"));
NSString *routerString = [NSString stringWithString:(__bridge NSString *)router];
CFRelease(dr);
CFRelease(ds);
return routerString;
}
कृपया ध्यान दें कि में मेरा ऐप, उपर्युक्त एक बड़ी विधि का हिस्सा है (मेरे पास वास्तव में एक डिफ़ॉल्ट राउटर नहीं है: वहां विधि)। इसके अलावा, मैंने ब्रेवटी के लिए कुछ चेक (जैसे [राउटरस्ट्रिंग लम्बाई] और इतने पर) छोड़ा है।
उम्मीद है कि किसी को यह उपयोगी लगेगा। कृपया उपरोक्त कोड में होने वाली किसी भी त्रुटि को ठीक करने के लिए भी स्वतंत्र महसूस करें - मैं अभी भी एक नौसिखिया हूं!
पीएस।
MacBook:~$ scutil
> show State:/Network/Global/IPv4
<dictionary> {
PrimaryInterface : en1
PrimaryService : <service_id>
Router : <ipv4_address>
}
> show State:/Network/Global/IPv6
<dictionary> {
PrimaryInterface : en1
PrimaryService : <service_id>
Router : <ipv6_address>
}
ifa-> ifa_dstaddr प्रसारण पता है, जो "255 के" बताते है: मैं क्या जब मैं 'scutil' के उत्पादन, जो सिस्टम विन्यास फ्रेमवर्क खुद का उपयोग करता है की जाँच की खोज करने के लिए की एक विचार मिल गया। – Bill
यह लिंक देखें http://stackoverflow.com/questions/6530322/fetching-ip-address-of-router-to-which-iphone-is-connected –