KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quikj > server > framework > AceNetworkAccess


1 /*
2  * AceNetworkAccess.java
3  *
4  * Created on July 5, 2002, 3:43 AM
5  */

6
7 package com.quikj.server.framework;
8
9 import java.net.*;
10 import java.util.*;
11
12 /**
13  *
14  * @author amit
15  */

16 public class AceNetworkAccess
17 {
18     private HashMap list = new HashMap();
19     private InetAddress[] networkList = new InetAddress[0];
20     private InetAddress[] netmaskList = new InetAddress[0];
21     
22     /** Creates a new instance of AceNetworkAccess */
23     public AceNetworkAccess()
24     {
25     }
26     
27     public boolean add(String JavaDoc network, String JavaDoc netmask)
28     {
29         try
30         {
31             list.put(InetAddress.getByName(network),
32             InetAddress.getByName(netmask));
33             
34             // re-do the lists
35
Set network_list = list.keySet();
36             networkList = new InetAddress[network_list.size()];
37             networkList = (InetAddress[])network_list.toArray(networkList);
38             
39             Collection netmask_list = list.values();
40             netmaskList = new InetAddress[netmask_list.size()];
41             netmaskList = (InetAddress[])netmask_list.toArray(netmaskList);
42             
43             return true;
44         }
45         catch (UnknownHostException ex)
46         {
47             return false;
48         }
49     }
50     
51     public boolean match(String JavaDoc host)
52     {
53         try
54         {
55             byte[] addr = InetAddress.getByName(host).getAddress();
56             
57             for (int i = 0; i < networkList.length; i++)
58             {
59                 byte[] anded = byteArrayAnd(addr, netmaskList[i].getAddress());
60                 if (byteArrayEquals(anded, networkList[i].getAddress()) == true)
61                 {
62                     return true;
63                 }
64             }
65         }
66         catch (UnknownHostException ex)
67         {
68             return false;
69         }
70         
71         return false;
72     }
73     
74     private byte[] byteArrayAnd(byte[] a, byte[] b)
75     {
76         byte[] c = new byte[a.length];
77         
78         for (int i = 0; i < a.length; i++)
79         {
80             c[i] = (byte)((a[i]) & (b[i]));
81         }
82         
83         return c;
84     }
85     
86     private boolean byteArrayEquals(byte[] a, byte[] b)
87     {
88         for (int i = 0; i < a.length; i++)
89         {
90             if (a[i] != b[i]) return false;
91         }
92         
93         return true;
94     }
95     
96     public static void main(String JavaDoc[] args)
97     {
98         if (((args.length % 2) != 1) && (args.length < 3))
99         {
100             System.err.println("Param 1 = network, Param 2 = netmask, ....... Param n = address");
101             System.exit(1);
102         }
103         
104         AceNetworkAccess access = new AceNetworkAccess();
105         
106         
107         for (int i = 0; i < args.length - 1; i+=2)
108         {
109             if (access.add(args[i], args[i+1]) == false)
110             {
111                 System.err.println ("Either network address " + args[i]
112                 + " and/or netmask " + args[i+1] + " is not in IP address format");
113                 System.exit(1);
114             }
115         }
116         
117         if (access.match(args[args.length - 1]) == true)
118         {
119             System.out.println ("MATCHED!");
120         }
121         else
122         {
123             System.out.println ("NOT MATCHED");
124         }
125         
126         System.exit(0);
127     }
128 }
129
Popular Tags