Subversion Repositories vgwhois

Rev

Rev 77 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 daniel-mar 1
#!/usr/bin/php
2
<?php
3
 
4
#
11 daniel-mar 5
#  VGWhoIs (ViaThinkSoft Global WhoIs, a fork of generic Whois / gwhois)
5 daniel-mar 6
#  Maintenance / Developer utilities
2 daniel-mar 7
#
85 daniel-mar 8
#  (c) 2012-2022 by Daniel Marschall, ViaThinkSoft <info@daniel-marschall.de>
2 daniel-mar 9
#
5 daniel-mar 10
#  License: https://www.gnu.org/licenses/gpl-2.0.html (GPL version 2)
2 daniel-mar 11
#
12
 
13
# TODO: also use extended stats of the RIRs, which may have avails / reserved?
14
 
15
error_reporting(E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED);
16
 
17
require_once __DIR__ . '/config.inc.php';
18
require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php';
77 daniel-mar 19
 
20
/** @var array $rirs */
21
/** @var array $supports_extended_rirstat */
22
/** @var array $rir_whois_server */
23
/** @var array $rir_domain */
24
/** @var array $rirstat_urls */
25
/** @var array $ipv4_additional_params */
26
/** @var array $ipv6_additional_params */
27
/** @var array $asn_additional_params */
28
/** @var array $tld_additional_params */
2 daniel-mar 29
require_once __DIR__ . '/rirs.inc.php';
30
 
31
echo "ASN Preparation: Get IANA delegation file\n";
32
 
3 daniel-mar 33
$iana_asn_data = explode("\n", cached_file(IANA_AS_NUMBERS, CACHE_FILE_DIR));
34
$iana_asn_data = array_map('trim', $iana_asn_data);
2 daniel-mar 35
 
36
echo "ASN: Parsing...\n";
37
 
85 daniel-mar 38
$version = '';
39
foreach ($iana_asn_data as $i => $line) {
40
	if (trim($line) == 'Last Updated') {
41
		$version = trim(str_replace('-', '', $iana_asn_data[$i+1]));
42
	}
43
}
44
if ($version == '') die('ERROR: Cannot detect version of IANA ASN file ('.__FILE__.')');
2 daniel-mar 45
 
46
$iana_asn_data = grep($iana_asn_data, 'whois');
47
 
48
$iana_asn_data = implode("\n", $iana_asn_data);
49
 
50
$iana_asn_data = str_replace('Assigned by RIPE NCC', '', $iana_asn_data);
51
$iana_asn_data = str_replace('Assigned by AFRINIC',  '', $iana_asn_data); // do not change to 'AfriNIC' !
52
$iana_asn_data = str_replace('Assigned by LACNIC',   '', $iana_asn_data);
53
$iana_asn_data = str_replace('Assigned by APNIC',    '', $iana_asn_data);
54
$iana_asn_data = str_replace('Assigned by ARIN',     '', $iana_asn_data);
55
 
56
while (strpos($iana_asn_data, '  ') !== false) {
57
	$iana_asn_data = str_replace('  ', ' ', $iana_asn_data);
58
}
59
 
60
$out = '';
61
 
62
$ary = explode("\n", $iana_asn_data);
63
 
64
$res = array();
65
 
66
foreach ($ary as &$x) {
67
	$x = trim($x);
68
	if ($x == '') continue;
69
	$bry = explode(" ", $x);
70
 
71
	$asnums = $bry[0];
72
	$whois  = $bry[1];
73
 
74
	if (strpos($asnums, '-') === false) {
75
		# Single ASN
76
		$res[$whois][$asnums] = $asnums;
77
	} else {
78
		# ASN range
79
		$tmp = explode('-', $asnums, 2);
80
		$res[$whois][$tmp[0]] = $tmp[1];
81
	}
82
}
83
 
84
$out .= "#: version $version\n\n";
85
 
86
$out .= "# Autonomous System Numbers (ASN)\n";
11 daniel-mar 87
$out .= "# Automatically generated by ".__DIR__."/vgwhois-pattern-update\n";
2 daniel-mar 88
$out .= "# Generation timestamp: ".date('Y-m-d H:i:s \G\M\TO')."\n";
3 daniel-mar 89
$out .= "# Source: ($version) ".IANA_AS_NUMBERS."\n";
2 daniel-mar 90
$out .= "\n";
91
 
92
foreach ($res as $whois => &$x) {
93
	$rir = array_search($whois, $rir_whois_server);
94
 
95
	if ($asn_additional_params[$rir] != '') {
96
		$whois .= '|prefix='.$asn_additional_params[$rir].'|';
97
	}
98
 
99
	$out .= "# ".strtoupper($rir)."\n";
100
	$out .= ":whois|$whois\n";
101
 
102
	foreach ($x as $begin => &$end) {
103
		if ($begin == $end) {
104
			# Single ASN
105
			$out .= "*AS:$begin\n";
106
		} else {
107
			# ASN Range
108
			$out .= "*AS:$begin-$end\n";
109
		}
110
	}
111
	$out .= "\n";
112
}
113
 
114
$out .= "# Last resort: ARIN\n";
115
$out .= ":whois|whois.arin.net|prefix=a |\n";
116
$out .= "^as(.*)$\n";
117
 
118
echo "ASN: Write to output file\n";
119
 
120
$h = fopen(PATTERN_DIR.'/asn', 'w') or die('Error opening file '.PATTERN_DIR.'/asn');
121
fwrite($h, $out) or die('Could not write to output file');
122
fclose($h);
123
 
124
echo "ASN Finished\n";