Сканирование сетевого интерфейса 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

Пожалуйста, проверьте ссылки:

  1. Ответ @camflan в получении MAC-адреса

  2. Как получить 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
    
Другие вопросы по тегам