Python Модуль IP-адреса - PullRequest
       11

Python Модуль IP-адреса

0 голосов
/ 17 января 2020

Я надеялся, что смогу получить некоторую помощь при установке моего модуля python, особенно вокруг модуля ipaddress. Эта проблема сводит меня с ума ...

Короче говоря, я написал скрипт python3 на моей машине Windows, которая использует модуль ipaddress. Это работает абсолютно нормально.

Я скопировал это в Linux box (Ubuntu 18.04), на котором я хочу запустить его, но когда я запускаю его, я получаю следующую ошибку:

File "/opt/netbox-2.6.7/netbox/reports/address-parents.py", line 82, in test_aci_endpoints
  if endpoint.subnet_of(summary):
AttributeError: 'IPv4Network' object has no attribute 'subnet_of'

Когда я запрашиваю модуль, я получаю следующее:

nbxla01lv:/opt/netbox/netbox$ pip3 show ipaddress
Name: ipaddress
Version: 1.0.23
Summary: IPv4/IPv6 manipulation library
Home-page: https://github.com/phihag/ipaddress
Author: Philipp Hagemeister
Author-email: phihag@phihag.de
License: Python Software Foundation License
Location: /home/andy/.local/lib/python3.6/site-packages
Requires: 

Меня немного смущает, когда я смотрю на эту домашнюю страницу модуля, кажется, это порт 3.3+ модуль ipaddress для python 2.7. Независимо от того, версия 1.0.23 является последней версией и содержит функцию «subnet_of».

Также, если я посмотрю на сам код в /home/andy/.local/lib/python3.6/site-packages/ipaddress.py, я смогу увидеть реальную функцию в коде :

nbxla01lv:/home/andy/.local/lib/python3.6/site-packages$ cat ipaddress.py | grep subnet_of
        if not other.subnet_of(self):
            if other.subnet_of(s1):
            elif other.subnet_of(s2):
    def _is_subnet_of(a, b):
    def subnet_of(self, other):
        return self._is_subnet_of(self, other)
        return self._is_subnet_of(other, self)

Я уверен, что это что-то простое, но любая помощь будет принята с благодарностью.

Спасибо!

Редактировать - пример кода

# Query APIC for all endpoint IPs. 
endpointQuery = '/api/node/class/fvIp.json'
resp = requests.get(aciBaseURL + endpointQuery, cookies=cookie, verify=False).json()

ipAddressCount = int(resp["totalCount"])
aciIPs = []
counter = 0
summary = ipaddress.ip_network(inputSummary)

while counter < ipAddressCount:
    endpoint = ipaddress.ip_network(resp['imdata'][counter]["fvIp"]["attributes"]["addr"])
    if endpoint.subnet_of(summary):
        aciIPs.append(str(endpoint))
    counter+=1

1 Ответ

1 голос
/ 17 января 2020

Модуль ipaddress является частью стандартной библиотеки, поэтому я полагаю, что вы импортируете эту версию.

Вы также можете проверить, какой модуль вы на самом деле импортируете

>>> import ipaddress
>>> ipaddress.__file__
'/Users/rickard/.pyenv/versions/3.7.4/lib/python3.7/ipaddress.py'

Скорее всего, метод subnet_of отсутствует в модуле ipaddress в вашей текущей установке Python (похоже на 3.6)

...