好的,这是问题所在。Bash脚本批量转换IP地址到CIDR?
我有IP的明文地址列表,我堵在我的服务器,越来越大,越来越臃肿,每天(加3000+今天条目单独)。
它已经被分类为重复所以这不是一个问题。我想要做的就是编写一个脚本来完成它,并将条目合并为一个更好的质量块。
例如,借此:
2.132.35.104
2.132.79.240
2.132.99.87
2.132.236.34
2.132.245.30
,把它变成这样:
2.132.0.0/16
如何代码在bash脚本有什么建议?
更新:我已经制定了部分路该怎么做我需要。将其转换为/ 24很容易,如下所示:
cat /usr/local/blocks/blocks.txt | while read line; do
oc1=`echo "$line" | cut -d '.' -f 1`
oc2=`echo "$line" | cut -d '.' -f 2`
oc3=`echo "$line" | cut -d '.' -f 3`
oc4=`echo "$line" | cut -d '.' -f 4`
echo "$oc1.$oc2.$oc3.0/24" >> twentyfour.srt
done
sort -u twentyfour.srt > twentyfour.txt
rm -f twentyfour.srt
ori=`cat /usr/local/blocks/blocks.txt | wc -l`
new=`cat twentyfour.txt | wc -l`
echo "$ori"
echo "$new"
将其从4,452个条目减少到4,148个条目。
而是具有:
109.86.9.93
109.86.26.77
109.86.55.225
109.86.70.224
109.86.87.199
109.86.89.202
109.86.95.248
109.86.100.19
109.86.110.43
109.86.145.216
109.86.152.86
109.86.155.238
109.86.156.54
109.86.187.91
109.86.228.86
109.86.234.51
109.86.239.61
我现在有:
109.86.100.0/24
109.86.110.0/24
109.86.145.0/24
109.86.152.0/24
109.86.155.0/24
109.86.156.0/24
109.86.187.0/24
109.86.228.0/24
109.86.234.0/24
109.86.239.0/24
109.86.26.0/24
109.86.55.0/24
109.86.70.0/24
109.86.87.0/24
109.86.89.0/24
109.86.9.0/24
109.86.95.0/24
一切都很好。但是,从109.86开始有17个参赛作品。 。地区。在前24个字节中匹配5个以上的前2个字节的情况下,我想将其减少到/ 16。
这就是我卡住的地方。
更新2:
对于史蒂夫:Here's the block list for today.而这里的result so far.显然它不是去除二十四是在十六近乎重复的条目。
这很大程度上取决于你想如何具体的子网是,相对于被阻止的IP地址。你是否总是只想为少数主机封锁整个'/ 16'?您是否希望您的整合在数学上精确到单个主机的列表?中间某个地方? – admdrew
这是一个非常好的问题!理想情况下,如果来自给定主机的条目超过x条,那么/ 16会比/ 24更好,不是吗?我不想在尽可能少的条目中阻止整个世界,只是恶意的IP。所以按照我上面的例子,2.132.0.0/16会很好,因为该文件中有大约20个IP。但是如果只有2-3个参赛者,/ 24就足够了。 – Charles
根据我过去作为管理防火墙工程师的经验,我不推荐自动阻止像'/ 16'这样大的东西,但这是基于与客户网络协作的意见。既然这些都是你自己的服务器,那么,请按照你认为正确的方式行事。你也可以自动化一些'whois'查找来阻止这么大的范围。 – admdrew