写接口服务中需要知道本机服务器的ip, 之前有写一版,在生产机上是能够正常得到ip的,到测试环境的时候就出问题了,得到的结果是127.0.0.1
。
初始获得ip地址代码为:
import socket
def get_host_ip():
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
return ip
环回地址是主机用于向自身发送通信的一个特殊地址。同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开TCP/IP协议栈的下层。
IPv4的环回地址为:127.0.0.0到127.255.255.255都是环回地址
当操作系统初始化本机的TCP/IP协议栈时,设置协议栈本身的IP地址为127.0.0.1(保留地址),并注入路由表
127.0.0.1是保留地址之一,来检验本机TCP/IP协议栈,ping 127.0.0.1
一般作为测试本机TCP/IP协议栈正常与否的判断之一。
localhost首先是一个域名,也是本机地址,它可以被配置为任意的IP地址。不过通常情况下都指向:(如下)
IPv4:表示 127.0.0.1
IPv6:表示 [::1]
本机IP,可以理解为本机有三块网卡:
联网,网卡传输,受防火墙和网卡限制
获取本机IP有其它的方法:
import os
import socket
gw = os.popen("ip -4 route show default").read().split()
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect((gw[2], 0))
ipaddr = s.getsockname()[0]
gateway = gw[2]
host = socket.gethostname()
print("IP:", ipaddr, " GW:", gateway, " Host:", host)
或者
import os
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
print("IP:", ip)
更多精彩内容可以关注:AI科技时讯