【问题标题】:Bind acl file generate from CSV ip list using bash使用 bash 绑定从 CSV ip 列表生成的 acl 文件
【发布时间】:2016-09-18 06:24:04
【问题描述】:

我想从 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://download.db-ip.com/free/dbip-country-2016-09.csv.gz

以下是来自 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://geoip.site/ 但他们的 acl 没有完整的列表。

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

【问题讨论】:

  • 你需要展示一些你已经尝试过的东西。同时在此处粘贴示例 CSV。
  • 请在此处发布 csv 文件中的一两行(尽可能相关),以便有人指导您将 csv 映射为 acl 格式。
  • 感谢您的回复。我从 CSV 文件中粘贴了几行。
  • @user3850712,您的问题是他们的 ACL 文件不完整吗?他们在那里发布了一个脚本(递归版本(最快)),您可以运行该脚本来生成最新的 ACL 文件。这不是你想要的吗?

标签: python bash csv bind9


【解决方案1】:

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

无论如何,我已经修改了http://geoip.site/ 上的 Python 脚本来处理这个问题,并在脚本中包含了 DB-IP 数据库 URL。从他们的 CSV 文件生成的 ACL 文件现在也可以从 http://geoip.site/download/DB-IP/GeoIP.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. 统计分析还报告说,他们的 DB/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%),因此这个结果看起来也值得怀疑。

鉴于以上所有情况,我会质疑他们数据库的准确性并就此与他们联系。但是,如果您想使用它,请随时下载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;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多