java代码制作一个简单的防火墙

想做一个网络防火墙设计具有基本的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地址是它的街道门牌,而端口是它的房间号;
  1. 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.}