转载:http://blog.163.com/cvskill@126/blog/static/38147380200973015928123/
在Linux下用InetAddress.getLocalHost()方法获取本机IP地址,
得到的结果总是:127.0.0.1。
原来这个是etc/hosts文件中的配置,并非网卡的IP地址。
后来多方寻访,终于得下以下代码,
运行后在控制台输出IP与MAC地址。
import java.net.*;
import java.util.*;
public class getIP {
public static void main(String[] args) {
getIP t = new getIP();
System.out.println(t.getLocalIP());
System.out.println(t.getMacAddr());
}
public String getMacAddr() {
String MacAddr = "";
String str = "";
try {
NetworkInterface NIC = NetworkInterface.getByName("eth0");
byte[] buf = NIC.getHardwareAddress();
for (int i = 0; i < buf.length; i++) {
str = str + byteHEX(buf[i]);
}
MacAddr = str.toUpperCase();
} catch (SocketException e) {
e.printStackTrace();
System.exit(-1);
}
return MacAddr;
}
public String getLocalIP() {
String ip = "";
try {
Enumeration> e1 = (Enumeration>) NetworkInterface.getNetworkInterfaces();
while (e1.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) e1.nextElement();
if (!ni.getName().equals("eth0")) {
continue;
} else {
Enumeration> e2 = ni.getInetAddresses();
while (e2.hasMoreElements()) {
InetAddress ia = (InetAddress) e2.nextElement();
if (ia instanceof Inet6Address)
continue;
ip = ia.getHostAddress();
}
break;
}
}
} catch (SocketException e) {
e.printStackTrace();
System.exit(-1);
}
return ip;
}
/* 一个将字节转化为十六进制ASSIC码的函数 */
public static String byteHEX(byte ib) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a','b', 'c', 'd', 'e', 'f' };
char[] ob = new char[2];
ob[0] = Digit[(ib >>> 4) & 0X0F];
ob[1] = Digit[ib & 0X0F];
String s = new String(ob);
return s;
}
}