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

目录

1、使用专用网址

2、使用自带socket库

3、使用第三方netifaces库


1、使用专用网站

获取的是公网IP

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

代码:

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import requests
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         res = requests.get(
         
         'https://myip.ipip.net', timeout=
         
         5).text
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         print(res)
        
        
        
       
       
       

   

   
   
   

具体可以类似这样:

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import requests
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import re
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
         
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         def 
         
         getOutterIP():
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             ip = 
         
         ''    
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         try:
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 res = requests.get(
         
         'https://myip.ipip.net', timeout=
         
         5).text
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 ip = re.findall(
         
         r'(\d+\.\d+\.\d+\.\d+)', res)
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 ip = ip[
         
         0] 
         
         if ip 
         
         else 
         
         ''
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         except:
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
                
         
         pass
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         return ip
        
        
        
       
       
       

   

   
   
   

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

bash 复制代码
curl https://myip.ipip.net
   
   
   

还可以用这个:https://api.ipify.org

2、使用自带socket库

获取的是局域网IP

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import socket
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         # 函数 gethostname() 返回当前正在执行 Python 的系统主机名
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         res = socket.gethostbyname(socket.gethostname())
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         print(res)
        
        
        
       
       
       

   

   
   
   

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

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

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import socket
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

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

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

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

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         print(s.getsockname()[
         
         0])
        
        
        
       
       
       

   

   
   
   

这个获得的是局域网IP:

可以ipconfig看一下:

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

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         import socket
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         def 
         
         extract_ip():
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

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

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         try:       
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 st.connect((
         
         '10.255.255.255', 
         
         1))
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 IP = st.getsockname()[
         
         0]
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         except Exception:
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 IP = 
         
         '127.0.0.1'
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         finally:
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
                 st.close()
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         return IP
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         print(extract_ip())
        
        
        
       
       
       

   

   
   
   

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

3、使用第三方netifaces库

获取的是局域网IP

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

代码:

没装的先装一下库

python 复制代码
pip3 install netifaces
   
   
   

然后使用

python 复制代码
   
   
   
    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         from netifaces 
         
         import interfaces, ifaddresses, AF_INET
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
         for ifaceName 
         
         in interfaces():
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
        
         
             addresses = [i[
         
         'addr'] 
         
         for i 
         
         in ifaddresses(ifaceName).setdefault(AF_INET, [{
         
         'addr':
         
         'No IP addr'}] )]
        
        
        
       
       
       

    
* 
       
       
       
        
        
        
       
       
       

       
       
       

        
        
            
         
         print(
         
         ' '.join(addresses))
        
        
        
       
       
       

   

   
   
   
相关推荐
并不喜欢吃鱼1 分钟前
一.C++11:统一列表初始化 + std::initializer_list 超详细精讲
开发语言·c++
好好学仿真4 分钟前
机器学习预测聚合物拉伸强度:五种回归算法对比(附Kaggle数据集 + 五折交叉验证)
python·机器学习·xgboost·梯度提升·材料性能预测·随机森林回归
CHHH_HHH9 分钟前
【C++】二叉搜索树全面升级,深度剖析AVL树
开发语言·数据结构·c++·算法·stl
奋斗的小方13 分钟前
Java基础篇09(2):项目实战之基于swing的石头迷阵
java·开发语言
http阿拉丁神猫23 分钟前
TCP、IPv4和IPv6解读
运维·网络协议·tcp/ip
宸津-代码粉碎机27 分钟前
Spring AI 企业级RAG实战|增量更新+文档去重+定时自动入库生产落地方案
java·大数据·人工智能·后端·python·spring
正在走向自律28 分钟前
告别低效繁琐!DeepSeek+Python 重塑科研绘图新范式
python·开发工具·deepseek·ai辅助编程
Evand J30 分钟前
【代码介绍】自适应R的AEKF(自适应扩展卡尔曼滤波)和经典EKF比较,MATLAB例程|三维非线性系统
开发语言·matlab·ekf·自适应·自适应滤波
曾阿伦30 分钟前
Unicode 正则表达式开发指南
python·正则表达式
香辣西红柿炒蛋33 分钟前
yaml文件介绍、数据读取
python