獲取本機外網IP地址(External IP Address)示例
原文:https://www.cnblogs.com/Csharpblogs/articles/2218156.html
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 獲取本機外網IP地址 * 思想是訪問網站https://checkip.dyndns.org/,得到返回的文本後解析出本機在外網的IP地址 * @author Administrator * */ public class ExternalIpAddressFetcher { // 外網IP提供者的網址 private String externalIpProviderUrl; // 本機外網IP地址 private String myExternalIpAddress; public ExternalIpAddressFetcher(String externalIpProviderUrl) { this.externalIpProviderUrl = externalIpProviderUrl; String returnedhtml = fetchExternalIpProviderHTML(externalIpProviderUrl); parse(returnedhtml); } /** * 從外網提供者處獲得包含本機外網地址的字符串 * 從https://checkip.dyndns.org返回的字符串如下 * <html><head><title>Current IP Check</title></head><body>Current IP Address: 123.147.226.222</body></html> * @param externalIpProviderUrl * @return */ private String fetchExternalIpProviderHTML(String externalIpProviderUrl) { // 輸入流 InputStream in = null; // 到外網提供者的Http連接 HttpURLConnection httpConn = null; try { // 打開連接 URL url = new URL(externalIpProviderUrl); httpConn = (HttpURLConnection) url.openConnection(); // 連接設置 HttpURLConnection.setFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)"); // 獲取連接的輸入流 in = httpConn.getInputStream(); byte[] bytes=new byte[1024];// 此大小可根據實際情況調整 // 讀取到數組中 int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=in.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // 將字節轉化為為UTF-8的字符串 String receivedString=new String(bytes,"UTF-8"); // 返回 return receivedString; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); httpConn.disconnect(); } catch (Exception ex) { ex.printStackTrace(); } } // 出現異常則返回空 return null; } /** * 使用正則表達式解析返回的HTML文本,得到本機外網地址 * @param html */ private void parse(String html){ Pattern pattern=Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})", Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(html); while(matcher.find()){ myExternalIpAddress=matcher.group(0); } } /** * 得到本機外網地址,得不到則為空 * @return */ public String getMyExternalIpAddress() { return myExternalIpAddress; } public static void main(String[] args){ ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("https://checkip.dyndns.org/"); System.out.println(fetcher.getMyExternalIpAddress()); } }
最後更新:2017-04-02 18:30:39