package com.anjlab.ping.services.location.gae; import java.net.URI; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.anjlab.ping.services.location.IPResolver; import com.google.appengine.api.urlfetch.HTTPMethod; import com.google.appengine.api.urlfetch.HTTPRequest; import com.google.appengine.api.urlfetch.HTTPResponse; import com.google.appengine.api.urlfetch.URLFetchService; public class IPWhoisNetIPResolver implements IPResolver { public static final Logger logger = LoggerFactory.getLogger(IPWhoisNetIPResolver.class); public final URLFetchService urlFetchService; public IPWhoisNetIPResolver(URLFetchService urlFetchService) { this.urlFetchService = urlFetchService; } public String resolveIp(String url) { try { HTTPRequest request = new HTTPRequest(new URL("http://ip-whois.net/website_ip.php"), HTTPMethod.POST); request.getFetchOptions().setDeadline(10d); request.getFetchOptions().doNotFollowRedirects(); request.getFetchOptions().allowTruncate(); request.setPayload(("T1=" + new URI(url).getHost()).getBytes()); HTTPResponse fetch = urlFetchService.fetch(request); Matcher matcher = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)").matcher(new String(fetch.getContent())); if (matcher.find()) { return matcher.group(0); } } catch (Exception e) { logger.warn("Error resolving IP from URL", e); } return null; } }