您的位置:首页 > 理论基础

Android 获取本地外网IP、内网IP、计算机名等信息

2013-08-19 15:16 507 查看
一、获取本地外网IP

public static String GetNetIp()

{

URL infoUrl = null;

InputStream inStream = null;

try

{

//http://iframe.ip138.com/ic.asp

//infoUrl = new URL("http://city.ip138.com/city0.asp");

infoUrl = new URL("http://iframe.ip138.com/ic.asp");

URLConnection connection = infoUrl.openConnection();

HttpURLConnection httpConnection = (HttpURLConnection)connection;

int responseCode = httpConnection.getResponseCode();

if(responseCode == HttpURLConnection.HTTP_OK)

{

inStream = httpConnection.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(inStream,"utf-8"));

StringBuilder strber = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null)

strber.append(line + "\n");

inStream.close();

//从反馈的结果中提取出IP地址

int start = strber.indexOf("[");

int end = strber.indexOf("]", start + 1);

line = strber.substring(start + 1, end);

return line;

}

}

catch(MalformedURLException e) {

e.printStackTrace();

}

catch (IOException e) {

e.printStackTrace();

}

return null;

}

二、 获取本地内网IP

// 获取本地IP函数

public static String getLocalIPAddress() {

try {

for (Enumeration<NetworkInterface> mEnumeration = NetworkInterface

.getNetworkInterfaces(); mEnumeration.hasMoreElements();) {

NetworkInterface intf = mEnumeration.nextElement();

for (Enumeration<InetAddress> enumIPAddr = intf

.getInetAddresses(); enumIPAddr.hasMoreElements();) {

InetAddress inetAddress = enumIPAddr.nextElement();

// 如果不是回环地址

if (!inetAddress.isLoopbackAddress()) {

// 直接返回本地IP地址

return inetAddress.getHostAddress().toString();

}

}

}

} catch (SocketException ex) {

System.err.print("error");

}

return null;

}

三、 获取本地外网IP、内网IP、计算机名等信息

/**

*功能: 获取外网IP,内网IP,计算机名等信息;

*

*作者: jef

*

*时间: 20100714

*

*版本: v1.0.0

*

*

*程序说明:

* 通过纯真网络来获取IP,因为ip138网站有时不准。

*

* 运行程序时命令行参数请输入http://www.cz88.net/ip/viewip778.aspx

* 等待程序运行完毕(执行时间视网络情况而定),会在程序目录下生成一个GETIP.sys文件来输出各参数。

*

* 运行时如果不输入命令行参数,则默认使用http://www.cz88.net/ip/viewip778.aspx来获取IP。

*

* 注意,

* 不输入命令行参数时获取的信息会输出到命令行,不会输出到文件。

* 输入命令行参数时获取的信息则会输出到文件,不管获取IP成功与否。

*

* 输出信息部分内容的含义如下,

* sucess

* hostName is:MyPC

* hostAddr is:192.168.1.114

* Foreign IP is:210.72.100.9

* Location is:江苏省苏州 长城宽带

* ......

*

* 第一行表示全部过程成功与否。成功输出"sucess",否则"fail",

* 第二行表示计算机名,

* 第三行表示内网IP,

* 第四行表示外网IP,

* 第五行表示外网IP所有的可能地理位置(可信度依赖于查询的网站)。

* ......

*

*

*使用举例:

* 拷贝 \cn\mail\sendback\GetIP.class 文件到C:\Documents and Settings下。注意要保留包名的目录。

* 打开命令提示行窗口,输入:

*

* c:

* cd C:\Documents and Settings

* java cn.mail.sendback.GetIP http://www.cz88.net/ip/viewip778.aspx
*

* 等待C:\Documents and Settings目录下出现GETIP.sys文件则表示执行完毕,

* 用记事本打开该文件。含义见说明部分。

*

*/

package com.soai.test;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.InetAddress;

import java.net.URL;

import java.net.UnknownHostException;

import java.util.Date;

