使用bash从CSV ip列表生成acl文件

时间:2016-09-18 06:24:04

标签: python bash csv bind9

我想从csv文件生成geoiplist.acl文件。 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://ajec.proxym-it.net/Ajec_sso_api/authenticate.wsdl

以下是CSV文件中包含IP_Start,IP_End和Country列的示例行。

"0.0.0.0","0.255.255.255","US"
"1.0.0.0","1.0.0.255","AU"
"1.0.1.0","1.0.3.255","CN"
"1.0.4.0","1.0.7.255","AU"
"1.0.8.0","1.0.15.255","CN"
"1.0.16.0","1.0.31.255","JP"
"1.0.32.0","1.0.63.255","CN"
"1.0.64.0","1.0.127.255","JP"
"1.0.128.0","1.0.255.255","TH"
"1.1.0.0","1.1.0.255","CN"

我从这里得到了一些参考文献:http://download.db-ip.com/free/dbip-country-2016-09.csv.gz但是他们的acl没有完整的列表。

任何人都可以帮我在bash代码中执行此操作。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这里的问题是DB-IP以人类可读的IP地址格式提供每个范围的开始和结束值。为什么他们这样做,我不确定,因为更通用(更容易处理)的格式是简单地以整数形式呈现这些值。

在任何情况下,我都修改了http://geoip.site/上的Python脚本来处理这个问题,并在脚本中包含了DB-IP数据库URL。现在,也可以从http://geoip.site/download/DB-IP/GeoIP.acl

下载从其CSV文件生成的ACL文件

注意我已经发现了这个数据库的一些问题:

  1. 条目"::","2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff","US"存在于其中。这显然是完全垃圾,也打破了Python脚本(我已经改进了错误检测代码来处理这个问题),这也是下面第4点的原因之一。
  2. "224.0.0.0","255.255.255.255","CH"是一个有趣的条目。我不完全确定他们如何认为IPv4地址空间的整个多播块被委派给瑞士,或者为什么它存在于他们的数据库中。
  3. 统计分析(可在http://geoip.site/上获得)表明他们的DB / CSV文件跨越224.0.0.0/3(多播)之外的100%IPv4地址空间。那个地址是3,758,096,384。但是我们已经知道这里不应该存在几个地址块,显而易见的是10.0.0.0/8172.16.0.0/12192.168.0.0/16(实际上是其他地址;进一步调查显示条目"192.168.0.0","192.169.31.255","US"存在,涵盖192.168.0.0/16及以后)。所以这个结果看起来有问题。
  4. 统计分析还报告其数据库/ CSV跨越100%的IPv6地址空间。这主要是因为他们已将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%),因此这个结果看起来也值得怀疑。
  5. 考虑到上述所有情况,我会质疑他们数据库的准确性并与他们联系。但如果您想使用它,请随时下载http://geoip.site/download/DB-IP/GeoIP.acl文件。

    最后,我甚至不会在BASH中尝试这个。从CSV文件生成此文件所需的转换仅适用于Python等更高级的语言; BASH不会削减这个(好吧,不是我的BASH)。

    我希望这有助于解决您的查询/问题。

    更新

    截至2016年12月版本的数据库,DB-IP引入了 ZZ acl,以涵盖超出映射到任何特定国家/地区的IPv4网络。这肯定解决了我上面提出的一些问题。

    acl "ZZ" {
        0.0.0.0/8;
        10.0.0.0/8;
        100.64.0.0/10;
        127.0.0.0/8;
        169.254.0.0/16;
        172.16.0.0/12;
        192.0.0.8/29;
        192.0.0.16/28;
        192.0.0.32/27;
        192.0.0.64/26;
        192.0.0.128/25;
        192.0.2.0/24;
        192.88.99.0/24;
        192.168.0.0/16;
        198.18.0.0/15;
        198.51.100.0/24;
        203.0.113.0/24;
    };