如何使用R从IP范围中获取IP地址列表?

时间:2018-08-24 16:50:07

标签: r

我有日志数据,其中一列具有IP范围,下一列是相应的端口。例如:

IPRange                             Port
192.100.176.0-192.100.179.255       A, B, C

我需要将IPRange列扩展到网络块列表,直到第3个八位字节:

IPRange                         IP                  Port
192.100.176.0-192.100.179.255   192.100.176.0/24    A, B, C
192.100.176.0-192.100.179.255   192.100.177.0/24    A, B, C
192.100.176.0-192.100.179.255   192.100.178.0/24    A, B, C
192.100.176.0-192.100.179.255   192.100.179.0/24    A, B, C

我如何在R中实现这一目标?

1 个答案:

答案 0 :(得分:0)

提交,

iptools的共同作者,在这里。

您很幸运。好吧,实际上,您是靠自己的运气(按原样)通过GitHub(https://github.com/hrbrmstr/iptools)上的新编译器iptools拥有了range_boundaries_to_cidr()函数。相对于:

library(iptools)

range_boundaries_to_cidr(
  ip_to_numeric("192.100.176.0"), 
  ip_to_numeric("192.100.179.255")
)
## [1] "192.100.176.0/22"

请注意,它需要数字输入,并且在某些范围内不应真正期望仅返回单个CIDR 反向计算CIDR。例如:

range_boundaries_to_cidr(
  ip_to_numeric("192.168.0.15"), 
  ip_to_numeric("192.168.5.115")
)
## [1] "192.168.0.15/32"  "192.168.0.16/28"  "192.168.0.32/27"  "192.168.0.64/26" 
## [5] "192.168.0.128/25" "192.168.1.0/24"   "192.168.2.0/23"   "192.168.4.0/24"  
## [9] "192.168.5.0/26"   "192.168.5.64/27"  "192.168.5.96/28"  "192.168.5.112/30"

您可以通过对在线转化器运行一些范围来验证我的说法,也可以在线研究“为什么”。

如果您对新功能有疑问,请在GH上删除一个问题,因为在此之前,我将首先从ping中查看