#include #include main(int argc,char **argv) { char linia[500],l1[200],country[20],*iptable; unsigned ip1,ip2,ip3,ip4,eip1,eip2,eip3,eip4; unsigned jump,mask,maskmax,iptsize; if(argc!=3) { fputs( "RIPE database to squid acl converter\n\n" "Usage:\n" "download ripe.db.in.gz from ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.in.gz\n" "then run\n\n" "zcat ripe.db.in.gz|ripe2acl country maxmask >aclfile\n" "where:\n\n" "country - 2 letter country code for which generate acl's\n" "maxmask - defines maximum mask value in output\n" "value 26 of maxmask (i.e. min 64 IP allocation) seems good as RIPE never allocated smaller zones\n" "using smaller value means less exact acl's but less memory usage\n" "maximum memory required is 1<>(32-maskmax); eip1=((eip1<<24)+(eip2<<16)+(eip3<<8)+eip4)>>(32-maskmax); while(ip1<=eip1) iptable[ip1++]=maskmax; } } //IP table compression for(jump=1,mask=maskmax;mask>0;jump<<=1,mask--) { for(ip1=0;ip1>24,(ip2>>16)&0xff,(ip2>>8)&0xff,ip2&0xff,iptable[ip1]); } }