Linux下获得本机IP(非127.0.0.1)
16lz
2021-01-22
在Linux下用InetAddress.getLocalHost()方法获取本机IP地址,
得到的结果总是:127.0.1.1。
原来这个是etc/hosts文件中的配置,并非网卡的IP地址。
可用代码如下:
/**
* IP工具类
* @author lyh
* @version 2012-7-5
* @see IpGetter
* @since
*/
public class IpGetter
{
/**
* 日志
*/
private static final Logger log = Logger.getLogger(IpGetter.class);
/**
* 单网卡名称
*/
private static final String NETWORK_CARD = "eth0";
/**
* 绑定网卡名称
*/
private static final String NETWORK_CARD_BAND = "bond0";
/**
*
* Description: 得到本机名<br>
* @return
* @see
*/
public static String getLocalHostName()
{
try
{
InetAddress addr = InetAddress.getLocalHost();
return addr.getHostName();
}
catch (Exception e)
{
log.error("IpGetter.getLocalHostName出现异常!异常信息:" + e.getMessage());
return "";
}
}
/**
* Description: linux下获得本机IPv4 IP<br>
* @return
* @see
*/
public static String getLocalIP()
{
String ip = "";
try
{
Enumeration<NetworkInterface> e1 = (Enumeration<NetworkInterface>)NetworkInterface.getNetworkInterfaces();
while (e1.hasMoreElements())
{
NetworkInterface ni = e1.nextElement();
//单网卡或者绑定双网卡
if ((NETWORK_CARD.equals(ni.getName()))
|| (NETWORK_CARD_BAND.equals(ni.getName())))
{
Enumeration<InetAddress> e2 = ni.getInetAddresses();
while (e2.hasMoreElements())
{
InetAddress ia = e2.nextElement();
if (ia instanceof Inet6Address)
{
continue;
}
ip = ia.getHostAddress();
}
break;
}
else
{
continue;
}
}
}
catch (SocketException e)
{
log.error("IpGetter.getLocalIP出现异常!异常信息:" + e.getMessage());
}
return ip;
}
}
PS:存在虚拟机的linux的环境可能会多出一个虚拟网卡,virbro,对应的ip地址是 192.168.122.1 。
参考:http://www.iteye.com/topic/654345
更多相关文章
- Linux系统下用C语言获取MAC地址
- Red Hat Linux下如何修改网卡MAC地址
- 在fc8安装TP-Linux WN3210G+USB无线网卡,提示wlan0 No scan resul
- 一些下载交叉编译环境的地址
- 如何使用SQL语句查到当前SQL SERVER 2000服务器的IP地址
- 如何通过HttpURLConnection得到http 302的跳转地址
- 让Android 设备通过USB 转RJ45有线网卡上网
- Java Android套接字连接。错误的IP地址导致应用程序停止响应
- Android利用IP地址定位城市(全世界可用)