blob: 96a17e435ed0994f891e4c31053c698942f7ca14 [file] [log] [blame]
// 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<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();
}
}