简单方法(WIN32测试通过):
InetAddress addr = InetAddress.getLocalHost();
String ip=addr.getHostAddress().toString();//获得本机IP
String address=addr.getHostName().toString();//获得本机名称
支持Windows,Linux, 支持多网卡(根据网卡取本机配置的IP)
- /**
- * 根据网卡取本机配置的IP
- * 如果是双网卡的,则取出外网IP
- * @return
- */
- public static String getIp(){
- String localip=null;//本地IP,如果没有配置外网IP则返回它
- String netip=null;//外网IP
- try {
- Enumeration<NetworkInterface> netInterfaces =
NetworkInterface.getNetworkInterfaces(); - InetAddress ip = null;
- boolean finded=false;//是否找到外网IP
- while(netInterfaces.hasMoreElements() && !finded){
- NetworkInterface ni=netInterfaces.nextElement();
- Enumeration<InetAddress> address=ni.getInetAddresses();
- while(address.hasMoreElements()){
- ip=address.nextElement();
- System.out.println(ni.getName() +";"+ip.getHostAddress() +";ip.isSiteLocalAddress()="+ip.isSiteLocalAddress()+";ip.isLoopbackAddress()="+ip.isLoopbackAddress());
- if( !ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":")==-1){//外网IP - netip=ip.getHostAddress();
- finded=true;
- break;
- }else if(ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
&& ip.getHostAddress().indexOf(":")==-1){//内网IP - localip=ip.getHostAddress();
- }
- }
- }
- } catch (SocketException e) {
- e.printStackTrace();
- }
- if(netip!=null && !"".equals(netip)){
- return netip;
- }else{
- return localip;
- }
- }