码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

    参考

    • https://forums.raspberrypi.com/viewtopic.php?t=188615#p1187999
    • https://blog.csdn.net/msdnwolaile/article/details/51278867
    • https://stackoverflow.com/questions/55296584/getting-127-0-1-1-instead-of-192-168-1-ip-ubuntu-python

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

  • 相关阅读:
    Linux检查Docker镜像,容器的磁盘空间
    前端HTML5+CSS3+移动Web全套教程
    MongoDB的安装和配置
    钡铼技术R40工业路由器连接工业控制系统实现远程监控
    SCR截面速度、氨氮比等标准及相对标准偏差计算
    ASP.NET Core 6框架揭秘实例演示[40]:基于角色的授权
    (一) 使用 Hugo 搭建个人博客保姆级教程(下篇)
    python迭代器模块itertools常用方法
    ubuntu18.04配置Java环境与安装RCS库
    语言大模型的进化轨迹
  • 原文地址:https://blog.csdn.net/uncle_ll/article/details/126412113
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号