想做一个网络防火墙设计具有基本的IP地址,端口,服务过滤功能,具有配置过滤策略功能,具有方便的界面操作及显示功能等。
(含源代码至少三百行,加注解)
http://c-j.iteye.com/blog/364552
如google code下载不便,采纳本回答后,可以代下载。
java.net
类:DatagramPacket
DatagramSocket
或者:ServerSocket
Socket
这些类都有一个返回端口的方法,ServerSocket是getLocalPort() ,其他三个是getPort()。如果返回的端口是80,那么就禁止接收或者发送数据,并给与适当的提示信息。
1. IP地址和端口号:
1) IP地址用于在网络中唯一标识一台机器(通信实体),是一个32位整数,通常用4个0-255的十进制数标识;
2) 端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能用有两个程序占用同一个端口:
i. 端口号是一个16位整数,共有3类;
ii. 公认端口:0-1023,它们紧密绑定一些特定的服务(比如TCP/IP通信协议程序的端口);
iii. 注册端口:1024-49151,它们松散绑定一些特定服务,其余可以随意使用,应用程序用的最多端口号来自于这个范围;
iv. 动态/私有端口:49152-65535,这些端口一般是应用程序运行时临时地、动态地占用,可以说是一种竞争资源吧,应用程序本身不会和这些端口绑定,一般会将其作为资源利用;
3) 也就是说真正参与网络通信的对象是计算机上的程序(网络通信程序),IP地址是它的街道门牌,而端口是它的房间号;
Java的IP地址类:
1) InetAdress是Java的IP地址类,它的对象就代表一个IP地址,它有两个重要的子类,一个是Inet4Adress,另一个是Inet6Adress,分别表示IPv4和IPv6地址,IPv6地址有64位,是下一代互联网的主打;
2) 创建InetAdress对象:Java并没有为其提供构造器,而是使用静态方法来构造InetAdress对象;
i. static InetAddress getByName(String host); // 根据主机名创建对象,主机名就是英文字母地址,比如"www.xxx.com"之类的
ii. static InetAddress getByAddress(byte[] addr); // 根据4字节地址创建对象,比如new byte[] {192, 168, 10, 1}之类的
iii. static InetAddress getLocalHost(); // 直接获取本机IP地址并创建对象(即本机接入互联网的IP地址,不是本地回环地址127.0.0.1)
3) 查询地址信息:调用InetAdress的对象方法获取和地址有关的信息
i. String getHostName(); // 获取主机英文字符名,即"www.xxx.com"之类的
ii. String getHostAddress(); // 获取主机4位十进制数地址(以字符串形式返回),比如"192.168.10.2",注意是字符串,不是byte[]
iii. String getCanonicalHostName(); // 获取主机的全限定域名(FQDN,Fully-Qualified-Domain-Name)
4) 检查地址是否可达:调用InetAdress的isReachable方法
i. boolean isReachable(int timeout);
ii. 内部调用ping命令查看是否可达;
iii. timeout是限时,如果超过该限时还未响应就直接判定为不可达,时间单位是毫秒;
iv. 注意:该方法会尽一切可能和目标建立通信,如果设置了防火墙之类的可能会阻塞该方法而返回false;
5) 示例:
[java] view plain copy
1.public class Test {
2.
3. private final static String baidu = "www.baidu.com";
4. private final static byte[] local = new byte[] {127, 0, 0, 1};
5.
6. private static void print(InetAddress ip) throws IOException {
7. System.out.println("Host Adress: " + ip.getHostAddress());
8. System.out.println("Host Name: " + ip.getHostName());
9. System.out.println("Canonical Host Name: " + ip.getCanonicalHostName());
10. }
11.
12. public static void main(String[] args) throws IOException {
13. InetAddress ip = InetAddress.getByName(baidu);
14. print(ip);
15. ip = InetAddress.getByAddress(local);
16. print(ip);
17. ip = InetAddress.getLocalHost();
18. print(ip);
19.
20. }
21.}