Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get IPhone's Public IP Address without using a third party url

For my project, i need to get the IPhone's Public IP address, there are so many examples available, which show public IP address by using external / third party URL. I just want to know how to extract IPhones's IP Address without help of using another url.

Note :- I used This one but shows only the local IP address , i need public IP address

   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
}

I used this one in my swift project by using a header file, it generates Local IP

like image 963
Chathuranga Silva Avatar asked Nov 03 '15 09:11

Chathuranga Silva


People also ask

How do I manually enter an IP address on my iPhone?

How to change your IP address on iOS. In the Settings of your iPhone or iPad, tap Wi-Fi, and choose your Network. In the IPv4 section, tap Configure IP. Choose Manual, and enter your new IP address.

Can you spoof your public IP?

IP spoofing enables an attacker to replace a packet header's source IP address with a fake, or spoofed IP address. The attacker does this by intercepting an IP packet and modifying it, before sending it on to its destination.


2 Answers

let address = try? String(contentsOf: URL(string: "https://api.ipify.org")!, encoding: .utf8)
print(address)

Then you get public IP-address

like image 154
Taras Avatar answered Oct 22 '22 20:10

Taras


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

prints on my own 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

for external IP, you need help of external service (not swift specific :-))

like image 21
user3441734 Avatar answered Oct 22 '22 20:10

user3441734