最近在做一個app,其中有一個功能點是擷取原生外網ip,網上流傳的絕大部分都是擷取區域網路ip的方法,有些似乎能夠擷取外網ip方法但也已經失效。
大部分提到的都是
ip = InetAddress.getLocalHost().getHostAddress();
或者
InetAddress[] inetAdds = InetAddress.getAllByName(InetAddress .getLocalHost().getHostName());
顯然,得到的不是外網地址,也不清楚標著外網ip的各位大俠都是怎麼得到擷取的是外網ip的結論的。
一種可行的擷取方法,是通過http請求從網站中取出ip欄位。例如:http://ip.chinaz.com/
通過這個網址,加上簡單的Regex,即可得到。
通過firefox查看此段的html代碼,如下:
通過Regex擷取[<strong class="red"]</strong>之間的字串即可
代碼如下:
public static String getV4IP() {
String ip = "";
String chinaz = "http://ip.chinaz.com/";
String inputLine = "";
String read = "";
try {
URL url = new URL(chinaz);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while ((read = in.readLine()) != null) {
inputLine += read;
}
System.out.println(inputLine);
} catch (Exception e) {
e.printStackTrace();
}
Pattern p = Pattern.compile("\\<strong class\\=\"red\">(.*?)\\<\\/strong>");
Matcher m = p.matcher(inputLine);
if(m.find()){
String ipstr = m.group(1);
System.out.println(ipstr);
}
return ip;
}