使用 bash 绑定从 CSV ip 列表生成的 acl 文件
Bind acl file generate from CSV ip list using bash
我想从 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 和国家/地区列。
"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 代码中做到这一点。提前致谢。
这里的问题是 DB-IP 以人类可读的 IP 地址格式提供每个范围的开始和结束值。他们为什么这样做,我不确定,因为更通用(更容易处理)的格式是简单地以整数形式呈现这些值。
无论如何,我已经在http://geoip.site/ to handle this and included the DB-IP database URL within the script. The ACL file generated from their CSV file is now also available to download from http://geoip.site/download/DB-IP/GeoIP.acl
上修改了Python脚本
注意我已经发现了这个数据库的一些问题:
- 条目
"::","2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff","US"
存在于其中。这显然完全是垃圾并且还破坏了 Python 脚本(我已经改进了错误检测代码来处理这个问题)并且也是下面第 4 点的原因之一。
"224.0.0.0","255.255.255.255","CH"
是一个有趣的条目。我不完全确定他们如何认为 IPv4 地址的整个多播块 space 被委托给瑞士,或者为什么它存在于他们的数据库中。
- 统计分析(在 http://geoip.site/ 上可用)表明他们的 DB/CSV 文件跨越
224.0.0.0/3
(多播)之外的 IPv4 地址 space 的 100%。那是 3,758,096,384 个地址。但是我们已经知道这里不应该存在几个地址块,最明显的是 10.0.0.0/8
、172.16.0.0/12
和 192.168.0.0/16
(实际上还有其他地址块;进一步调查显示条目 "192.168.0.0","192.169.31.255","US"
存在,涵盖 192.168.0.0/16
及以后)。所以这个结果看起来有问题。
- 统计分析还报告说,它们的 DB/CSV 跨越了 100% 的 IPv6 地址 space。这主要是因为他们将
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 地址 space 的这种覆盖范围(目前均小于 0.1%),因此这个结果看起来也有问题。
鉴于以上所有情况,我会质疑他们数据库的准确性并就此与他们联系。但如果您想使用它,请随时下载 http://geoip.site/download/DB-IP/GeoIP.acl 文件。
最后,我什至不会在 BASH 中尝试这样做。从他们的 CSV 文件生成此文件所需的转换仅适用于 Python 等更高级的语言; BASH 就是不会剪这个(嗯,不是我的 BASH)。
我希望这有助于解决您的问题 query/problem。
更新
截至 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;
};
我想从 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 和国家/地区列。
"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 代码中做到这一点。提前致谢。
这里的问题是 DB-IP 以人类可读的 IP 地址格式提供每个范围的开始和结束值。他们为什么这样做,我不确定,因为更通用(更容易处理)的格式是简单地以整数形式呈现这些值。
无论如何,我已经在http://geoip.site/ to handle this and included the DB-IP database URL within the script. The ACL file generated from their CSV file is now also available to download from http://geoip.site/download/DB-IP/GeoIP.acl
上修改了Python脚本注意我已经发现了这个数据库的一些问题:
- 条目
"::","2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff","US"
存在于其中。这显然完全是垃圾并且还破坏了 Python 脚本(我已经改进了错误检测代码来处理这个问题)并且也是下面第 4 点的原因之一。 "224.0.0.0","255.255.255.255","CH"
是一个有趣的条目。我不完全确定他们如何认为 IPv4 地址的整个多播块 space 被委托给瑞士,或者为什么它存在于他们的数据库中。- 统计分析(在 http://geoip.site/ 上可用)表明他们的 DB/CSV 文件跨越
224.0.0.0/3
(多播)之外的 IPv4 地址 space 的 100%。那是 3,758,096,384 个地址。但是我们已经知道这里不应该存在几个地址块,最明显的是10.0.0.0/8
、172.16.0.0/12
和192.168.0.0/16
(实际上还有其他地址块;进一步调查显示条目"192.168.0.0","192.169.31.255","US"
存在,涵盖192.168.0.0/16
及以后)。所以这个结果看起来有问题。 - 统计分析还报告说,它们的 DB/CSV 跨越了 100% 的 IPv6 地址 space。这主要是因为他们将
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 地址 space 的这种覆盖范围(目前均小于 0.1%),因此这个结果看起来也有问题。
鉴于以上所有情况,我会质疑他们数据库的准确性并就此与他们联系。但如果您想使用它,请随时下载 http://geoip.site/download/DB-IP/GeoIP.acl 文件。
最后,我什至不会在 BASH 中尝试这样做。从他们的 CSV 文件生成此文件所需的转换仅适用于 Python 等更高级的语言; BASH 就是不会剪这个(嗯,不是我的 BASH)。
我希望这有助于解决您的问题 query/problem。
更新
截至 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;
};