2010-01-07 14 views
11

IP adresi ve iPhone üzerindeki WiFi bağlantısının IP adresini belirlememi sağlayan bir kod var, ancak Subnet Mask ve Router adresinin nasıl alınacağını anlayamıyorum bağlantı. Beni buraya doğru yönlendiren var mı?IPhone WiFi Alt Ağ Maskesi ve Router Adresi

+0

Şu anda ICMP (yönlendirici istekleri) veya ICMP'ye (eko isteği, 1 atlama, yanıtları gör) bakıyorum. Yönlendiricimin yönlendirici istek ICMP isteklerine yanıt verdiğini düşünmüyorum; ikinci yöntem, traceroute'un nasıl çalıştığını (inanıyorum). Başka bir seçenek, bir DHCP API'si (Iphone'da bulamıyor) veya bilgi için DHCP paketleri gönderiyor (çünkü benim durumumda her zaman DHCP olacak ve yönlendirici her zaman DHCP sunucusu olacaktır). – Bill

+0

FYI - iPhone uygulaması, DLink Home NAT yönlendiricilerindeki güvenlik/erişim ilkelerini kontrol etmek için tasarlanmıştır (Web arabirimi kullanmak acıdır); Kullanıcı tipini yönlendiricinin adresinde yapmaktan kaçınmaya çalışıyorum. Şifre sağlamalılar, bu yüzden burada iyi bir çözüm bulamıyorsam çok da büyük bir şey değil. – Bill

+0

@bvanderw - WiFi bağlantısının MAC adresini belirlemek için kodunuza veya belgelere bir bağlantı gönderebilir misiniz? Onu takip edemedim. – Ciaran

cevap

13

getifaddrs numaralı telefonu arayarak bu bilgileri alabilirsiniz. (Ben iPhone'un IP adresini anlamaya benim bir uygulamasında bu işlevi kullanın.) Bu, alt ağ maskesini alır

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 için.

Bu, tüm eski okul UNIX ağ iletişimi şeyleri, hangi arabirimlerin WiFi bağlantısı olduğunu seçmek zorundasınız (geridönüş arabirimi gibi diğer şeyler de orada olacak). Sonra IP adreslerini okumak istediğiniz formata bağlı olarak inet_ntoa() gibi işlevleri kullanmanız gerekebilir. Kötü değil, sadece can sıkıcı ve çirkin. İyi eğlenceler!

+0

ifa-> ifa_dstaddr yayın adresi, yönlendirici adresi değil. – Bill

+2

@Bill: cevabımı düzelttim, lütfen reddetmenizi gözden geçirin. – benzado

+0

ifaddrs.h dosyasını içe aktarmanız gerekecek –

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); 
İlgili konular