生成IP范围时保持网络(R IP工具)

时间:2018-09-21 15:55:36

标签: r ip rstudio cidr

如果有明显答案,请提前道歉;我有一个CIDR表示法的IPv4网络向量(例如192.168.100.14/24),我想在R Studio中生成每个网络中的IP,但也要保留网络信息。

使用IP工具包,我可以生成每个网络中的IP,但是我不知道如何将CIDR标记的网络转发到数据集中。

当前我只是在这样做:

iprange <- vector()
for (i in 1:nrow(CIDR_data))
{ 
  iprange <- c(iprange,range_generate(CIDR_data$Network[i]))
}

我尝试做很多事情,主要是在同一程序包中使用ip_in_range函数,在基本程序包中使用match函数,以尝试在生成IP后为每个IP查找网络,但是没有运气。

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

万一其他人觉得这很有用,我在Python 3.6中使用ipaddress模块​​(包含在基本包中)做到了这一点:

inactive_ips = []
inactive_networks = []

for i in networks:
    inactive_ips.append(list(ipaddress.ip_network(i).hosts()))
    ## this won't include the host & broadcast IPs!
    inactive_networks.append(str(i))

both = zip(inactive_ips, inactive_networks)
both_values = tuple(both)

答案 1 :(得分:0)

使用我的ipaddress软件包,这非常简单。如果您希望地址列表与您的Python代码匹配,则可以使用hosts()代替seq()

library(tidyverse)
library(ipaddress)

tibble(network = ip_network(c("192.168.100.0/30", "192.168.0.0/31"))) %>%
  rowwise() %>%
  mutate(addresses = list(seq(network))) %>%
  unnest_longer(addresses, values_to = "address")
#> # A tibble: 6 x 2
#>            network       address
#>         <ip_netwk>     <ip_addr>
#> 1 192.168.100.0/30 192.168.100.0
#> 2 192.168.100.0/30 192.168.100.1
#> 3 192.168.100.0/30 192.168.100.2
#> 4 192.168.100.0/30 192.168.100.3
#> 5   192.168.0.0/31   192.168.0.0
#> 6   192.168.0.0/31   192.168.0.1

reprex package(v0.3.0)于2020-08-06创建