我想产生地理信息列表.aclcsv文件中的文件。acl文件格式:
acl "A1" {
31.14.133.39/32;
37.221.172.0/23;
acl "A2" {
5.145.149.142/32;
57.72.6.0/24;
......
csv文件:http://download.db-ip.com/free/dbip-country-2016-09.csv.gz
下面是CSV文件的示例行,其中包含IP_Start、IP_End和Country列。在
^{pr2}$我从这里得到了一些引用:http://geoip.site/但是他们的acl没有完整的列表。在
任何人都可以帮我用bash代码来做这个。提前谢谢。在
这里的问题是DB-IP以人类可读的IP地址格式提供每个范围的起始值和结束值。我不确定他们为什么这么做,因为更通用(更容易处理)的格式是简单地以整数形式表示这些值。在
无论如何,我已经修改了http://geoip.site/上的Python脚本来处理这个问题,并在脚本中包含了DB-IP数据库URL。从CSV文件生成的ACL文件现在也可以从http://geoip.site/download/DB-IP/GeoIP.acl下载
注意:我已经发现此数据库存在一些问题:
"::","2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff","US"
。这显然是完全的垃圾,也破坏了Python脚本(我改进了错误检测代码来处理这个问题),这也是下面第4点的原因之一。在"224.0.0.0","255.255.255.255","CH"
是一个有趣的条目。我不太清楚他们是怎么认为IPv4地址空间的整个多播块被委托给瑞士的,或者为什么它会存在于他们的数据库中。在224.0.0.0/3
(多播)之外的IPv4地址空间的100%。那是3758096384个地址。但是我们已经知道,这里不应该存在几个地址块,最明显的是10.0.0.0/8
、172.16.0.0/12
和{192.168.0.0/16
及更多)。所以这个结果看起来有问题。在3000::/4
(以及其他各种较小的地址块)映射到US,这是错误的(请参见http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xhtml,其中3000::/4
被列为RESERVED
)。此映射源自条目"2c10::","ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff","US"
。http://geoip.site/上的其他2个数据库在整个IPv6地址空间中的覆盖率远没有达到这个程度(目前两者都小于0.1%),因此这个结果看起来也值得怀疑。在鉴于以上所有情况,我会质疑他们数据库的准确性,并就此与他们联系。但是如果您想使用http://geoip.site/download/DB-IP/GeoIP.acl文件,请随时下载它。在
最后,我甚至不会在BASH中尝试这个。从CSV文件生成这个文件所需的转换只有在更高级的语言(如Python)中才可用;BASH不能解决这个问题(当然,不是我的BASH)。在
我希望这有助于解决您的疑问/问题。在
更新
截至2016年12月的数据库版本,DB-IP引入了一个ZZacl,以覆盖映射到任何特定国家之外的IPv4网络。这当然解决了我上面提到的一些问题。在
相关问题 更多 >
编程相关推荐