通过 UDP 获取本机 IP,没有任何的依赖,也没有去猜测机器上的网络设备信息,而且是利用 UDP 协议来实现的,生成一个UDP包,把自己的 IP 放如到 UDP 协议头中,然后从UDP包中获取本机的IP。

这个方法并不会真实的向外部发包,所以用抓包工具是看不到的。但是会申请一个 UDP 的端口,所以如果经常调用也会比较耗时的,这里如果需要可以将查询到的IP给缓存起来,性能可以获得很大提升。

# 可以封装成函数,方便 Python 的程序调用

import socket

def get_host_ip():

try:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.connect(('8.8.8.8', 80))

ip = s.getsockname()[0]

finally:

s.close()

return ip

if __name__ == '__main__':

print(get_host_ip())

不推荐:通过hostname来获取本机IP

import socket

print(socket.gethostbyname(socket.gethostname()))

# 有可能出现这个情况

Traceback (most recent call last):

File "", line 1, in

socket.gaierror: [Errno -2] Name or service not known

这个方法是通过获取hostname,然后再通过hostname反查处机器的IP。这个方法也是不推荐的。因为很多的机器没有规范这个hostname的设置。

另外就是有些服务器会在 /etc/hosts 中添加本机的hostname的地址,这个做法也不是不可以,但是如果设置成了 127.0.0.1,那么获取出来的IP就都是这个地址了。

python3读取本地_Python3 获取本机 IP相关推荐

  1. Shell脚本中获取本机ip地址,Linux获取本地ip地址

    在 Shell 脚本中获取本机 IP 地址可以通过多种方式实现,这里介绍三种常用的方法: 1. 使用 ifconfig 命令获取本机 IP 地址 ifconfig 命令可以获取本机网卡的配置信息,包括 ...

  2. java:获取本机IP,Linux环境下使用InetAddress.getLocalHost()方法获得127.0.0.1

    知道InetAddress.getLocalHost()方法是可以获取本地ip的,但是在mac电脑上执行的时候,偶尔会得到127.0.0.1的输出,这样拿到本地ip很不稳定,感觉就很不靠谱了 目录 I ...

  3. Qt获取本机IP、MAC地址、子网掩码、网卡名等函数设计

    获取本机IP函数 QString getIp() {QString myIp;QList<QHostAddress> ipList = QNetworkInterface::allAddr ...

  4. java returnAddres_java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了...

    本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...

  5. python 提取网关信息_python:使用netifaces模块获取本机IP网关等信息

    python获取本机IP有很多种方法,可每种方法都有局限性. 使用netifaces模块获取本机IP网关等信息,需要安装netifaces模块,不管windows还是linux都可以通用. 一.程序: ...

  6. Java 网络实例一(获取指定主机的IP地址、查看端口是否已使用、获取本机ip地址及主机名、获取远程文件大小)

    获取指定主机的IP地址 import java.net.InetAddress; import java.net.UnknownHostException;public class GetIP {pu ...

  7. java获取本机ip地址_代码片段:获取系统所有IP

    问题 在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等.如下图所示: 每一张网卡由不同的类型,也可以分别被用户启用或禁用. 对于单独一张给定的网卡,其IP地址可以是D ...

  8. bat批处理开发-wifi联网系列(4):连接wifi,获取本机ip、网关及dns,并通过ping对wifi网络的连通性可用性进行检测

    公司wifi很不稳定,编写了个wifi断网后自动重连的批处理,主要包括:可用wifi查询.联网.wifi切换感知.自动检测及掉线重连,网络状态分析等功能. 本次分享第四部分:连接wifi,并对wifi ...

  9. qt获取本机全部ipv4_QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址...

    获取主机名称 /* * 名称:get_localmachine_name * 功能:获取本机机器名称 * 参数:no * 返回:QString */ QString CafesClient::get_ ...

最新文章

  1. 斐波那契数列及青蛙跳台阶问题
  2. REAL6410、OK6410、TE6410 的区别
  3. 石油大c语言答案,中国石油大学C语言答案
  4. 数字证书 - Java加密与安全
  5. 编程语言的发展趋势及未来方向(3):函数式编程
  6. gradle compile mysql_Gradle配置implementation、api与compile的区别
  7. java EE 监听器
  8. C 语言的数据类型宽度扩展
  9. javascript中的options.add() options.remove() options(index)或options.item(index)
  10. 基于用户画像的商品推荐挑战赛
  11. mysql2005错误码_SQL Server2005 常见错误及解决方案
  12. playbook_黑莓PlayBook的第一波Union游戏揭晓!
  13. 数据结构如何申请一个空间的队列_如何用鞋柜来作为隔断,隔出一个玄关空间...
  14. word 输入数学公式(1)
  15. 常见的http状态码有哪些?分别表示什么意思?
  16. 红亚太学链之区块链技术深度剖析第9章
  17. SQL Server 扩展秘钥管理(EKM)
  18. iOS中的各种快捷键
  19. super_status_bar与status_bar的关系
  20. Week2 Bing词典Android客户端案例分析

热门文章

  1. 分享一个dapper简单封装
  2. 关于JXL读写以及修改EXCEL文件转
  3. Eclipse不编译java文件的解决方法
  4. RSA China 2011女嘉宾:用更好的武器应对带枪的敌人!
  5. S5PV210体系结构与接口10:MMU编程
  6. yuv播放器/rgb播放器
  7. Spring-beans-BeanDefinitionReader
  8. Eclipse-class文件中文乱码
  9. SQLite内部机制和新特性
  10. SQLite3中核心C API