Сканирование сетевого интерфейса Python
Мне нужно создать скрипт Python, который запрашивает сетевые интерфейсы и возвращает мне имя хоста, IP-адрес и MAC-адрес.
#!/usr/bin/env python3
import netifaces
x = netifaces.interfaces()
i = x[0]
for i in x:
if i != 'lo':
print(i)
face = netifaces.ifaddresses(i)
print(face)
i += i
else:
continue
Это одна из версий программы, с которой я работаю. Кажется, это захватывает все данные, которые мне нужны, но я не могу заставить их печатать чисто или правильно! Я ищу что-то вроде: "Nic: wlan0, ipaddr: 10.0.0.1, mac: 4651168584541"
Я новичок в программировании и очень плохо знаком с Python, поэтому, пожалуйста, любая помощь приветствуется!
2 ответа
Решение
Сначала это было немного сложно, но этот формат должен позволять вам получать данные из результатов netifaces.
import netifaces
x = netifaces.interfaces()
for i in x:
if i != 'lo':
print('\nInterface: ' + i)
mac = netifaces.ifaddresses(i)[netifaces.AF_LINK][0]['addr']
print('Mac addr: ' + mac)
try:
ip = netifaces.ifaddresses(i)[netifaces.AF_INET][0]['addr']
print('IP addr: {0} '.format(ip))
except KeyError:
print('NO IP')
continue
Вывод будет выглядеть следующим образом:
Interface: eth0
Mac add: eo:ie:9:38:ri
No IP
Interface: wlan0
Mac addr: 34:po:iu:66
IP addr: 10.0.0.1
Пожалуйста, проверьте ссылки:
Ответ @camflan в получении MAC-адреса
Как получить IP-адрес физического интерфейса из интерфейса
import netifaces x = netifaces.interfaces() for i in x: if i != 'lo': print(i) print("mac:" + netifaces.ifaddresses(i)[netifaces.AF_LINK][0]['addr'] + " ipaddr:" + netifaces.ifaddresses(i)[netifaces.AF_INET][0]['addr']) i += i else: continue