Узнать внутренний IP адрес на python (Linux версия)

Автор: Igor Kirsanov

Скрипт на python 3 позволяющий определить IP адрес подключенного устройства на Linux во внутренней сети. Используются штатные библиотеки через socket. Для работы в windows требуется модификация скрипта.


#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', bytes(ifname[:15], 'utf-8'))
    )[20:24])

#print( get_ip_address('eth0' ))  # '192.168.0.110'
try:
	print( "Кабель eth0: ", get_ip_address('eth0' ))
except:
	pass

try:
	print( "WiFi wlan0: ", get_ip_address('wlan0' ))
except:
	pass

В случае нескольких сетевых карт необходимо или изменить номер на нужный или использовать проход по массиву