package com.mz.xx.code;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
public class InetAddressExample {
public static void main(String[] args) {
try {
//1.获取主机的网络接口列表
//静态方法getNetworkInterface()返回一个列表,其中包含勒该主机每一个接口所对应的NetworkInterface类实例。
Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces();
if(interfaceList==null){
System.out.println("--No interface found--");
}else{
while(interfaceList.hasMoreElements()){
NetworkInterface iface = interfaceList.nextElement();
System.out.println("interface "+iface.getName()+":");
Enumeration<InetAddress> addrList = iface.getInetAddresses();
if(!addrList.hasMoreElements()){
System.out.println("\t(No address for this interface)");
}
while(addrList.hasMoreElements()){
InetAddress address = addrList.nextElement();
System.out.print("\tAddress"+((address instanceof Inet4Address ? "(v4)" :(address instanceof Inet6Address ? "(v6)" : "(?)"))));
System.out.println(": "+address.getHostAddress());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
for(String host : args){
try {
System.out.println(host+":");
InetAddress[] addressList = InetAddress.getAllByName(host);
for(InetAddress address: addressList){
System.out.println("\t"+address.getHostName()+"/" + address.getHostAddress());
}
} catch (UnknownHostException e) {
System.out.println("\tUnable tofind addrss for"+host);
}
}
}
}
package com.mz.xx.code;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
public class Test {
/* 一:IPv4 与 IPv6
* 互联网地址由二进制数字组成,有两种形式,分别对应勒两个版本的标准互联网协议.
* IPv4: 地址长为32位 IPV4被表示为一组4个十进制数,每两个数字之间由原点隔开(如:10.1.2.3),
* 这种表示方法叫做 点分形式.点分形式字符串中的4个数字代表勒互联网地址的4个字节,也就是
* 说,每个数字的范围是0-255.
* IPv6: 地址长为128位.IPv6地址的16个字节由几组16进制的数字表示,这些16进制数字之间由分号隔开
* (如:2000:fdb8:0000;0000:0001:00ab:853c:39a1)
*
* 二:InetAddress类代表一个网络目标地址,t包括主机名和数字类型的地址信息。
* 该类有两个子类,Inet4Address和Inet6Address,分别对应勒目前IP地址的两个版本.
* InetAddress实例是不可变得,一旦创建,每个实例始终 指向同一个地址.
*
* 三:Ip地址实际上是分配给主机与网络之间的链接,而不是主机本身.NetworkInterface类提供访问主机
* 所有接口的信息的功能.这个功能非常有用,当一个程序需要通知其他程序其IP地址时就会用到.
*
*/
public static void main(String[] args) {
// try {
// Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces();
// while(interfaceList.hasMoreElements()){
// NetworkInterface iface = interfaceList.nextElement();
// System.out.println("Interface "+iface.getName()+":");
// Enumeration<InetAddress> addrList = iface.getInetAddresses();
//
// while(addrList.hasMoreElements()){
// InetAddress address = addrList.nextElement();
// System.out.println(address.toString()+"\t"+address.getHostName());
// }
// }
// } catch (SocketException e) {
// e.printStackTrace();
// }
/**
* host : 为服务器地址.可以是字符串(IPv6--- )、也可以是数字型地址()。
*/
String host = "www.baidu.com";
try {
InetAddress[] addressList = InetAddress.getAllByName(host);
for(InetAddress address : addressList){
System.out.println("\t"+address.getHostName()+"\t"+address.getHostAddress());
}
} catch (UnknownHostException e) {
System.out.println("\tUnable to find address for" + "192.168.1.71");
}
}
}