java获取服务器ip(java中如何获取到本机的外网ip地址)
老铁们,大家好,相信还有很多朋友对于java获取服务器ip和java中如何获取到本机的外网ip地址的相关问题不太懂,没关系,今天就由我来为大家分享分享java获取服务器ip以及java中如何获取到本机的外网ip地址的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
Java怎样获取当前机器外网IP
java获取本机的外网ip示例:
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地址
*思想是访问网站http://checkip.dyndns.org/,得到返回的文本后解析出本机在外网的IP地址
*@author pieryon
*
*/
public class ExternalIpAddressFetcher{
//外网IP提供者的网址
private String externalIpProviderUrl;
//本机外网IP地址
private String myExternalIpAddress;
public ExternalIpAddressFetcher(String externalIpProviderUrl){
this.externalIpProviderUrl= externalIpProviderUrl;
String returnedhtml= fetchExternalIpProviderHTML(externalIpProviderUrl);
parse(returnedhtml);
}
/**
*从外网提供者处获得包含本机外网地址的字符串
*从http://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("http://checkip.dyndns.org/");
System.out.println(fetcher.getMyExternalIpAddress());
}
}
java中如何获取到本机的外网ip地址
java获取本机的外网ip示例:
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地址
*思想是访问网站http://checkip.dyndns.org/,得到返回的文本后解析出本机在外网的IP地址
*@author pieryon
*
*/
public class ExternalIpAddressFetcher{
//外网IP提供者的网址
private String externalIpProviderUrl;
//本机外网IP地址
private String myExternalIpAddress;
public ExternalIpAddressFetcher(String externalIpProviderUrl){
this.externalIpProviderUrl= externalIpProviderUrl;
String returnedhtml= fetchExternalIpProviderHTML(externalIpProviderUrl);
parse(returnedhtml);
}
/**
*从外网提供者处获得包含本机外网地址的字符串
*从http://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("http://checkip.dyndns.org/");
System.out.println(fetcher.getMyExternalIpAddress());
}
}
java servlet获取客户端IP
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request){
if(request.getHeader("x-forwarded-for")== null){
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
你可以写一个Filter配置在web.xml中让服务器启动的时候就开始监听直到服务器停止!
OK,关于java获取服务器ip和java中如何获取到本机的外网ip地址的内容到此结束了,希望对大家有所帮助。