当前位置:   article > 正文

python获取本机IP_python获取本机ip地址

python获取本机ip地址

问题

写接口服务中需要知道本机服务器的ip, 之前有写一版,在生产机上是能够正常得到ip的,到测试环境的时候就出问题了,得到的结果是127.0.0.1

初始获得ip地址代码为:

import socket

def get_host_ip():
    hostname = socket.gethostname()
    ip = socket.gethostbyname(hostname)
    return ip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

本机IP与127.0.0.1及localhost的区别

127.0.0.1
  • 环回地址是主机用于向自身发送通信的一个特殊地址。同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开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

localhost首先是一个域名,也是本机地址,它可以被配置为任意的IP地址。不过通常情况下都指向:(如下)

  • IPv4:表示 127.0.0.1

  • IPv6:表示 [::1]

本机IP

本机IP,可以理解为本机有三块网卡:

  • 一块网卡叫做loopback(虚拟网卡)
  • 一块叫做ethernet(有线网卡)
  • 一块叫做wlan(你的无线网卡)

联网,网卡传输,受防火墙和网卡限制

解决方法

获取本机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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

或者

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) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

参考

更多精彩内容可以关注:AI科技时讯

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/628421
推荐阅读
相关标签
  

闽ICP备14008679号