python 呼叫dos修改IP 、閘道器 、子網掩碼
阿新 • • 發佈:2022-04-14
想要修改成功,必須用管理員才行;
有2種方法:1)python要呼叫管理員視窗 ; 2)寫好後的py檔案用管理員執行;
方法1
import ctypes, sys, os, time import datetime cmd1 = "netsh interface ip set address \"VMware Network Adapter VMnet8\" static " cmd2 = " 255.255.255.0 192.168.109.1" def is_admin(): try: print("admin-",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) return ctypes.windll.shell32.IsUserAnAdmin() except: time.sleep(2) print("no admin-",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) return False def admin_exe(cmd) : print('先進入EXE ',datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) if is_admin(): print("admin_exe函式內,以管理員許可權執行 " ,datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) time.sleep(10) os.system(cmd) print("執行了更改IP語句 ",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) time.sleep(30) print("時間結束,彈窗消失",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) time.sleep(2) else: if sys.version_info[0] == 3: print('admin_exe函式內,還沒有管理員許可權 ',datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) print("執行了管理員身份語句",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) def getIP(ip): return ip if __name__ == '__main__': print("admin_exe前",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")) global deviceIP
# 輸入要修改的IP str = input("tipmsg:") deviceIP = str cmd = cmd1+deviceIP+cmd2 print(cmd) admin_exe(cmd) print("admin_exe後",datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"))
解析:
1) 通過main進入,輸入IP,先判斷是否為管理員,如果不是執行升級為管理員身份語句 :ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1);此時就打開了管理員視窗。
2)程式自動再次進入main方法(此時是管理員視窗);輸入IP,執行修改IP命令;
程式碼解析:
dos修改IP語句解釋 ,請參考:
https://www.cnblogs.com/ychun/p/16143627.html
文章參考:https://blog.csdn.net/qq_43909184/article/details/107424740
以管理員執行操作,請參考如下:
https://blog.csdn.net/xuhui_liu/article/details/73832743
https://blog.csdn.net/qq_42028065/article/details/102958208