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
11
A
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!
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);
Ş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
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
@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