LINUX.ORG.RU

python, список сетевых интерфейсов и информация о них


1

4

В общем, пишу прогу на третьепистоне, где мне понадобилось добывать список сетевых интерфейсов и инфу о них. Гугл о подобных средствах, имеющихся в питоне, молчит, так что я решил посмотреть исходники hardinfo. Так вот, львиная доля инфы там добывается через ioctl + парсинг /proc/net/dev и /proc/net/wireless Против парсинга я ничего против не имею, но как узнать mac, essid(для беспроводных устройств) и т.д. без ioctl()? Или, может, все-таки есть какой-то нормальный интерфейс взаимодействия с сетевыми устройствами?

★★

Ну есть модуль netifaces (py3k-netifaces для третьего), там тоже дёргают ioctl'ы. Так что весь вопрос в том, кто будет дёргать ioctl'ы — программа напрямую, программа через модуль или программа через вызов внешней программы (ifconfig) и что из этого считать нормальным.

mky ★★★★★
()

было уже сто раз, в том числе на stackoverflow

как узнать mac, essid(для беспроводных устройств)

поискать в /sys/devices

без ioctl()?

в чём смысл обходится без ioctl?

true_admin ★★★★★
()

/sys/class/net/*/address

Насчет wi-fi не знаю, не использую

greek_31 ★★
()
Ответ на: комментарий от true_admin

А разве у ioctl() нет проблем с переносимостью(в пределах *nix систем)? Один и тот же вызов ioctl() будет работать и на *bsd, и на HP-UX, и на linux? Ведь в мане к ioctl() написано что стандарта-то нет.

netcat ★★
() автор топика
Ответ на: комментарий от netcat

так и /proc, /sys итп в общем случае непереносимые. Ты же не написал в топике «хочу переносимый вариант».

А нет таких вариантов, работа с железом не стандартизирована. Ты можешь найти универсальные библиотеки, но внутри у них будет отдельная реализация под каждую ОС.

true_admin ★★★★★
()

Десктопному софту полагается дёргать network-manager через dbus или gobject-introspection, но, учитывая всенародную любовь к этому network-manager, рассчитывать на его наличие на каждой машине наивно. А так свободно можно узнать что угодно, включая mac.

x3al ★★★★★
()
Ответ на: комментарий от true_admin

Ясно, спасибо. Еще вопрос есть. Суть моей программы такова: есть две части - демон и клиент. Админ устанавливает демон на нужные ему компы, а на свой комп ставит клиент. Клиент опрашивает все остальные компы, а те (то есть демон) шлют ему или инфу о софте\железе или только показывают, что в ней изменилось. Клиент-то всяко будет кроссплатформенным, а с демоном непонятно - или делать один, который запускается везде(с помощью ухищрений типа #ifdef LINUX для C) или для каждой системы написать отдельный вариант демона?

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Я бы без ifdef обошёлся. Вместо этого сделал бы файлы типа hardware_linux.c, hardware_windows.c и в системе сборки подрубал бы нужные файлы. Ну а высокоуровневая часть она одна.

В ifdef не рекомендую загонять т.к. слишком много кода будет между ними лежать. Имхо лучше в отдельный файл.

true_admin ★★★★★
()
Ответ на: комментарий от netcat

Для такой-то мелкой задачи? На питоне конечно, в десять раз быстрее напишешь. Тем более что куча готовых высокоуровневых либ есть, поболее чем для C.

Можно вообще через mpi4py ботнет в пару строк сделать.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

И стоит ли прикручивать свистоперделки типа отправки всего на жаббер, мыло, аську, кудатамеще?

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Разбить платформозависимые функции на отдельные модули.

И подключать их if sys.platform == '???': import ???

Странная архитектура у тебя... Обычно демон как раз принимает, а клиент отсылает.

greek_31 ★★
()
Ответ на: комментарий от netcat

стоит ли прикручивать свистоперделки

как хочешь :).

А что насчет Perl?

perl5 мёртв, на счёт perl6 не знаю, сам решай

true_admin ★★★★★
()
Ответ на: комментарий от greek_31

Есть, но совсем немного. Щас выложу на гитхаб, дам ссылку.

netcat ★★
() автор топика
Ответ на: комментарий от netcat

Что прога должна делать? и как?

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

greek_31 ★★
()
Ответ на: комментарий от greek_31

Клиент крутится на компе у админа и имеет список айпишников тех компов, на которых крутятся демоны. По этим адресам он шлет демонам указание произвести сбор инфы о софте и железе, после чего получает список изменений или сообщение об их отсутствии. Если изменения есть, то клиент выводит в stdout адрес компа, время, и суть изменений. Как-то так.

netcat ★★
() автор топика
Ответ на: комментарий от SAA

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

netcat ★★
() автор топика
Ответ на: комментарий от greek_31

Лучше пиши мне на мыло, я его в профиле указал. Я сейчас от цивилизации далековато(250 км), интернет нестабильный.

netcat ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.