Python 代码 获取本机IP地址的几种方式

1.使用自带socket库

  • 获取局域网IP
import socket
# 函数 gethostname() 返回当前正在执行 Python 的系统主机名
res = socket.gethostbyname(socket.gethostname())
print(res)
  • 1
  • 2
  • 3
  • 4
  • 但是上面这个获取的不是公网IP,结果也不稳定,不建议使用。
    如果计算机设备有连接到 Internet 的路由,可以使用获得局域网IP:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
  • 1
  • 2
  • 3
  • 4
  • 另一个适用于所有接口。它还适用于所有公共、私有、外部 IP。这种方法在 Linux、Windows 和 OSX 上很有效。

注意:如果本身局域网IP就是公网IP的话,那这个获得的,可以认为是公网IP了。

import socket
def extract_ip():
    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:       
        st.connect(('10.255.255.255', 1))
        IP = st.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        st.close()
    return IP
print(extract_ip())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3、使用第三方库(netifaces)

netifaces 模块用于提供有关网络接口及其状态的信息。

没有使用过的先装一下库

pip3 install netifaces
  • 1

然后使用

from netifaces import interfaces, ifaddresses, AF_INET
for ifaceName in interfaces():
    addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
    print(' '.join(addresses))

你可能感兴趣的:(python,tcp/ip,linux)