关于hostname
hostname是一台机器的网络身份标签,往往在安装系统的时候就设置好了。每一台机器应该有自己独一无二的身份id。
A hostname is a label assigned to a machine that identifies the machine on the network. Each device in the network should have a unique hostname.
The hostname can be a simple string containing alphanumeric characters, dots and hyphens. If the machine is connected to the Internet (such as web or mail server) it is recommended to use a fully qualified domain name (FQDN) as a system hostname. The FQDN consists of two parts, the hostname, and the domain name.
引用出处
查看与设置
-
windows 中 我的电脑 属性设置
-
linux系统中
$hostnamectl
lee@lee-VirtualBox:~$ hostnamectl
Static hostname: lee-VirtualBox
Icon name: computer-vm
Chassis: vm
Machine ID: 113281522bfd49a08ac07ddd600dce03
Boot ID: 40aa9fc060764230a9f0f60ad6531fed
Virtualization: oracle
Operating System: Ubuntu 20.04.3 LTS
Kernel: Linux 5.15.0-71-generic
Architecture: x86-64
sudo hostnamectl set-hostname mail.linuxize.com
使用python获取的方法
方法1(在Linux系统中会返回127.0.0.1):
python
def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
return ip
方法2:
python
import socket
import fcntl
import struct
def getip(ifname):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
netaddr = fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15].encode('utf-8')))
ipaddr = socket.inet_ntoa(netaddr[20:24])
return ipaddr
except OSError as oe:
print ('No such device: ', ifname)
print ('lo: ', getip('lo'))
print ('eth0: ', getip('eth0'))
print ('eth1: ', getip('eth1'))
方法3,最为可靠:
python
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
···