For those of us who use Swift, here my Andrei translation responds with the addition of NSURLSession to run it in the background. To check the network, I use Reachability.swift . Also, be sure to add dyndns.org to NSExceptionDomains for NSAppTransportSecurity in NSAppTransportSecurity .
var ipAddress:String? func getIPAddress() { if reachability!.isReachable() == false { return } guard let ipServiceURL = NSURL(string: "http://www.dyndns.org/cgi-bin/check_ip.cgi") else { return } let session = NSURLSession.sharedSession() let task = session.dataTaskWithURL(ipServiceURL, completionHandler: {(data, response, error) -> Void in if error != nil { print(error) return } let ipHTML = NSString(data: data!, encoding: NSUTF8StringEncoding) as? String self.ipAddress = self.scanForIPAddress(ipHTML) }) task.resume() } func scanForIPAddress(var ipHTML:String?) -> String? { if ipHTML == nil { return nil } var externalIPAddress:String? var index:Int? var ipItems:[String]? var text:NSString? let scanner = NSScanner(string: ipHTML!) while scanner.atEnd == false { scanner.scanUpToString("<", intoString: nil) scanner.scanUpToString(">", intoString: &text) ipHTML = ipHTML!.stringByReplacingOccurrencesOfString(String(text!) + ">", withString: " ") ipItems = ipHTML!.componentsSeparatedByString(" ") index = ipItems!.indexOf("Address:") externalIPAddress = ipItems![++index!] } if let ip = externalIPAddress { print("External IP Address: \(ip)") } return externalIPAddress }
source share