[2] | 1 | #!/usr/bin/perl -W -T
|
---|
| 2 | # db2rwhois.pl
|
---|
| 3 | # Pull data from ipdb and mangle it into RWHOIS
|
---|
| 4 | # Initial version 03/26/2004 kdeugau
|
---|
| 5 |
|
---|
| 6 | use DBI;
|
---|
| 7 | use NetAddr::IP;
|
---|
| 8 |
|
---|
| 9 | $ENV{"PATH"} = "/bin;/usr/bin";
|
---|
| 10 |
|
---|
| 11 | # We'll pull this out of the database instead. Just make sure our
|
---|
| 12 | # master blocks are actually listed.... <g>
|
---|
| 13 | #@masterblocks = (
|
---|
| 14 | # (new NetAddr::IP "10.0.0.0/8"),
|
---|
| 15 | # (new NetAddr::IP "172.16.0.0/12"),
|
---|
| 16 | # (new NetAddr::IP "192.168.0.0/16")
|
---|
| 17 | # );
|
---|
| 18 |
|
---|
| 19 | $dbh = DBI->connect("dbi:mysql:ipdb", "root", "")
|
---|
| 20 | or die $DBI::errstr;
|
---|
| 21 |
|
---|
| 22 | # Fill in data about our master blocks as allocated from ARIN
|
---|
| 23 | # We open separate files for each of these as appropriate.
|
---|
| 24 | # Note that this ASS-U-MEs that we do not add master IP blocks-
|
---|
| 25 | # there should probably be a separate system for doing that.
|
---|
| 26 | $sth = $dbh->prepare("select * from masterblocks;");
|
---|
| 27 | $sth->execute;
|
---|
| 28 | $i=0;
|
---|
| 29 | while (@data = $sth->fetchrow_array()) {
|
---|
| 30 | # Get the "full" network number+CIDR mask
|
---|
| 31 | $cidr = $data[0].".".$data[2].$data[1];
|
---|
| 32 |
|
---|
| 33 | $masterblocks[$i] = new NetAddr::IP $cidr;
|
---|
| 34 |
|
---|
| 35 | chomp ($date = `/bin/date +"%Y%m%d"`);
|
---|
| 36 |
|
---|
| 37 | # Whew! Ugly little varmint.
|
---|
| 38 | $masterfilename = "net-".$masterblocks[$i]->addr."-".$masterblocks[$i]->masklen.
|
---|
| 39 | "/data/network/".$masterblocks[$i]->addr."-".$masterblocks[$i]->masklen.".txt";
|
---|
| 40 |
|
---|
| 41 | open MASTERFILE,">$masterfilename";
|
---|
| 42 |
|
---|
| 43 | print MASTERFILE "ID: NETBLK-ISP.$masterblocks[$i]\n".
|
---|
| 44 | "Auth-Area: $masterblocks[$i]\n".
|
---|
| 45 | "Network-Name: ISP-".$masterblocks[$i]->network."\n".
|
---|
| 46 | "IP-Network: $masterblocks[$i]\n".
|
---|
| 47 | "IP-Network-Block: ".$masterblocks[$i]->range."\n".
|
---|
| 48 | "Organization: $data[3]\n".
|
---|
| 49 | "Tech-Contact: $data[9]\n".
|
---|
| 50 | "Admin-Contact: ISP-ARIN-HANDLE\n".
|
---|
| 51 | "Created: 20040401000000000\n".
|
---|
| 52 | "Updated: $date\n".
|
---|
| 53 | "Updated-By: noc\@example.com\n";
|
---|
| 54 |
|
---|
| 55 | close MASTERFILE;
|
---|
| 56 | $i++;
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 | # Now read out the data in the "main" delegation list, and check it
|
---|
| 60 | # with the master blocks. We need to do this to decide which rWHOIS
|
---|
| 61 | # "net-xxx.xxx.xxx.xxx-mask" tree the data belongs in.
|
---|
| 62 |
|
---|
| 63 | #$sth = $dbh->prepare("select * from blocks;");
|
---|
| 64 | $sth = $dbh->prepare("select * from tmpblocks;");
|
---|
| 65 | $sth->execute;
|
---|
| 66 |
|
---|
| 67 | while (@data = $sth->fetchrow_array()) {
|
---|
| 68 |
|
---|
| 69 | # We get master block info from @masterblocks.
|
---|
| 70 | # ID: NETBLK-ISP.10.0.0.0/8
|
---|
| 71 | # Auth-Area: 10.0.0.0/8
|
---|
| 72 | # Network-Name: ISP-10.0.2.144
|
---|
| 73 | # IP-Network: 10.0.2.144.144/29
|
---|
| 74 | # IP-Network-Block: 10.0.2.144 - 10.0.2.151
|
---|
| 75 | # Organization: WidgetCorp
|
---|
| 76 | # Tech-Contact: bob@widgetcorp.com
|
---|
| 77 | # Admin-Contact: ISP-ARIN-HANDLE
|
---|
| 78 | # Created: 20040314
|
---|
| 79 | # Updated: 20040314
|
---|
| 80 | # Updated-By: noc@example.com
|
---|
| 81 |
|
---|
| 82 | # Get the "full" network number
|
---|
| 83 | $netnum = $data[0].".".$data[2];
|
---|
| 84 |
|
---|
| 85 | $cidr = $netnum.$data[1];
|
---|
| 86 |
|
---|
| 87 | $net = new NetAddr::IP $cidr;
|
---|
| 88 |
|
---|
| 89 | # Assumptions: All data in ipdb is public
|
---|
| 90 | # If not, we need another field to indicate "public/private".
|
---|
| 91 |
|
---|
| 92 | foreach $master (@masterblocks) {
|
---|
| 93 | if ($master->contains($net)) {
|
---|
| 94 |
|
---|
| 95 | # Whew! Ugly little varmint.
|
---|
| 96 | $masterfilename = "net-".$master->addr."-".$master->masklen.
|
---|
| 97 | "/data/network/".$master->addr."-".$master->masklen.".txt";
|
---|
| 98 |
|
---|
| 99 | open MASTERFILE,">>$masterfilename";
|
---|
| 100 |
|
---|
| 101 | chomp ($date = `/bin/date +"%Y%m%d"`);
|
---|
| 102 | print MASTERFILE "---\nID: NETBLK-ISP.$master\n".
|
---|
| 103 | "Auth-Area: $master\n".
|
---|
| 104 | "Network-Name: ISP-".$net->network."\n".
|
---|
| 105 | "IP-Network: $net\n".
|
---|
| 106 | "IP-Network-Block: ".$net->range."\n".
|
---|
| 107 | "Organization: $data[5]\n".
|
---|
| 108 | # "Tech-Contact: $data[9]\n".
|
---|
| 109 | "Tech-Contact: abuse\@example.com\n".
|
---|
| 110 | "Admin-Contact: ISP-ARIN-HANDLE\n".
|
---|
| 111 | "Created: <date from db> (or today's date?)\n".
|
---|
| 112 | "Updated: $date\n".
|
---|
| 113 | "Updated-By: noc\@example.com\n";
|
---|
| 114 | }
|
---|
| 115 | }
|
---|
| 116 |
|
---|
| 117 |
|
---|
| 118 |
|
---|
| 119 | # print "$data[0]\t| $data[1]\t| $data[2]\t| $data[3]\t| $data[4]\t| ".
|
---|
| 120 | # "$data[5]\t| $data[6]\t| $data[7]\t| $data[8]\t| $data[9]\n";
|
---|
| 121 | # print "$data[0]\t| $data[1]\t| $data[2]\t| $data[3]\t| $data[4]\t| ".
|
---|
| 122 | # "$data[5]\t| $data[6]\t| $data[7]\t| $data[8]\n";
|
---|
| 123 |
|
---|
| 124 | } # while fetchrow_array()
|
---|
| 125 |
|
---|
| 126 |
|
---|
| 127 | $dbh->disconnect;
|
---|