2015-11-03 7 views
5

का उपयोग किए बिना आईफोन का सार्वजनिक आईपी पता कैसे प्राप्त करें, मेरे प्रोजेक्ट के लिए, मुझे आईफोन का सार्वजनिक आईपी पता प्राप्त करने की आवश्यकता है, ऐसे कई उदाहरण उपलब्ध हैं, जो बाहरी/तृतीय पक्ष यूआरएल का उपयोग करके सार्वजनिक आईपी पता दिखाते हैं। मैं सिर्फ एक और यूआरएल का उपयोग किए बिना आईफोन के आईपी पते को निकालने के बारे में जानना चाहता हूं।किसी तीसरे पक्ष के यूआरएल

नोट: - मैं यह एक थे, लेकिन पता चलता केवल स्थानीय आईपी पता, मैं सार्वजनिक आईपी पते

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 
} 

मैं एक हेडर फाइल का उपयोग करके अपनी तेज परियोजना में यह एक प्रयोग किया जाता है की जरूरत है, यह स्थानीय आईपी

उत्पन्न करता है
+1

क्या आपने एसओ की कोशिश की है? http://stackoverflow.com/questions/7072989/iphone-ipad-osx-how-to-get-my-ip-address-programmatically?lq=1 –

+0

यह लिंक आपकी मदद कर सकता है - http://stackoverflow.com/ प्रश्न/30748480/स्विफ्ट-गेट-डिवाइस-आईपी-एड्रेस – Vinayk

+0

कुछ उद्देश्य-सी कोड मिला, क्या आप कृपया मुझे तेजी से दे सकते हैं? :) –

उत्तर

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) 
} 

मेरे अपने कंप्यूटर

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 

बाहरी IP के लिए पर प्रिंट, आप बाहरी की मदद की जरूरत है सेवा (तेजी से विशिष्ट नहीं :-))

+0

कोड के लिए धन्यवाद, लेकिन समस्या यह है कि यह फोन आईपी दिखाता है, मुझे आईफोन स्थान और संबंधित डेटा में आईफोन सार्वजनिक आईपी प्राप्त करने की आवश्यकता है। :( –

+0

'सार्वजनिक' आईपी के बारे में बात करके आपका क्या मतलब है? कोड सभी सार्वजनिक आईपी (आईपी जिसके माध्यम से डिवाइस आपके लैन में पहुंच योग्य है) सूचीबद्ध करता है। यह सीम आप इस तरीके की तलाश में हैं कि आप अपने डिवाइस के बाहरी आईपी कैसे प्राप्त करते हैं जैसा कि मुझे दुख है, आपको इसके लिए बाहरी सेवा की मदद की ज़रूरत है। मैं आपको https://en.wikipedia.org/wiki/Network_address_translation – user3441734

+0

पढ़ने के लिए अनुशंसा करता हूं हाँ, मैं बाहरी सेवा का उपयोग नहीं करना चाहता हूं। मुझे एक आंतरिक कोडिंग की आवश्यकता है समाधान, यह समस्या है। क्योंकि बाहरी सेवाओं पर भरोसा नहीं किया जा सकता है। –

संबंधित मुद्दे