飞道的博客

Java网络编程-NetworkInterface类

308人阅读  评论(0)

自己跟着老师讲的课程做的笔记,有什么问题欢迎大家指出。

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对象的名,如eth0lo

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场