获取mac地址,内网ip,当前ip位置信息

复制代码
import json
import socket
import time
import requests
from urllib.parse import quote

class Home_Url():
    def get_mac(self):
        from psutil import net_if_addrs
        mac = ''
        info = net_if_addrs()
        for k, v in info.items():
            if k not in ['以太网', 'en0'] and '以太网' not in str(k):
                continue
            print(k)
            for i in v:
                if '-' in i[1] or ':' in i[1]:
                    if len(i[1]) == 17:
                        mac = str(i[1]).lower()
                        break
        if not mac:
            node = uuid.getnode()
            mac = uuid.UUID(int=node).hex[-12:]
            mac = '-'.join([mac[i:i + 2] for i in range(0, len(mac) + 2 // 2, 2)])[:-1]
        return mac

    def get_external_ip(self):
        external_ip = None
        url1 = 'https://ipinfo.io/json'
        url2 = 'https://checkip.amazonaws.com/json'
        url3 = 'https://api.ipify.org/?format=json'
        url4 = 'https://api64.ipify.org'
        url5 = 'http://ip-api.com/json/?lang=zh-CN'
        urls = [url1, url2, url4, url3, url5]
        headers = {
            'Accept': '*/*',
            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47'
        }
        for url in urls:
            try:
                proxies = {"http": None, "https": None}
                res = requests.get(url, headers=headers, proxies=proxies, timeout=25)
                if res.text.count('{') > 0:
                    response = json.loads(res.text)
                    external_ip = response.get('ip') or response.get('query')
                else:
                    external_ip = res.text
                if external_ip.strip():
                    return external_ip.strip()
            except:
                pass
        return external_ip

    def get_city_region(self):
        # 获取当前ip位置信息
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
        }
        url = 'https://whois.pconline.com.cn/ipJson.jsp?json=true'
        try:
            res = requests.get(url, headers=headers, timeout=5)
            response = json.loads(res.text)
            city = response['city']
            return city
        except:
            return ''

    def get_mac_address(self):
        mac = self.get_mac()
        print('mac:', mac)
        # 获取主机名
        hostname = socket.gethostname()
        # 内网IP地址
        # intranet_ip = socket.gethostbyname(hostname)
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        intranet_ip = s.getsockname()[0]
        # 外网ip
        try:
            external_ip = self.get_external_ip()
        except:
            external_ip = '127.0.0.1'
        return mac, hostname, intranet_ip, external_ip
   
    def run(self):
        mac, hostname, intranet_ip, external_ip = self.get_mac_address()

if __name__ == '__main__':
    start = Home_Url()
    start.run()
相关推荐
想会飞的蒲公英2 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记3 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名3 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code3 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook4 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
我的xiaodoujiao6 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099676 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing7 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉8 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda