2015-11-03 8 views
5

Per il mio progetto, ho bisogno di ottenere l'indirizzo IP pubblico dell'IPhone, ci sono tanti esempi disponibili, che mostrano l'indirizzo IP pubblico usando URL esterni/di terze parti. Voglio solo sapere come estrarre l'indirizzo IP di IPhone senza l'aiuto di usare un altro URL.Come ottenere l'indirizzo IP pubblico dell'IPhone senza utilizzare un URL di terze parti

Nota: - ho usato questo, ma mostra solo l'indirizzo IP locale, ho bisogno di indirizzo IP pubblico

func getIPAddress() -> [String] { 
    var addresses = [String]() 

    // Get list of all interfaces on the local machine: 
    var ifaddr : UnsafeMutablePointer<ifaddrs> = nil 
    if getifaddrs(&ifaddr) == 0 { 

     // For each interface ... 
     for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { 
      let flags = Int32(ptr.memory.ifa_flags) 
      var addr = ptr.memory.ifa_addr.memory 

      // Check for running IPv4, IPv6 interfaces. Skip the loopback interface. 
      if (flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING) { 
       if addr.sa_family == UInt8(AF_INET) || addr.sa_family == UInt8(AF_INET6) { 

        // Convert interface address to a human readable string: 
        var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0) 
        if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count), 
         nil, socklen_t(0), NI_NUMERICHOST) == 0) { 
          if let address = String.fromCString(hostname) { 
           addresses.append(address) 
          } 
        } 
       } 
      } 
     } 
     freeifaddrs(ifaddr) 
    } 

    return addresses 
} 

Ho usato questo nel mio progetto rapida utilizzando un file di intestazione, genera IP locale

+1

Hai provato SO? http://stackoverflow.com/questions/7072989/iphone-ipad-osx-how-to-get-my-ip-ad-ress-programmatically?lq=1 –

+0

questo link può aiutarti - http://stackoverflow.com/ questions/30748480/swift-get-devices-ip-address – Vinayk

+0

Ho trovato alcuni codici Objective-C, potresti darmi il più rapido? :) –

risposta

1
import Darwin 

var hostName = [Int8](count: 255, repeatedValue: 0) 
gethostname(&hostName, hostName.count) 

var hints = addrinfo() 
var res = UnsafeMutablePointer<addrinfo>() 
var p = UnsafeMutablePointer<addrinfo>() 
var p4 = UnsafeMutablePointer<sockaddr_in>() 
var p6 = UnsafeMutablePointer<sockaddr_in6>() 

hints.ai_flags = AI_ALL 
hints.ai_family = PF_UNSPEC 
hints.ai_socktype = SOCK_STREAM 
var ipstr = [CChar](count: Int(INET6_ADDRSTRLEN), repeatedValue: 0) 

print("List of IP addresses on host \(String.fromCString(hostName)!)\n") 

if getaddrinfo(hostName, "0", &hints, &res) == 0 { 

    var ipFamily = "" 
    var s: Int32 = 0 
    var port: in_port_t = 0 
    for(p = res; p != nil; p = p.memory.ai_next) { 

     switch p.memory.ai_family { 
     case PF_INET: 
      p4 = UnsafeMutablePointer<sockaddr_in>(p.memory.ai_addr) 
      inet_ntop(AF_INET, &p4.memory.sin_addr, &ipstr, socklen_t(INET6_ADDRSTRLEN)) 
      ipFamily = "IPv4" 
      port = p4.memory.sin_port.bigEndian 
     case PF_INET6: 
      p6 = UnsafeMutablePointer<sockaddr_in6>(p.memory.ai_addr) 
      inet_ntop(AF_INET6, &p6.memory.sin6_addr, &ipstr, socklen_t(INET6_ADDRSTRLEN)) 
      ipFamily = "IPv6" 
      port = p6.memory.sin6_port.bigEndian 
     default: 

      break 
     } 
     print("\t\(ipFamily):", String.fromCString(ipstr)!) 

    } 
    // free unmanaged memmory !!!!! 
    freeaddrinfo(res) 
} 

stampe su mio computer

List of IP addresses on host Ivos-MacBook.local 

    IPv6: fe80::225:ff:fe40:9c72 
    IPv6: 2a02:130:200:1350:225:ff:fe40:9c72 
    IPv4: 192.168.1.106 

per IP esterno, è necessario l'aiuto di esterni servizio (non specifico specifico :-))

+0

Grazie per il codice, ma il problema è che mostra l'IP del telefono, ho bisogno di ottenere l'Iphone IP pubblico, la posizione IP e i dati relativi. :( –

+0

Che cosa intendi parlando di IP "pubblico", il codice elenca tutti gli IP pubblici (IP tramite il quale il dispositivo è accessibile nella tua LAN). Sembra che tu stia cercando il modo in cui ottieni l'IP esterno del tuo dispositivo Per quanto mi riguarda, ho bisogno di aiuto per il servizio esterno. Vi consiglio di leggere https://en.wikipedia.org/wiki/Network_address_translation – user3441734

+0

Sì, non voglio usare il servizio esterno. Ho bisogno di una codifica interna soluzione, questo è il problema, perché non si può fare affidamento su servizi esterni –

Problemi correlati