// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.bridge.util; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Formatter; import java.util.List; import org.apache.log4j.Logger; public class NetHelper { protected final static Logger logger = Logger.getLogger(NetHelper.class); public static String getHostName() { try { InetAddress localAddr = InetAddress.getLocalHost(); if(localAddr != null) { return localAddr.getHostName(); } } catch(UnknownHostException e) { logger.warn("UnknownHostException when trying to get host name. ", e); } return "localhost"; } public static InetAddress[] getAllLocalInetAddresses() { List addrList = new ArrayList(); try { for(NetworkInterface ifc : IteratorHelper.enumerationAsIterable(NetworkInterface.getNetworkInterfaces())) { if(ifc.isUp() && !ifc.isVirtual()) { for(InetAddress addr : IteratorHelper.enumerationAsIterable(ifc.getInetAddresses())) { addrList.add(addr); } } } } catch (SocketException e) { logger.warn("SocketException in getAllLocalInetAddresses().", e); } InetAddress[] addrs = new InetAddress[addrList.size()]; if(addrList.size() > 0) System.arraycopy(addrList.toArray(), 0, addrs, 0, addrList.size()); return addrs; } public static InetAddress getFirstNonLoopbackLocalInetAddress() { InetAddress[] addrs = getAllLocalInetAddresses(); if(addrs != null) { for(InetAddress addr : addrs) { if(logger.isInfoEnabled()) logger.info("Check local InetAddress : " + addr.toString() + ", total count :" + addrs.length); if(!addr.isLoopbackAddress()) return addr; } } logger.warn("Unable to determine a non-loopback address, local inet address count :" + addrs.length); return null; } public static String getMacAddress(InetAddress address) { StringBuffer sb = new StringBuffer(); Formatter formatter = new Formatter(sb); try { NetworkInterface ni = NetworkInterface.getByInetAddress(address); byte[] mac = ni.getHardwareAddress(); for (int i = 0; i < mac.length; i++) { formatter.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : ""); } } catch (SocketException e) { logger.error("SocketException when trying to retrieve MAC address", e); } return sb.toString(); } }