获取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()
相关推荐
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
mit6.8242 小时前
[1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
人工智能·python
没有bug.的程序员2 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋2 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
AntBlack3 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
杜子不疼.5 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
myzzb6 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
TLuoQiu6 小时前
小电视视频内容获取GUI工具
爬虫·python
我叫黑大帅6 小时前
【CustomTkinter】 python可以写前端?😆
后端·python
胡耀超6 小时前
DataOceanAI Dolphin(ffmpeg音频转化教程) 多语言(中国方言)语音识别系统部署与应用指南
python·深度学习·ffmpeg·音视频·语音识别·多模态·asr