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()