2017-06-23 2 views
0

Ich bekomme auf diese Weise IP-Adresse des Telefons.So erhalten Sie die IP-Adresse, wenn Sie mit den mobilen Daten verbunden sind swift3

func getIPAddress() -> String? { 
    var address : String? 

    var ifaddr : UnsafeMutablePointer<ifaddrs>? = nil 
    if getifaddrs(&ifaddr) == 0 { 

     var ptr = ifaddr 
     while ptr != nil { 
      defer { ptr = ptr?.pointee.ifa_next } 

      let interface = ptr?.pointee 

      let addrFamily = interface?.ifa_addr.pointee.sa_family 
      if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) { 

       if let name:String = String(cString: (interface?.ifa_name)!), name == "en0" { 

        var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) 
        getnameinfo(interface?.ifa_addr, socklen_t((interface?.ifa_addr.pointee.sa_len)!), 
           &hostname, socklen_t(hostname.count), 
           nil, socklen_t(0), NI_NUMERICHOST) 
        address = String(cString: hostname) 
       } 
      } 
     } 
     freeifaddrs(ifaddr) 
    } 

    return address 
} 

Aber das zurückgibt, wenn nur mit einem WLAN verbunden. Wie bekomme ich eine IP-Adresse, wenn ich mit mobilen Daten verbunden bin?

+1

Dieser Code [sieht vertraut] (https://Stackoverflow.com/a/30754194/1187415)! - Beachten Sie, dass explizit nach der Schnittstelle "en0" gesucht wird (dies ist die WiFi-Schnittstelle auf iOS-Geräten). Eine Liste der * all * Schnittstellenadressen finden Sie unter https://stackoverflow.com/a/25627545/1187415. –

+0

Mögliches Duplikat von [Wie bekomme ich IP-Adresse in swift] (https://stackoverflow.com/questions/25626117/how-to-get-ip-address-in-swift). –

+0

@MartinR Danke für den Kommentar yeas kann ich jetzt auch die Adresse wenn ich auf mobile Daten bin. Aber ich habe ein kleines Problem. wenn ich an wifi anschließe, holt es IPaddress als 1. Wert zurück, aber wenn es auf beweglichen Daten ist, kommt er als 0. Position zurück, wie kann ich also überprüfen, ob seine beweglichen Daten oder wifi, um den korrekten Index zu verweisen? – user1960169

Antwort

0

IPAddress Geräte Wifi oder Mobile Daten Um ON, verwenden Sie unter Verfahren einschalten zu müssen:

func getIPAddress() -> String? { 
    var address : String? 

    // Get list of all interfaces on the local machine: 
    var ifaddr : UnsafeMutablePointer<ifaddrs>? 
    guard getifaddrs(&ifaddr) == 0 else { return nil } 
    guard let firstAddr = ifaddr else { return nil } 

    // For each interface ... 
    for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) { 
     let interface = ifptr.pointee 

     // Check for IPv4 or IPv6 interface: 
     let addrFamily = interface.ifa_addr.pointee.sa_family 
     if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) { 

      // Check interface name: 
      let name = String(cString: interface.ifa_name) 
      if name == "en0" || name == "pdp_ip0" { 

       // Convert interface address to a human readable string: 
       var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) 
       getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len), 
          &hostname, socklen_t(hostname.count), 
          nil, socklen_t(0), NI_NUMERICHOST) 
       address = String(cString: hostname) 
      } 
     } 
    } 
    freeifaddrs(ifaddr) 

    return address 
} 

Hier if name == "en0" || name == "pdp_ip0" Werke für beide Wifi und Mobile Daten.

Die Hoffnung wird helfen! :)

Verwandte Themen