一台服务器有两网卡,网卡A为内网用,网卡B为公网IP,
我是这样获取的 java.net.InetAddress.getLocalHost().getHostAddress().toString() 却默认获取为A网的IP
现在我只想获取B的IP地址?应该怎样处理,赐教!!!
[code="java"]java.net.InetAddress.getLocalHost().getHostAddress().toString() [/code]
这个返回的是本地DNS服务在本地DNS域中的查询结果,如果你的B网地址并没有登记在本地DNS服务中,是不会被返回的。
[code="java"]InetAddress.getAllByName(String host) [/code]
这个代码同样是无法解决你的问题的,因为InetAddress是用来处理[color=red]DNS[/color]相关问题的。
你应该使用NetworkInterface这个类,如果想枚举你机器上的网络接口(实际物理网卡和虚拟网卡都可以),请用
[code="java"]import java.net.*;
import java.util.*;
public class InterfaceLister {
public static void main(String[] args) throws Exception {
Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
System.out.println(ni);
}
}
}[/code]
更详细的信息请见[i]Java Network Programming, 3rd Edition[/i]
InetAddress.getAllByName(String host)
在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
刚好可以借鉴一下。