JAVA怎么获取IP地址

Python09

JAVA怎么获取IP地址,第1张

这个是获取不到的,因为有代理、端口映射等等转发情况的存在。为什么不保存相对路径/域名/或者在服务器上某个配置文件中配置域名/数据库中一个表/数据库中某个字段保存当前服务器的ip地址呢?

import java.net.Inet4Address

import java.net.InetAddress

import java.net.NetworkInterface

import java.net.SocketException

import java.util.ArrayList

import java.util.Enumeration

import java.util.List

/**

* @author Becolette

* @description TODO

* @date 2015-11-5 下午01:58:46

*/

public class IpAddress {

public static String find() {

List<String>ips = new ArrayList<String>()

// 返回所有网络接口的一个枚举实例

Enumeration<?>allNetInterfaces = null

try {

allNetInterfaces = NetworkInterface.getNetworkInterfaces()

} catch (SocketException e) {

e.printStackTrace()

}

InetAddress ip = null

while (allNetInterfaces.hasMoreElements()) {

NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement()

Enumeration<InetAddress>addresses = netInterface.getInetAddresses()

while (addresses.hasMoreElements()) {

// 获得当前网络接口

ip = (InetAddress) addresses.nextElement()

if (ip != null &&ip instanceof Inet4Address &&ip.getHostAddress().indexOf(".") != -1) {

ips.add(ip.getHostAddress())

}

}

}

if (ips.size() == 1) {

return ips.get(0)

} else {

for (String ipa : ips) {

if (!"127.0.0.1".equals(ipa)) {

return ipa

}

}

}

return MacAddress.find()

}

}

方法如下:

方法一,使用CMD命令:

public static String getLocalIPForCMD(){

StringBuilder sb = new StringBuilder()

String command = "cmd.exe /c ipconfig | findstr IPv4"

try {

Process p = Runtime.getRuntime().exec(command)

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()))

String line = null

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

line = line.substring(line.lastIndexOf(":")+2,line.length())

sb.append(line)

}

br.close()

p.destroy()

} catch (IOException e) {

e.printStackTrace()

}

return sb.toString()

}

方法二,使用Java方法

public static String getLocalIPForJava(){

StringBuilder sb = new StringBuilder()

try {

Enumeration<NetworkInterface>en = NetworkInterface.getNetworkInterfaces()

while (en.hasMoreElements()) {

NetworkInterface intf = (NetworkInterface) en.nextElement()

Enumeration<InetAddress>enumIpAddr = intf.getInetAddresses()

while (enumIpAddr.hasMoreElements()) {

InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement()

if (!inetAddress.isLoopbackAddress() &&!inetAddress.isLinkLocalAddress()

&&inetAddress.isSiteLocalAddress()) {

sb.append(inetAddress.getHostAddress().toString()+"\n")

}

}

}

} catch (SocketException e) { }

return sb.toString()

}