关于多网卡读取IP相关信息

来源:互联网 发布:arm linux 启动过程 编辑:程序博客网 时间:2024/06/10 21:12

最近集群将增加一批双网卡的机器,这时我就突然想到如何获取这些网卡的IP地址。但是第一次尝试用InetAddress没有得到预期结果。

运行结果这里使用到本机(MAC OS环境)的/etc/hosts这个文件获取相关IP信息(当然InetAddress获取主机名称处理没有这么简单,这里就不详细说明)

// 通过/etc/hosts来获取

InetAddress[] adds = InetAddress.getAllByName("master");

for (InetAddress t_add : adds) {

   System.out.println(t_add);

}


后来在网上搜索了下,相关的处理,发现很多都是用调用外部命令的方式来获取,我个人觉得还是有点别扭,后来看看相关的java源码,可以用这个类NetworkInterface实现,使用方法

很简单,代码截取如下:

// 获取本地相关网卡信息 类似于ifconfig

Enumeration<NetworkInterface> list = NetworkInterface

.getNetworkInterfaces();

for (; list.hasMoreElements();) {

NetworkInterface nint = list.nextElement();

System.out.println("Net Card: " + nint.getDisplayName());

for (Enumeration<InetAddress> addresses = nint.getInetAddresses(); addresses

.hasMoreElements();) {

InetAddress i_adr = addresses.nextElement();

System.out.println("------->" + i_adr.getHostAddress());

}

}


就可以获取多个网卡的IP地址了。


运行结果如下:

Net Card: en1

------->fe80:0:0:0:XXXX:XXXX:XXXX:a6c0%5

------->192.168.1.18

Net Card: en0

------->fe80:0:0:0:XXXX:XXXX:XXXX:32e5%4

------->10.XXX.XXX.XXX

Net Card: lo0

------->0:0:0:0:0:0:0:1

------->fe80:0:0:0:0:0:0:1%1

------->127.0.0.1


X表示屏蔽掉真实IP。

其实这里也把MAC地址给解析出来了。


这里就延伸出几个问题:

就是hadoop本身对多网卡的处理机制,在master主机上配置hosts这个文件,如何去修改。

当是多网卡的时候,网卡的利用率如何。

最近在内网试用了下多网卡,发现只要一个网卡口接入网线,另一个网卡口不接网线。还是可以ping通这个网卡(不接网线)的IP地址。