Member 14651994 Ответов: 1

Измените диапазон IP - адресов на IP-подсеть


У меня есть скрипт, который выполняет поиск в интернете для предоставленного диапазона IP-адресов. Диапазон IPs предоставляется в формате xxx.xxx.xxx.x-xxx.xxx.xxx.x, и я искал, чтобы выполнить поиск на основе данной подсети xxx.xxx.xxx.x/32/24/16/8 из файла

это та часть скрипта, которая отвечает за поиск в интернете

# Return IPs in IPv4 range, inclusive.
def IPsRange(start='', end=''):
    if not start and not end:
        return []
    if not end and start.__contains__("-"):
        start, end = start.split("-")
    end = end.replace("\n","")
    start = int(ip_address(start).packed.hex(), 16)
    end = int(ip_address(end).packed.hex(), 16)
    return [ip_address(ip).exploded for ip in range(start, end)]

# Scan IP address range
def ScanRange(ranges):
    threads = []                        
    # *-- Scan IP range --*             
    for address in IPsRange(ranges):    
        t = Thread(                     
            target=__СheckAddrThreaded, 
            args=(address,)             
        )                               
        threads.append(t)               
        t.start()                       
    for thread in threads:              
        thread.join()


Как я могу использовать подсеть вместо диапазона IP-адресов?

Спасибо

Что я уже пробовал:

Я пытался

>>> import ipaddress
>>> def get_all_ips_by_subnet(subnet):
...   l = [*map(str, ipaddress.IPv4Network(subnet, strict=False))]
...   return l
...
>>> l = get_all_ips_by_subnet("172.17.20.30/30")
>>> l
['172.17.20.28', '172.17.20.29', '172.17.20.30', '172.17.20.31']

1 Ответов

Рейтинг:
0

Richard Deeming

Вы можете использовать iprange_to_cidrs предоставлено компанией netaddr[^] модуль.
Запуск Python 3.3 В комплекте ipaddress может предоставить то, что вы хотите. Функция summarize_address_range возвращает итератор с сетями, полученными в результате указанного вами начала и конца


Чтобы пойти другим путем:
В Python 3 так же просто, как
import ipaddress
[str(ip) for ip in ipaddress.IPv4Network('192.0.2.0/28')]


Member 14651994

@Ричард Диминг
Спасибо за ваш ответ. Это способ изменить диапазон ip-адресов на ip-подсеть, но здесь я искал, как это сделать в контексте этого скрипта. Я пытался использовать скрипт для поиска по подсети, а не по диапазону IP-адресов.

Richard Deeming

Вам нужен способ программного преобразования диапазона IP в подсеть, и связанный поток покажет вам, как преобразовать диапазон IP в подсеть.

Итак, ваш вопрос решен?

Member 14651994

То, что я ищу, как на вопрос "диапазон IPs предоставляется в формате xxx.xxx.xxx.x-xxx.xxx.xxx.x, и я искал, чтобы выполнить поиск на основе данной подсети xxx.xxx.xxx.x/32/24/16/8 из файла" его в этом контексте и не делать только это преобразование.

Richard Deeming

Судя по вопросу, вы уже знаете, как выполнить поиск по заданной подсети.

У вас есть диапазон IP-адресов.

Теперь вы знаете, как преобразовать диапазон IP-адресов в подсеть.

Так что соедините точки...

Richard Deeming

Или вы хотите сказать, что хотите пойти другим путем - преобразовать подсеть в диапазон IP-адресов?