| /* | |
| * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved. | |
| * | |
| * Licensed 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; | |
| /** | |
| * @author Kelven Yang | |
| */ | |
| 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<InetAddress> addrList = new ArrayList<InetAddress>(); | |
| 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(); | |
| } | |
| } |