实例介绍
【实例简介】
修改本地DNS的可执行文件,使用管理员权限打开
【实例截图】
【核心代码】
# -*- coding: UTF8 -*- import os import re import wmi import ctypes import sys STD_OUTPUT_HANDLE = -11 # Windows CMD命令行 字体颜色定义 text colors FOREGROUND_DARKGREEN = 0x02 # dark green. FOREGROUND_RED = 0x0c # red. FOREGROUND_GREEN = 0x0a # green. FOREGROUND_BLUE = 0x09 # blue. FOREGROUND_DARKRED = 0x04 # dark red. # reset white def resetcolor(): set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) # 暗绿色 def darkgreen(mess): set_cmd_text_color(FOREGROUND_DARKGREEN) sys.stdout.write(mess) resetcolor() # 暗红色 def darkred(mess): set_cmd_text_color(FOREGROUND_DARKRED) sys.stdout.write(mess) resetcolor() # get handle std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) def set_cmd_text_color(color, handle=std_out_handle): bl = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color) return bl def runcmd(cmd): # 执行cmd命令 tmp = os.popen(cmd) res = tmp.read() # 要用read()方法读取后才是文本对象 tmp.close() # 需将对象关闭 pattern = re.compile('. :$', re.M) ip_type = pattern.findall(res) result = [item.strip() for item in res.split("\n") if item.strip() != "" and (item in ip_type or "123.125.97.254" in item) or ( item in ip_type or "114.247.39.112" in item)] ip = str(result).replace('[', '').replace(']', '') return ip def checkip(hostip): # 检查ip是否正确 pat = re.compile(r'([0-9]{1,3})\.') r = re.findall(pat, hostip ".") if len(r) == 4 and len([x for x in r if int(x) >= 0 and int(x) <= 255]) == 4: return True else: return False def moddns(ip): wmis = wmi.WMI() # Windows管理规范 col = wmis.Win32_NetworkAdapterConfiguration(IPEnabled=True) # 遍历可用网络适配器数 if len(col) < 1: print("没有找到可用的网络适配器") exit() num = 0 adns = [ip] # 需要修改的DNS while num < len(col): obj = col[num] if obj.Description.find("Virtual") == -1 and obj.Description.find("VPN") == -1: # 排除虚拟机 # print(obj) # 打印网卡信息(网卡名称、路径、网关、IP地址、DNS、物理地址等信息) rtv = obj.SetDNSServerSearchOrder(DNSServerSearchOrder=adns) # DNS赋值 # print(obj.DNSServerSearchOrder) # 打印DNS信息 if rtv[0] == 0: os.system("ipconfig/flushdns") print("---------------------------------------------") print("以下为修改DNS成功后解析<epay.10010.com>结果,请注意检查核对") print("---------------------------------------------") darkgreen(runcmd("nslookup epay.10010.com")) darkgreen(obj.Description) darkgreen(u'修改DNS成功\n') # 打印网卡修改DNS成功 else: darkred(obj.Description) darkred(u'修改DNS失败\n') # 打印网卡修改DNS失败 num = 1 def dhcpdns(): wmis = wmi.WMI() # Windows管理规范 col = wmis.Win32_NetworkAdapterConfiguration(IPEnabled=True) # 遍历可用网络适配器数 if len(col) < 1: print("没有找到可用的网络适配器") exit() num = 0 while num < len(col): obj = col[num] if obj.Description.find("Virtual") == -1 and obj.Description.find("VPN") == -1: # 排除虚拟机 # print(obj) # 打印网卡信息(网卡名称、路径、网关、IP地址、DNS、物理地址等信息) rtv = obj.SetDNSServerSearchOrder() # print(obj.DNSServerSearchOrder) # 打印DNS信息 if rtv[0] == 0: os.system("ipconfig/flushdns") print("---------------------------------------------") print("以下为修改DNS成功后解析<epay.10010.com>结果,请注意检查核对") print("---------------------------------------------") darkgreen(runcmd("nslookup epay.10010.com")) darkgreen(obj.Description) darkgreen(u'自动获取dns成功\n') # 打印网卡修改DNS成功 else: darkred(obj.Description) darkred(u'自动获取dns失败\n') # 打印网卡修改DNS失败 num = 1 while True: print("---------------------------------------------") print("注意:修改DNS时,请先断开VPN,且以管理员身份运行") print("---------------------------------------------") print("-----请输入0/1/2/3/4-----\n" "0、解析当前DNS\n" "1、自动修改西红门dns\n" "2、自动获取\n" "3、手动修改西红门或硅谷dns\n" "4、退出") i = input("请输入:\n") if i == '0': os.system("ipconfig/flushdns") print("---------------------------------------------") print("以下为解析<epay.10010.com>结果,请注意检查核对") print("---------------------------------------------") print(runcmd("nslookup epay.10010.com")) elif i == '1': print("自动修改西红门DNS地址:222.88.49.150") dns = "222.88.49.150" moddns(dns) # 自动修改西红门DNS elif i == '2': print("自动获取DNS,默认为硅谷") dhcpdns() # 自动获取DNS,默认为硅谷 elif i == '3': dns = input("请输入西红门或硅谷DNS地址:\n" "西红门:24.154.1.4、222.172.200.68(云南)、222.88.49.150(河南)\n" "硅谷:202.106.0.20(北京)、219.150.32.132(天津)\n") while True: if checkip(dns): moddns(dns) # 手动修改西红门或硅谷DNS break else: print("-----------------------") print("请注意检查输入DNS是否正确") print("-----------------------") dns = input("请输入西红门或硅谷DNS地址:\n" "西红门:24.154.1.4、222.172.200.68(云南)、222.88.49.150(河南)\n" "硅谷:202.106.0.20(北京)、219.150.32.132(天津)\n") elif i == '4': quit() else: print("请重新输入!\n")
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论