Работа с несколькими сетевыми интерфейсами в Python

Как я могу сделать следующие вещи в python:

  1. Список всех IP-интерфейсов на текущей машине.
  2. Получать обновления об изменениях сетевых интерфейсов (поднимается, отключается, меняет IP-адрес).

Подойдет любой пакет Python, доступный в Ubuntu Hardy.


person Alex B    schedule 07.07.2009    source источник


Ответы (3)


Я думаю, что лучший способ сделать это — через dbus-python.

руководство немного касается сетевых интерфейсов:

import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.NetworkManager',
                       '/org/freedesktop/NetworkManager/Devices/eth0')
# proxy is a dbus.proxies.ProxyObject
person Otto Allmendinger    schedule 07.07.2009

Я использовал следующий код,

temp =  str(os.system("ifconfig -a | awk '$2~/^Link/{_1=$1;getline;if($2~/^addr/){print _1" "}}'"))

это даст «вверх» сетевые интерфейсы

например эт0, эт2, влан0

person user1908278    schedule 26.12.2012

Нет, нет... Вам не нужно беспокоиться об os.system() или dbus API.

Что вам действительно нужно, так это использовать netlink API для реализации этого. Либо используйте интерфейс libnl (netlink.route.link), либо обрабатывайте сообщения netlink самостоятельно. . Взгляните на этот пример.

person Cong Wang    schedule 27.12.2012