码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python获取本机IP地址的几种方式~转


    Python获取本机IP地址的几种方式

    目录

     1、使用专用网址

     2、使用自带socket库

     3、使用第三方netifaces库


    1、使用专用网站

    获取的是公网IP。

    网址: http://myip.ipip.net

    代码:

    1. import requests
    2. res = requests.get('https://myip.ipip.net', timeout=5).text
    3. print(res)
    • 1.
    • 2.
    • 3.

    具体可以类似这样:

    1. import requests
    2. import re
    3. def getOutterIP():
    4. ip = ''
    5. try:
    6. res = requests.get('https://myip.ipip.net', timeout=5).text
    7. ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', res)
    8. ip = ip[0] if ip else ''
    9. except:
    10. pass
    11. return ip
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.

    Python获取本机IP地址的几种方式_主机名

     比较喜欢用这个,在命令窗口也能使用:

    curl https://myip.ipip.net
    • 1.

    Python获取本机IP地址的几种方式_网络_02

    2、使用自带socket库

    获取的是局域网IP。

    1. import socket
    2. # 函数 gethostname() 返回当前正在执行 Python 的系统主机名
    3. res = socket.gethostbyname(socket.gethostname())
    4. print(res)
    • 1.
    • 2.
    • 3.
    • 4.

    但是上面这个获取的不是公网IP,结果也不稳定(这里获取了虚拟机下的IP),不建议使用。

    Python获取本机IP地址的几种方式_网络协议_03

     如果计算机设备有连接到 Internet 的路由,可以使用:

    1. import socket
    2. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    3. s.connect(("8.8.8.8", 80))
    4. print(s.getsockname()[0])
    • 1.
    • 2.
    • 3.
    • 4.

    这个获得的是局域网IP:

    Python获取本机IP地址的几种方式_tcp/ip_04

    可以ipconfig看一下:

    Python获取本机IP地址的几种方式_主机名_05

    另一个适用于所有接口。它还适用于所有公共、私有、外部 IP。这种方法在 Linux、Windows 和 OSX 上很有效。

    1. import socket
    2. def extract_ip():
    3. st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    4. try:
    5. st.connect(('10.255.255.255', 1))
    6. IP = st.getsockname()[0]
    7. except Exception:
    8. IP = '127.0.0.1'
    9. finally:
    10. st.close()
    11. return IP
    12. print(extract_ip())
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.

    注意:如果本身局域网IP就是公网IP的话,那这个获得的,可以认为是公网IP了。

    3、使用第三方netifaces库

    获取的是局域网IP。

    netifaces 模块用于提供有关网络接口及其状态的信息。

    代码:

    没装的先装一下库

    pip3 install netifaces
    • 1.

    然后使用

    1. from netifaces import interfaces, ifaddresses, AF_INET
    2. for ifaceName in interfaces():
    3. addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}] )]
    4. print(' '.join(addresses))
    • 1.
    • 2.
    • 3.
    • 4.

    Python获取本机IP地址的几种方式_网络协议_06

  • 相关阅读:
    Linux下的的GDB调试技巧二 —— 基本功能
    【拖拽可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
    中大型商业银行堡垒机升级改造方案!必看!
    GD32(4)存储管理
    一起看 I/O | Android 开发工具最新更新
    冒泡排序算法(思路分析) [数据结构][Java]
    基于Python pygame简易版斗兽棋小游戏源代码
    备受以太坊基金会青睐的 Hexlink,构建亿级用户涌入 Web3的入口
    idea设置gradle
    代码随想录算法训练营第二十一天 | LeetCode 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
  • 原文地址:https://blog.csdn.net/bubudezhuren/article/details/133783567
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号