python linux 获取本机ip

  • 未连接外网时获取本机ip方法
from subprocess import Popen, PIPE
import re

def get_ip_ifconfig():
    p = Popen(['ifconfig'], stdout = PIPE)
    data = p.stdout.read().decode().split('\n\n')
    data = [i for i in data if i and not i.startswith('lo')]
    dic = {}
    # re.M 多行模式,改变'^'和'$'的行为
    for line in data:
        re_devname = re.compile(r'(\w+).*: flags=', re.M)
        re_ipaddr  = re.compile(r'inet ([\d\.]{7,15})', re.M)
        devname  = re_devname.search(line)
        ip       = re_ipaddr.search(line)
        if devname:
            devname = devname.group(1)
        else:
            devname = ''
        if ip:
            ip = ip.group(1)
        else:
            ip = ''
        dic[devname] = ip
    return dic['ens33']

if __name__ == '__main__':
    print(get_ip_ifconfig())
  • 连接外网时获取本机ip
import socket

def get_host_ip():
    s = None
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        print(s.getsockname())
        ip = s.getsockname()[0]
    finally:
        if s != None: s.close()
    return ip

if __name__ == '__main__':
    print(get_host_ip())