Существуют ли команды для Windows, Mac OS, Linux, чтобы узнать действующие сетевые настройки?
Пишу код на Python3. Одни из задач моей программы - это узнать MAC адрес и IP адрес.
Вопросы:
Если узнавать действующий IP адрес Windows, то я пользуюсь методом
gethostbyname(), но с MAC адресом уже проблема. Единственный выход, который я нашел, это вызывать команду с помощью методаcheck_output(['getmac', '/v', '/fo', 'list'])(выходит список адаптеров с MAC адресами), но как вы знаете сетевых интерфейсов много (беспроводная сеть, проводная сеть и т.д.). Каким способом, методом получить именно тот MAC адрес, который работает в сети? Может есть специальный метод модуля subprocess или команда в cmd, похожий на методgethostbyname()?Ситуация с Mac OS и Linux сложнее. Если вбить в терминале ifconfig, то сетевых интерфейсов куча. Если брать в пример Mac OS, подключаешься к Wi-Fi - интерфейс: en0, подключаешься к проводной сети - интерфейс уже другой. Как узнать в ОС Mac OS и Linux действующие в сети IP адрес и MAC адрес?
Общий вопрос такой: Есть ли способы, методы узнавать в ОС Windows, Mac OS, Linux действующие IP адрес и MAC адрес (которые работают в сети, например Интернет).
Если я не точен в формулировке, простите. Я новичок.
Правка: Действующие в сети - я имею ввиду именно тот интерфейс, который в данный момент работает для подключения к Интернету или к локалке. Нужно узнать IP и MAC именно этого интерфейса.
Ответы (2 шт):
Ты можеш выяснить на какой системе ты запускаеш скрипт. https://stackoverflow.com/questions/1854/python-what-os-am-i-running-on
после этого ты можеш использовать модуль subprocess что бы запускате необходимую команду в терминале. Потом парсиш результаты и вуаля.
Пример для линукса, но можно подшаманить и для остальных ситем:
import subprocess
from collections import namedtuple
CmdOutput = namedtuple("CmdOutput", ["output_lines", "output_string"])
def execute_sh(cmd: str, ) -> CmdOutput:
cmd += " 2>&1"
stdout = subprocess.PIPE
stderr = subprocess.STDOUT
p = subprocess.Popen(
cmd, shell=True, executable="/bin/bash", stdout=stdout, stderr=stderr
)
lines = [line.decode('utf-8') for line in p.stdout.readlines()]
string = "".join(lines)
return CmdOutput(lines, string)
Могу посоветовать обратить внимание на psutil и подметод net_if_addrs():
import psutil
print(psutil.net_if_addrs())
Возвращает объект со всеми интерфейсами, включая их IP и MAC-адрес. Ну и работает везде.