将 IP 地址列表分组为 IP 范围的工具

And*_*ndy 2 networking ip-address subnet

我管理的网站当前充斥着来自不同 IP 地址的 HTTP 请求,但都使用相同的用户代理字符串

我已经搜索了日志文件,现在有一个包含每行 2696 个唯一 IP 地址的文件。它看起来每 20 个左右的 IP 属于相同的 IP 范围,即第一个、第二个和有时第三个八位字节是相同的

有没有办法可以将这些 IP 组合在一起,以便查看每个 IP 范围的列表?无论是某种命令行巫术还是工具,我都可以将 IP 放入并获取 IP 范围作为输出?

编辑:

例如,24 个 IP 地址以 开头,104.140并且存在三个不同的第三个八位字节。8个IP开头104.140.183,另外8个开头,104.140.211最后8个开头104.140.4

我的防火墙经理让我阻止IP范围与网络前缀长度,并允许我从选择/24/32

我对子网划分不够了解,无法知道输出应该是什么,但我想 A) 看看有多少不同的范围和 B) 理想情况下,输出的格式可以用来阻止范围防火墙

agt*_*ver 5

好吧,我认为这可能对你有用——假设你已经安装了 awk 并且 IP 地址在 ip.txt 中:

cat ip.txt | awk 'BEGIN { FS = "." } ; { printf("%s.%s.%s\n%s.%s.%s.%s\n", $1, $2, $3, $1, $2, $3, $4) }' | sort | uniq -c | sort -rn
Run Code Online (Sandbox Code Playgroud)

一点解释:

  • cat 打印文件
  • awk 将 ip 地址拆分为 4 个变量并打印 /24 和 /32 ip 范围
  • sort 对 IP 地址进行排序,因此我们可以计算它们
  • uniq 计算它们(感谢 -c 选项)并将频率放在 IP 地址前面
  • sort 将它们按频率计数的降序 (-r) 排列(-n 解释值而不是字符串)

请注意,显示了 /32 和 /24 范围。如果您只想要 /24 范围的 /32,请调整 printf 语句(因此printf("%s.%s.%sn", $1, $2, $3)只打印 /24 并且printf("%s.%s.%s.%s\n", $1, $2, $3, $4)只打印 /32。