public class GetIP {

/**

* @param args

*/

public static void main(String[] args){

// 通过纯真网络来获取IP,因为ip138网站有时不准。

// 运行程序时命令行输入:http://www.cz88.net/ip/viewip778.aspx

boolean bHasNoArgs =false;

if(args.length<=0) bHasNoArgs =true;

StringBuffer sbFileContent =new StringBuffer();

boolean bGetSuccess =true;

try {

InetAddress host =InetAddress.getLocalHost();

String hostName =host.getHostName();

String hostAddr=host.getHostAddress();

String tCanonicalHostName =host.getCanonicalHostName();

Date da =new Date();

String osname =System.getProperty("os.name");

String osversion =System.getProperty("os.version");

String username =System.getProperty("user.name");

String userhome =System.getProperty("user.home");

String userdir =System.getProperty("user.dir");

if(bHasNoArgs){

System.out.println("hostName is:"+hostName);

System.out.println("hostAddr is:"+hostAddr);

System.out.println("Current Date is:"+da.toString());

System.out.println("osname is:"+osname);

System.out.println("osversion is:"+osversion);

System.out.println("username is:"+username);

System.out.println("userhome is:"+userhome);

System.out.println("userdir is:"+userdir);

}

else{

sbFileContent.append("hostName is:"+hostName+"\n");

sbFileContent.append("hostAddr is:"+hostAddr+"\n");

sbFileContent.append("Current Date is:"+da.toString()+"\n");

sbFileContent.append("osname is:"+osname+"\n");

sbFileContent.append("osversion is:"+osversion+"\n");

sbFileContent.append("username is:"+username+"\n");

sbFileContent.append("userhome is:"+userhome+"\n");

sbFileContent.append("userdir is:"+userdir+"\n");

}

StringBuffer url =new StringBuffer();

if(bHasNoArgs||args[0].equals(null)||args[0].equals("")){

url.append("http://www.cz88.net/ip/viewip778.aspx");

}

else

url.append(args[0]);

StringBuffer strForeignIP =new StringBuffer("strForeignIPUnkown");

StringBuffer strLocation =new StringBuffer("strLocationUnkown");

if(GetIP.getWebIp(url.toString(),strForeignIP,strLocation)){

if(bHasNoArgs){

System.out.println("Foreign IP is:"+strForeignIP);

System.out.println("Location is:"+strLocation);

}

else{

sbFileContent.append("Foreign IP is:"+strForeignIP+"\n");

sbFileContent.append("Location is:"+strLocation+"\n");

}

}

else{

if(bHasNoArgs){

System.out.println("Failed to connect:"+url);

}

else{

bGetSuccess =false;

sbFileContent.append("Failed to connect:"+url+"\n");

}

}

} catch (UnknownHostException e) {

if(bHasNoArgs){

e.printStackTrace();

}

else{

bGetSuccess =false;

sbFileContent.append(e.getStackTrace()+"\n");

}

}

if(bGetSuccess)

sbFileContent.insert(0,"sucess"+"\n");

else

sbFileContent.insert(0,"fail"+"\n");

if(!bHasNoArgs) write2file(sbFileContent);

}

public static boolean getWebIp(String strUrl,

StringBuffer strForeignIP,StringBuffer strLocation) {

try {

URL url = new URL(strUrl);

BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

String s = "";

StringBuffer sb = new StringBuffer("");

while ((s = br.readLine()) != null) {

sb.append(s + "\r\n");

}

br.close();

String webContent = "";

webContent = sb.toString();

if( webContent.equals(null)|| webContent.equals("") ) return false;

String flagofForeignIPString ="IPMessage";

int startIP = webContent.indexOf(flagofForeignIPString)+flagofForeignIPString.length()+2;

int endIP = webContent.indexOf("</span>",startIP);

strForeignIP.delete(0, webContent.length());

strForeignIP.append(webContent.substring(startIP,endIP));

String flagofLocationString ="AddrMessage";

int startLoc = webContent.indexOf(flagofLocationString)+flagofLocationString.length()+2;

int endLoc = webContent.indexOf("</span>",startLoc);

strLocation.delete(0, webContent.length());

strLocation.append(webContent.substring(startLoc,endLoc));

return true;

} catch (Exception e) {

//e.printStackTrace();

return false;

}

}

public static void write2file(StringBuffer content){

if(content.length()<=0) return;

try {

FileOutputStream fos = new FileOutputStream("GETIP.sys");

OutputStreamWriter osr =new OutputStreamWriter(fos);

BufferedWriter bw =new BufferedWriter(osr);

try {

int index =0;

while(index>=0){

int preIndex =index;

index =content.indexOf("\n", preIndex+2);

if(index>0){

String str =new String(content.substring(preIndex, index));

bw.write(str);

bw.newLine();

}

else{

String str =new String(content.substring(preIndex, content.length()-1));

bw.write(str);

break;

}

}

} catch (IOException e1) {

// TODO Auto-generated catch block

//e1.printStackTrace();

}

try {

bw.close();

} catch (IOException e) {

// TODO Auto-generated catch block

//e.printStackTrace();

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

//e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: