Java获取IP
在我们记录⼀些⽇志或者⽤户⾏为时,为了之后能⽅便的定位到事件⼈,我们可能需要记录其事件IP地址。主要有是内⽹IP,外⽹IP;以及根据IP
获得相应的地址。
1、概念
2、区别
2.1本机IP地址
127.0.0.1也就是localhost,这是本地ip地址,是只能⽤于本机访问本机的⽹络时使⽤的。
2.2内⽹IP地址
192.168.1.1~192.168.1.255,之类的内⽹ip地址是⽤于局域⽹内相互访问时的ip地址。
是路由器给你分配的⼀个IP地址,只能在局域⽹中使⽤。
2.3外⽹IP地址
返回的是⼀个json对象:
3、IP地址⼯具类(亲测可⽤)
packageUtil;
edReader;
tputStream;
ption;
treamReader;
ortedEncodingException;
LConnection;
dress;
medURLException;
kInterface;
Exception;
;
oder;
ation;
r;
r;
n;
/**
*ip地址⼯具类
*/
publicclassAddressUtils{
/**
*获取本机的内⽹ip地址
*
*@return
*@throwsSocketException
*@throwsSocketException
*/
publicStringgetInnetIp()throwsSocketException{
Stringlocalip=null;//本地IP,如果没有配置外⽹IP则返回它
Stringnetip=null;//外⽹IP
Enumeration
netInterfaces=workInterfaces();
InetAddressip=null;
booleanfinded=fal;//是否找到外⽹IP
while(eElements()&&!finded){
NetworkInterfaceni=ement();
Enumeration
while(eElements()){
ip=ement();
if(!LocalAddress()
&&!backAddress()
&&tAddress().indexOf(":")==-1){//外⽹IP
netip=tAddress();
finded=true;
break;
}elif(LocalAddress()
&&!backAddress()
&&tAddress().indexOf(":")==-1){//内⽹IP
localip=tAddress();
}
}
}
if(netip!=null&&!"".equals(netip)){
returnnetip;
}el{
returnlocalip;
}
}
/**
*获取本机的外⽹ip地址
*
*@return
*/
publicStringgetV4IP(){
Stringip="";
Stringchinaz="";
StringBuilderinputLine=newStringBuilder();
Stringread="";
URLurl=null;
HttpURLConnectionurlConnection=null;
BufferedReaderin=null;
try{
url=newURL(chinaz);
urlConnection=(HttpURLConnection)nnection();
in=newBufferedReader(newInputStreamReader(utStream(),"UTF-8"));
while((read=ne())!=null){
(read+"rn");
}
//n(ng());
}catch(MalformedURLExceptione){
tackTrace();
}catch(IOExceptione){
tackTrace();
}finally{
if(in!=null){
try{
();
}catch(IOExceptione){
tackTrace();
}
}
}
Patternp=e("
Matcherm=r(ng());
if(()){
Stringipstr=(1);
ip=ipstr;
//n(ipstr);
}
returnip;
}
/**
*解析ip地址
*
*设置访问地址为/rvice/
*设置请求参数为ip=[已经获得的ip地址]
*设置解码⽅式为UTF-8
*
*@paramcontent请求的参数格式为:ip=192.168.1.101
*@paramencoding服务器端请求编码。如GBK,UTF-8等
*@return
*@throwsUnsupportedEncodingException
*/
publicStringgetAddress(Stringcontent,Stringencoding)throwsUnsupportedEncodingException{
//设置访问地址
//⽹址⼀:
//⽹址⼆:/Data/IP/
StringurlStr="/rvice/";
//从取得IP所在的省市区信息
StringreturnStr=ult(urlStr,content,encoding);
if(returnStr!=null){
//处理返回的省市区信息
//n(returnStr);
String[]temp=(",");
if(<3){
return"0";//⽆效IP,局域⽹测试
}
Stringcountry="";//国家
Stringarea="";//地区
Stringregion="";//省份
Stringcity="";//市区
Stringcounty="";//地区
Stringisp="";//ISP公司
for(inti=0;i<;i++){
switch(i){
ca2:
country=(temp[i].split(":"))[1].replaceAll(""","");
country=(country,encoding);//国家
break;
ca3:
area=(temp[i].split(":"))[1].replaceAll(""","");
area=(area,encoding);//地区
break;
ca4:
region=(temp[i].split(":"))[1].replaceAll(""","");
region=(region,encoding);//省份
break;
ca5:
city=(temp[i].split(":"))[1].replaceAll(""","");
city=(city,encoding);//市区
if("内⽹IP".equals(city)){
return"地址为:内⽹IP";
}
break;
ca6:
county=(temp[i].split(":"))[1].replaceAll(""","");
county=(county,encoding);//地区
break;
ca7:
isp=(temp[i].split(":"))[1].replaceAll(""","");
isp=(isp,encoding);//ISP公司
break;
}
}
returnnewStringBuffer("地址为:"+country+",").append(region+"省,").append(city+"市,").append(county+",").append("ISP公司:"+isp)
.toString();
.toString();
}
returnnull;
}
/**
*访问⽬标地址并获取返回值
*
*@paramurlStr请求的地址
*@paramcontent请求的参数格式为:ip=192.168.1.101
*@paramencoding服务器端请求编码。如GBK,UTF-8等
*@return
*/
privateStringgetResult(StringurlStr,Stringcontent,Stringencoding){
URLurl=null;
HttpURLConnectionconnection=null;
try{
url=newURL(urlStr);
connection=(HttpURLConnection)nnection();//新建连接实例
nectTimeout(2000);//设置连接超时时间,单位毫秒
dTimeout(33000);//设置读取数据超时时间,单位毫秒
utput(true);//是否打开输出流true|fal
nput(true);//是否打开输⼊流true|fal
uestMethod("POST");//提交⽅法POST|GET
Caches(fal);//是否缓存true|fal
t();//打开连接端⼝
DataOutputStreamout=newDataOutputStream(putStream());//打开输出流往对端服务器写数据
ytes(content);//写数据,也就是提交你的表单name=xxx&pwd=xxx
();//刷新
();//关闭输出流
BufferedReaderreader=newBufferedReader(newInputStreamReader(utStream(),encoding));
//往对端写完数据对端服务器返回数据
//,以BufferedReader流来读取
StringBufferbuffer=newStringBuffer();
Stringline="";
while((line=ne())!=null){
(line);
}
();
ng();
}catch(IOExceptione){
tackTrace();
}finally{
if(connection!=null){
nect();//关闭连接
}
}
returnnull;
}
/**
*测试⽅法
*获取本机的内⽹ip,外⽹ip和指定ip的地址
*
*@paramargs
*/
publicstaticvoidmain(String[]args){
AddressUtilsaddressUtils=newAddressUtils();
//step1.获得内⽹ip和外⽹ip,并输出到控制台
Stringip1="";
try{
ip1=etIp();//局域⽹的ip地址,⽐如:192.168.1.101
}catch(SocketExceptione1){
tackTrace();
}
n("内⽹ip:"+ip1);
Stringip2=4IP();//⽤于实际判断地址的ip
n("外⽹ip:"+ip2);
//step2.根据外⽹ip地址,得到市级地理位置
Stringaddress="";
try{
address=ress("ip="+ip2,"utf-8");
}catch(UnsupportedEncodingExceptione){
tackTrace();
tackTrace();
}
//输出地址,⽐如:中国,⼭东省,济南市,联通
n("您的"+address);
n("******************************");
n("请输⼊想要查询的ip地址(输⼊exit退出):");
Scannerscan=newScanner();
Stringip="";
while(!"exit".equals(ip=())){
try{
address=ress("ip="+ip,"utf-8");
}catch(UnsupportedEncodingExceptione){
tackTrace();
}
//输出地址,⽐如:中国,⼭东省,济南市,联通
n(ip+"的"+address);
n("******************************");
n("请输⼊想要查询的ip地址(输⼊exit退出):");
}
();
n("再见");
}
}
参考⽂档:
java如何获得内⽹ip、外⽹ip、以及如何根据ip查询地址
本文发布于:2023-03-15 00:35:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678811715255102.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:外网ip地址查询.doc
本文 PDF 下载地址:外网ip地址查询.pdf
留言与评论(共有 0 条评论) |