Python 获取本地主机 hostname 和 IP 地址的简单方法

Python 获取本地主机 hostname 很简单,一行代码就能搞定。获取 IP 地址也一样简单,下面分享一下这些方法。都很简单,基本都是通过 Python 的 socket 库来进行获取的。Python socket 还是一个非常强大的网络功能库,很多时候配合 socketserver 使用效果更好。

一、推荐方法

>>> import socket
>>> # 获取主机名
>>> hostname = socket.gethostname()
>>> hostname
'USER-20150331GI'
>>>
>>> # 获取IP地址
>>> ip = socket.gethostbyname(hostname)
>>> ip
'192.168.1.3'

对于获取 IP 地址,其实 socket.gethostbyname() 很多情况下并不能准确获取到 IP 地址,很多时候会返回一个 127.0.0.1 或者是私有 IP,下面的方法可以更准确的获取 IP 地址(也就是下方的备用方法一):

import socket

def get_host_ip():
    """
    查询本机ip地址
    :return: ip
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()

    return ip

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

二、备用方法

备用方法一:

>>> import socket
>>> # 获取主机名
>>> hostname = socket.getfqdn(socket.gethostname())
>>> hostname
'USER-20150331GI'
>>>
>>> # 获取IP地址
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.connect(('8.8.8.8', 80))
>>> ip = s.getsockname()[0]
>>> ip
'192.168.1.3'

备用方法二:

>>> import socket
>>> hostname = socket.gethostname()
>>> ip_lists = socket.gethostbyname_ex(hostname)
>>> ip_lists
('USER-20150331GI', [], ['192.168.1.3'])
>>>
>>> # 获取主机名
>>> hostname = ip_lists[0]
>>> hostname
'USER-20150331GI'
>>>
>>> # 获取IP地址
>>> ip = lst[-1]
>>> ip
['192.168.1.3']

参考文献:

  • https://blog.csdn.net/Jerry_1126/article/details/85482905
  • https://blog.csdn.net/u013314786/article/details/78962103

【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps

【AD】RackNerd 推出的 KVM VPS 特价优惠,在纽约、西雅图、圣何塞和阿什本每年仅需 12.88 美元!