Сохранять сеть при создании диапазона IP-адресов (R IP Tools)
Заранее извиняюсь, если на это есть очевидный ответ; У меня есть вектор сетей IPv4 в нотации CIDR (например, 192.168.100.14/24), и я хочу сгенерировать IP-адреса, которые есть в каждой сети, но также сохранить информацию о сети в R Studio.
Используя пакет IP Tools, я могу генерировать IP-адреса, которые есть в каждой сети, но я не знаю, как перенести сеть с нотацией CIDR в набор данных.
В настоящее время я просто делаю это:
iprange <- vector()
for (i in 1:nrow(CIDR_data))
{
iprange <- c(iprange,range_generate(CIDR_data$Network[i]))
}
Я пытался сделать несколько вещей, в основном используя функцию ip_in_range в том же пакете и функцию соответствия в базовом пакете, чтобы попытаться "найти" сеть для каждого IP после генерации IP, но мне не повезло.
Заранее благодарю за любую помощь!
1 ответ
На случай, если кто-то еще сочтет это полезным, я сделал это в 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)
Используя мой пакет 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
Создано 06.08.2020 с помощью пакета REPEX (v0.3.0)