#! /usr/local/bin/perl # crlenc.pl filename > outfilename # encodes IP addresses for privacy consideration, # and shortend non-TCP packet headers open(infile,$ARGV[0]) || die("Can't open input file\n"); # skip header while(read(infile,$record,512)){ $cellcount=vec($record,2,8)*256+vec($record,3,8); $interface=vec($record,4,8)*256+vec($record,5,8); printf stderr "$interface\t$cellcount\n"; syswrite(stdout,$record,512); # packet entries for ($lccnt = 1; $lccnt <= 17408; $lccnt++) { # delete $record; vec($record2,0,32)=0; vec($record2,1,32)=0; vec($record2,2,32)=0; vec($record2,3,32)=0; vec($record2,4,32)=0; vec($record2,5,32)=0; vec($record2,6,32)=0; vec($record2,7,32)=0; vec($record2,8,32)=0; vec($record2,9,32)=0; vec($record2,10,32)=0; vec($record2,11,32)=0; vec($record2,12,32)=0; vec($record2,13,32)=0; vec($record2,14,32)=0; read(infile,$record,60) || exit(1); if($lccnt > $cellcount){syswrite(stdout,$record2,60);next;} if(vec($record,9,16) != 0x0800){ # guesswork, silly ATM syswrite(stdout,$record,20); syswrite(stdout,$record2,40); next; } $src = vec($record,8,32); $sid=($src>>28)&0xf; $srcn=$src & 0xf0000000;$srch=$src & 0x0fffffff; if($sid < 0xe) {$srcn=$src & 0xffffff00;$srch=$src & 0x000000ff;} if($sid < 0xc) {$srcn=$src & 0xffff0000;$srch=$src & 0x0000ffff;} if($sid < 0x8) {$srcn=$src & 0xff000000;$srch=$src & 0x00ffffff;} if(!$id{$srcn,-1}) {$id{$srcn,-1} = ++$netcount;} if(!$id{$srcn,$srch}) {$id{$srcn,$srch} = ++$hstcount{$srcn};} $src=($id{$srcn,-1}<<16) + $id{$srcn,$srch}; vec($record,8,32)=$src; $dst = vec($record,9,32); $did=($dst>>28)&0xf; $dstn=$dst & 0xf0000000;$dsth=$dst & 0x0fffffff; if($did < 0xe) {$dstn=$dst & 0xffffff00;$dsth=$dst & 0x000000ff;} if($did < 0xc) {$dstn=$dst & 0xffff0000;$dsth=$dst & 0x0000ffff;} if($did < 0x8) {$dstn=$dst & 0xff000000;$dsth=$dst & 0x00ffffff;} if(!$id{$dstn,-1}) {$id{$dstn,-1} = ++$netcount;} if(!$id{$dstn,$dsth}) {$id{$dstn,$dsth} = ++$hstcount{$dstn};} $dst=($id{$dstn,-1}<<16) + $id{$dstn,$dsth}; vec($record,9,32)=$dst; $iprot=vec($record,29,8); if($iprot == 6){ syswrite(stdout,$record,60); }elsif($iprot == 17){ syswrite(stdout,$record,20+20+8); syswrite(stdout,$record2,12); }elsif($iprot == 1){ syswrite(stdout,$record,20+20+8); syswrite(stdout,$record2,12); }else{ syswrite(stdout,$record,20+20); syswrite(stdout,$record2,20); } } }