如果有明显答案,请提前道歉;我有一个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查找网络,但是没有运气。
在此先感谢您的帮助!
答案 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创建