众所周知,Python标准库socket中有可以获取本机IPV4地址的方法,下面是网上非常常见的一种用法:

>>> import socket
>>> hostname = socket.gethostname()
>>> hostname
'DESKTOP-I734J3O'
>>> socket.gethostbyname(hostname)
'192.168.0.103'

上面的代码在Windows下运行良好,但是无意中发现在Mac系统下运行不正常,返回的是本机回环地址127.0.0.1,而不是真正的IP地址。经过查阅大量资料,终于发现socket模块中另一个函数的妙用,那就是getaddrinfo()函数,该函数用法为getaddrinfo(host, port, family=0, type=0, proto=0, flags=0),返回值是一个五元组的列表,该五元组形式为(family, type, proto, canonname, sockaddr),其中最后一个元素sockaddr对于IPV4协议是(IP address, port)形式的元组,而对于IPV6协议是(address, port, flow info, scope id)形式的元组,也就是说,不管是IPV4还是IPV6,上面的函数都可以正确地获取IP地址。

于是,继续上面的代码:

>>> addrs = socket.getaddrinfo(hostname,None)
>>> for item in addrs:
     print(item)

(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('fe80::b976:b065:27d:3747%10', 0, 0, 10))
(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('fe80::1456:951:2418:27cf%7', 0, 0, 7))
(<AddressFamily.AF_INET: 2>, 0, 0, '', ('192.168.0.103', 0))
(<AddressFamily.AF_INET6: 23>, 0, 0, '', ('2001:0:9d38:6ab8:1456:951:2418:27cf', 0, 0, 0))

如此便可以获取本机所有IPV4和IPV6地址,如果只想获取IPV4地址,再继续执行下面的代码:

>>> [item[4][0] for item in addrs if ':' not in item[4][0]][0]
'192.168.0.103'

有关文章阅读:

Python获取局域网内所有机器IP地址与网卡MAC地址

Python批量判断IP地址所属地区

Python监视域名对应IP地址变化情况

Python获取本机所有网卡的MAC地址

--------------我是分割线-------------

“Python小屋”公众号近期主要活动:

1、赠书活动:详情请进入公众号以后通过菜单“最新资源”===>“历史文章分类表”进行查看

2、Python师资培训班:8月6日-12日,济南,面向全国高校老师和企业朋友,通知详见关于举办2017年暑期全国高校教师 “Python编程及应用”培训班通知,赠送Python教材2本、Python教学PPT超过1600页,Python教学视频140集,Python教学案例300个。补充说明:如果不需要安排住宿的话,5天学费2100元(含午餐)。

Python获取本机所有IP地址相关推荐

  1. python获取小王的ip地址_用Python获取本机的IP地址

    Linux import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket. ...

  2. python 获取本机wifi IP地址

    import os,re import webbrowserclass WeNetWork_open_browser():def execCmd(self, cmd): # 返回CMD命令输出的内容r ...

  3. python项目实战:获取本机所有IP地址的方法

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用python获取本机所有IP地址的具体代码,具有一定的参考价值,希望能够帮助到大家,代码如下: 导 ...

  4. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  5. C++获取本机的ip地址程序

    C++获取本机的ip地址程序 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库c ...

  6. 使用Linux curl命令获取本机公网IP地址

    使用Linux curl命令获取本机公共IP地址 在本教程中,我们将学习如何使用Linux curl命令查找计算机的公共IP地址. 通常,如果我们想要找到我们使用的公共IP地址,我们会去谷歌并搜索&q ...

  7. VB6获取本机所有IP地址公用函数

    因为正好有用到,整了个公用函数,一次获取本机全部IP地址: Option ExplicitPrivate Declare Function WSAstartup Lib "WSOCK32.D ...

  8. Spring boot 获取本机的IP地址mac地址以及电脑名称!

    Spring boot 获取本机的IP地址mac地址以及电脑名称! package com.example.demo;import java.net.InetAddress;import java.n ...

  9. 如何在Node.js中获取本机本地IP地址

    最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址.Node.js提供的API中,只能获取本机的hostname. os = require('os ...

最新文章

  1. Python破解验证码技术,识别率高达百分之八十
  2. 2.3.1 进程同步 进程互斥
  3. 查询当前oracle字符集,查询修改oracle当前字符集-转
  4. 使用Synergy多台电脑共享键盘鼠标和剪贴板
  5. oracle仲裁磁盘是一块磁盘吗,基于ASM冗余设计的架构,仲裁磁盘组应该如何去规划?...
  6. mysql innodb索引原理
  7. python-带返回值的装饰器
  8. lsm mysql_LSM设计一个数据库引擎
  9. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...
  10. php 输出可以设置格式文件,PHP实现的文件直接输出下载
  11. Math.random()取随机数一直为0
  12. 进程退出:SIGINT、SIGTERM和SIGKILL区别
  13. KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)
  14. oracle如何查看剩余表空间,oracle 查看各表空间剩余量
  15. mac OSX安装VTK
  16. java nginx 502_Nginx 中 502 和 504 错误详解
  17. Dao接口返回数组_在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?...
  18. 刚装好的mysql设置密码_第一次装好mysql后要设置密码
  19. 智慧创造财富,第十五期【新营销·创富大会】圆满落幕!
  20. 在数据库应用系统中数据库的开发

热门文章

  1. 插入公式_word2016编写文档 插入公式选项为暗,不能操作
  2. java设计模式观察者模式_java设计模式--观察者模式
  3. 最难忘的一节计算机课,最难忘的一节课作文五篇
  4. lcl手术和飞秒区别_想知道自己适合哪种近视手术?Mark!
  5. x射线直接投影成像的条件_告诉你如何区分X射线DR、CR和胶片成像?
  6. 史上最详 Thymeleaf 使用教程
  7. Struts2和Spring3 MVC的区别说明
  8. Jsp+Servlet+Mysql实现的在线图书商城源码
  9. 基于JAVA+SpringMVC+MYSQL的求职招聘管理系统
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线学习管理系统源码