一、通過第三方IP查詢平臺曲線獲取本機公網IP(最準確、不穩定)
原理:通過類似ipip.net站長工具,獲取訪問者設置IP信息,由於國內設置多級路由跳轉,通過該方法獲取的IP地址準確性十分的高(畢竟別人就是做這個事的。。)缺陷就是官方未提供外部接口,只能通過正則表達式對頁面上IP所在的元素標籤進行獲取。
示例如下:
- 測試站長網址:http://ip.chinaz.com/
- 元素標識:
<dd class="fz24">171.88.45.2**</dd>
,標籤內的171.88.45.2**即爲本機公網IP
核心代碼:
/**
*@Function
*@Description 得到本機外網ip
**/
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("\\<dd class\\=\"fz24\">(.*?)\\<\\/dd>");
Matcher m = p.matcher(inputLine);
if(m.find()){
ip = m.group(1);
}
return ip;
}
補充
- 關於獲取頁面上指定元素標籤的方法:
以Chrome瀏覽器爲例,F12進行控制檯,切換到Elements
標籤,點擊元素選擇器(即左上角鼠標圖標或快捷鍵Ctrl+Shift+C
)光標移到頁面IP顯示位置點擊鼠標,控制檯會自動定位到元素標籤 - 如果拋出異常:
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletResponse
,手動導入Tomcat安裝目錄下servlet.jar包即可
參考