java.net.InetAddress类
IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础。InetAddress是Java对IP地址的封装,在java.net中有许多类都使用到了InetAddress,
包括ServerSocket,Socket,DatagramSocket等等。
InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。
InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。对于DNS来说,
本地需要向DNS服务器发送查询的请求,然后服务器根据一系列的操作,返回对应的IP地址,为了提高效率,通常本地会缓存一些主机名与IP地址的映射,这样访问相同的地址,就不需要重复发送DNS请求了。
在java.net.InetAddress类同样采用了这种策略。在默认情况下,会缓存一段有限时间的映射,对于主机名解析不成功的结果,会缓存非常短的时间(10秒)来提高性能。
//在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress[] getAllByName(String host)
//返回此 InetAddress 对象的原始 IP 地址。
static InetAddress getByAddress(byte[] addr)
// 根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress getByAddress(String host,byte[] addr)
//在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress getByName(String host)
// 返回本地主机。
static InetAddress getLocalHost()
//获取此 IP 地址的完全限定域名。
getCanonicalHostName()
// 获取此 IP 地址的主机名。
getHostName()
中文官方文档地址:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/net/InetAddress.html
java项目内部获取IP地址:
只针对单一网卡的,直接获取本地IP地址
String ip = InetAddress.getLocalHost().getHostAddress();
获取网站的IP:
InetAddress[] addresses = InetAddress.getByName("www.sina.com.cn");
针对多网卡情况获取IP:
try {
Enumeration<NetworkInterface> interfaces=null;
interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface ni = interfaces.nextElement();
Enumeration<InetAddress> addresss = ni.getInetAddresses();
while(addresss.hasMoreElements()){
InetAddress nextElement = addresss.nextElement();
String hostAddress = nextElement.getHostAddress();
System.out.println("本机IP地址为:" +hostAddress);
}
}
} catch (Exception e) {
e.printStackTrace();
}