自己跟着老师讲的课程做的笔记,有什么问题欢迎大家指出。
NetworkInterface类
接口可以是物理接口,也可以是虚拟的接口,具有IP地址
工厂方法
public static NetworkInterface getByName(String name) throws SocketException
getByName()
方法返回一个NetWorkInterface
对象,表示有指定名字的网络接口。如果没有这样一个接口,就返回null。如果在查找相关网络接口时底层网络栈遇到问题,会抛出一个SocketException
异常,不过这种情况不太可能发生。
public static NetworkInterface getByInetAddress(InetAddress address) throws SocketException
getByInetAddress()
方法返回一个NetworkInterface
对象,表示与指定IP地址绑定的网络接口。如果本地主机上没有网络接口与这个IP地址绑定,就返回null。
public static Enumeration getNetworkInterfaces() throws SocketException
getNetworkInterfaces()
方法返回一个java.util.Enumeration
,这会列出本地主机上的所有网络接口。
示例4-8:列出所有网络接口的程序
import java.net.*;
import java.util.*;
public class InterfaceLister{
public static void main(String [] args) throws SocketException{
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while(interfaces.hasMoreElements()){
NetworkInterface ni = interfaces.nextElement();
System.out.println(ni);
}
}
}
下面是在IBiblio登录服务器上运行的这个程序的结果:
% Java InterfaceLister
name:eth1 (eth1) index: 3 address:
/192.168.210.122;
name:eth0 (eth0) index: 2 address:
/152.2.210.122;
name:lo (lo) index: 1 address:
/127.0.0.1;
获取方法
public Enumeration getInetAddresses()
getInetAddresses()
方法返回一个java.util.Enumeration
,其中对于与这个接口绑定的每一个IP地址都包含一个InetAddress
。
public String getName()
getName()
方法返回某个特定的NetworkInterface
对象的名,如eth0
或lo
。
SpamCheck
要查看一个IP
地址是否是一个已知的垃圾邮件发送者,可以逆置这个地址的字节,增加黑洞服务的域,然后查找这个地址。如果找到这个地址,说明它是一个垃圾邮件发送者。如果没有找到,就说明它不是。例如你想向sbl.spamhaus.org询问207.87.34.17是否是以个垃圾邮件发送者,就要查找主机名17.34.87.207.sbl.spamhaus.org。
如果DNS查找成功,那么这个主机就是一个已知的垃圾邮件发送者。如果查找失败,也就是说,它抛出一个UnknownHostException
,说明这个地址不是一个垃圾邮件发送者。
示例:4-9:SpamCheck
import java.net.*;
public class SpamCheck{
public static final String BLACKHOLE = "sbl.spamhaus.org";
public static void main(String [] args) throws UnknownHostException{
for(String arg : args){
if(isSpammer(arg)){
System.out.println(arg + " is a known spammer.");
}else{
System.out.println(arg + " appears legitimate.");
}
}
}
private static boolean isSpammer(String arg){
try{
InetAddress address = InetAddress.getByName(arg);
byte [] quad = address.getAddress();
String query = BLACKHOLE;
for(byte octet : quad){
int unsignedByte = octet < 0 ? octet + 256 : octet;
query = unsignedByte + "." +query;
}
InetAddress.getByName(query);
return true;
}catch(UnknownHostException e){
return false;
}
}
}
转载:https://blog.csdn.net/qq_43175672/article/details/105492665