1 6 7 package com.quikj.server.framework; 8 9 import java.net.*; 10 import java.util.*; 11 12 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 23 public AceNetworkAccess() 24 { 25 } 26 27 public boolean add(String network, String netmask) 28 { 29 try 30 { 31 list.put(InetAddress.getByName(network), 32 InetAddress.getByName(netmask)); 33 34 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 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 [] 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 |