JAVA 获取当前 内网 和 外网 的IP 地址

方法一:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.URL;

public class UserIP {
public static void main(String[] args) throws Exception {
 System.out.println("本机的外网IP是:"+UserIP.getWebIP("http://www.ip138.com/ip2city.asp"));
 System.out.println("本机的内网IP是:"+UserIP.getLocalIP());
}
/**
 * 获取外网地址
 * @param strUrl
 * @return
 */
public static String getWebIP(String strUrl) {
try {
//连接网页
 URL url = new URL(strUrl);
 BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
 String s = "";
 StringBuffer sb = new StringBuffer(""); 
 String webContent = "";
 //读取网页信息
 while ((s = br.readLine()) != null) {
 sb.append(s + "\r\n");
 }
 br.close();
 //网页信息
 webContent = sb.toString();
 int start = webContent.indexOf("[")+1;
 int end = webContent.indexOf("]");
 //获取网页中  当前 的 外网IP
 webContent = webContent.substring(start,end);
 return webContent;


} catch (Exception e) {
 e.printStackTrace();
 return "error open url:" + strUrl;
}
}
 
 public static String getLocalIP() throws Exception{
 String localIP = "";
 InetAddress addr = (InetAddress) InetAddress.getLocalHost();
 //获取本机IP
 localIP = addr.getHostAddress().toString();
 return localIP;
 }
}


方法二:

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;


public class ExternalIpAddressFetcher {
//外网IP提供者的网址
    private String externalIpProviderUrl;


    //本机外网IP地址
    private String myExternalIpAddress;


    public ExternalIpAddressFetcher(String externalIpProviderUrl) {
       this.externalIpProviderUrl = externalIpProviderUrl;


       String returnedhtml = fetchExternalIpProviderHTML(externalIpProviderUrl);
       parse(returnedhtml);
    }
    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;
    }
    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);
       }   
   }  
    //得到本机外网地址,得不到则为空
    public String getMyExternalIpAddress() {
       return myExternalIpAddress;
    }


public static void main(String[] args) {
// TODO Auto-generated method stub
ExternalIpAddressFetcher fetcher=new ExternalIpAddressFetcher("http://www.ip138.com/ip2city.asp");
      System.out.println(fetcher.getMyExternalIpAddress());
}


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值