Java获取本地服务器IP,我们最简单的写法:
import java.net.InetAddress; public class CatchIp{ public static void main(String[] args) { try { // 获取IP地址 String ip = InetAddress.getLocalHost().getHostAddress(); System.out.println("IP地址:"+ip); } catch (Exception e) { System.out.println("异常:" + e); e.printStackTrace(); } } }
但是放在linux,可能是获取的IP地址为:127.0.0.1
而且在生产系统中,一台服务器可能有很多张网卡,这样获取ip比较麻烦,具体要了解生产系统服务器的IP地址我们可以参考这个网址:
http://blog.163.com/abkiss@126/blog/static/3259410020117493943770/?suggestedreading
代码如下:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.lib.com; /** * * @author Administrator */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class TestAddr { /** * 获取本机所有IP */ private static String[] getAllLocalHostIP() { List<String> res = new ArrayList<String>(); Enumeration netInterfaces; try { netInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; while (netInterfaces.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) netInterfaces .nextElement(); System.out.println("---Name---:" + ni.getName()); Enumeration nii = ni.getInetAddresses(); while (nii.hasMoreElements()) { ip = (InetAddress) nii.nextElement(); if (ip.getHostAddress().indexOf(":") == -1) { res.add(ip.getHostAddress()); System.out.println("本机的ip=" + ip.getHostAddress()); } } } } catch (SocketException e) { e.printStackTrace(); } return (String[]) res.toArray(new String[0]); } public static String getLocalIP() { String ip = ""; try { Enumeration<?> e1 = (Enumeration<?>) NetworkInterface.getNetworkInterfaces(); while (e1.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) e1.nextElement(); System.out.println ("getLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); System.out.println ("getLocalIP--nic.getName ():" + ni.getName ()); 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; } public static String getWinLocalIP () { String ip = ""; try { Enumeration <?> e1 = (Enumeration <?>) NetworkInterface.getNetworkInterfaces (); while (e1.hasMoreElements ()) { NetworkInterface ni = (NetworkInterface) e1.nextElement (); System.out.println ("getWinLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); System.out.println ("getWinLocalIP--nic.getName ():" + ni.getName ()); Enumeration <?> e2 = ni.getInetAddresses (); while (e2.hasMoreElements ()) { InetAddress ia = (InetAddress) e2.nextElement (); ip = ia.getHostAddress (); } } } catch (SocketException e) { e.printStackTrace (); System.exit (-1); } return ip; } /** * 获取本机所有物理地址 * * @return */ public static String getMacAddress() { String mac = ""; String line = ""; String os = System.getProperty("os.name"); if (os != null && os.startsWith("Windows")) { try { String command = "cmd.exe /c ipconfig /all"; Process p = Runtime.getRuntime().exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(p .getInputStream())); while ((line = br.readLine()) != null) { if (line.indexOf("Physical Address") > 0) { int index = line.indexOf(":") + 2; mac = line.substring(index); break; } } br.close(); } catch (IOException e) { } } return mac; } public String getMacAddress(String host) { String mac = ""; StringBuffer sb = new StringBuffer(); try { NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress .getByName(host)); // byte[] macs = ni.getHardwareAddress(); // for (int i = 0; i < macs.length; i++) { // mac = Integer.toHexString(macs[i] & 0xFF); // // if (mac.length() == 1) { // mac = '0' + mac; // } // // sb.append(mac + "-"); // } } catch (SocketException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } mac = sb.toString(); mac = mac.substring(0, mac.length() - 1); return mac; } /** * @param args */ public static void main(String[] args) { TestAddr.getAllLocalHostIP(); System.out.println("LocalIP:"+TestAddr.getLocalIP()); System.out.println("getWinLocalIP:"+TestAddr.getWinLocalIP()); System.out.println(TestAddr.getMacAddress()); } }当然 ,我们经常有个偷懒的做法,那就是获取服务器的hostname,即主机名,写法也比较统一简单:
import java.net.InetAddress; public class CatchHostname{ public static void main(String[] args) { try { // 获取计算机名 String name = InetAddress.getLocalHost().getHostName(); System.out.println("计算机名:"+name); } catch (Exception e) { System.out.println("异常:" + e); e.printStackTrace(); } } }
原文地址:http://blog.csdn.net/asartear/article/details/44004627