获取本机外网IP地址(External IP Address)示例

我就是我 2022-06-13 13:52 415阅读 0赞

原文:http://www.cnblogs.com/Csharpblogs/articles/2218156.html

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8. /**
  9. * 获取本机外网IP地址
  10. * 思想是访问网站http://checkip.dyndns.org/,得到返回的文本后解析出本机在外网的IP地址
  11. * @author Administrator
  12. *
  13. */
  14. public class ExternalIpAddressFetcher {
  15. // 外网IP提供者的网址
  16. private String externalIpProviderUrl;
  17. // 本机外网IP地址
  18. private String myExternalIpAddress;
  19. public ExternalIpAddressFetcher(String externalIpProviderUrl) {
  20. this.externalIpProviderUrl = externalIpProviderUrl;
  21. String returnedhtml = fetchExternalIpProviderHTML(externalIpProviderUrl);
  22. parse(returnedhtml);
  23. }
  24. /**
  25. * 从外网提供者处获得包含本机外网地址的字符串
  26. * 从http://checkip.dyndns.org返回的字符串如下
  27. * <html><head><title>Current IP Check</title></head><body>Current IP Address: 123.147.226.222</body></html>
  28. * @param externalIpProviderUrl
  29. * @return
  30. */
  31. private String fetchExternalIpProviderHTML(String externalIpProviderUrl) {
  32. // 输入流
  33. InputStream in = null;
  34. // 到外网提供者的Http连接
  35. HttpURLConnection httpConn = null;
  36. try {
  37. // 打开连接
  38. URL url = new URL(externalIpProviderUrl);
  39. httpConn = (HttpURLConnection) url.openConnection();
  40. // 连接设置
  41. HttpURLConnection.setFollowRedirects(true);
  42. httpConn.setRequestMethod("GET");
  43. httpConn.setRequestProperty("User-Agent",
  44. "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
  45. // 获取连接的输入流
  46. in = httpConn.getInputStream();
  47. byte[] bytes=new byte[1024];// 此大小可根据实际情况调整
  48. // 读取到数组中
  49. int offset = 0;
  50. int numRead = 0;
  51. while (offset < bytes.length
  52. && (numRead=in.read(bytes, offset, bytes.length-offset)) >= 0) {
  53. offset += numRead;
  54. }
  55. // 将字节转化为为UTF-8的字符串
  56. String receivedString=new String(bytes,"UTF-8");
  57. // 返回
  58. return receivedString;
  59. } catch (MalformedURLException e) {
  60. e.printStackTrace();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. } finally {
  64. try {
  65. in.close();
  66. httpConn.disconnect();
  67. } catch (Exception ex) {
  68. ex.printStackTrace();
  69. }
  70. }
  71. // 出现异常则返回空
  72. return null;
  73. }
  74. /**
  75. * 使用正则表达式解析返回的HTML文本,得到本机外网地址
  76. * @param html
  77. */
  78. private void parse(String html){
  79. Pattern pattern=Pattern.compile("(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})", Pattern.CASE_INSENSITIVE);
  80. Matcher matcher=pattern.matcher(html);
  81. while(matcher.find()){
  82. myExternalIpAddress=matcher.group(0);
  83. }
  84. }
  85. /**
  86. * 得到本机外网地址,得不到则为空
  87. * @return
  88. */
  89. public String getMyExternalIpAddress() {
  90. return myExternalIpAddress;
  91. }
  92. public static void main(String[] args){
  93. ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("http://checkip.dyndns.org/");
  94. System.out.println(fetcher.getMyExternalIpAddress());
  95. }
  96. }

发表评论

表情:
评论列表 (有 0 条评论,415人围观)

还没有评论,来说两句吧...

相关阅读