Skip to main content

Python Get LAN IPv4 Address

The Windows version returns the LAN IPv4 address, even if connected to a VPN.

import platform
import re
from subprocess import check_output

ipv4_pattern = re.compile(r'IPv4 Address.*:\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')

def get_ipv4():
    if platform.system() == 'Windows':
        ipconfig_output = check_output(['ipconfig'], shell=True, text=True, encoding='iso8859-2')
        # match IPv4 pattern and return last match which is most likely the LAN adapter
        return ipv4_pattern.findall(ipconfig_output)[-1]
        # not tested on Linux nor Mac OSX
        import netifaces
        # get the default network interface
        default_iface = netifaces.gateways()['default'][netifaces.AF_INET][1]
        iface_data = netifaces.ifaddresses(default_iface)
        # get the IP address from the default interface
        return iface_data[netifaces.AF_INET][0]['addr']