Скрипт для изменения IP-адреса на Windows - PullRequest
12 голосов
/ 28 сентября 2011

Я использую свой компьютер для связи с оборудованием через Ethernet.Для связи с этим устройством я установил свой ip на 192 168 0 11, маску подсети на 255 255 255 0 и шлюз по умолчанию на 192 168 0 1 для IPv4.Чтобы использовать Интернет, я выбираю «Получить IP-адрес автоматически» через панель управления.

Мне бы хотелось, чтобы у меня был скрипт, который позволял бы мне быстро выбирать тот или иной параметр Ethernet - аппаратный или интернет.

Я программирую в основном на python, но, возможно, есть решение для пакетных файлов

Спасибо,

Барри.

Ответы [ 3 ]

16 голосов
/ 28 сентября 2011

Для этого можно использовать модуль WMI Python (установите расширения PyWin32 и модуль WMI перед запуском этих сценариев).Вот как настроить вещи для общения с аппаратным устройством:

import wmi

# Obtain network adaptors configurations
nic_configs = wmi.WMI().Win32_NetworkAdapterConfiguration(IPEnabled=True)

# First network adaptor
nic = nic_configs[0]

# IP address, subnetmask and gateway values should be unicode objects
ip = u'192.168.0.11'
subnetmask = u'255.255.255.0'
gateway = u'192.168.0.1'

# Set IP address, subnetmask and default gateway
# Note: EnableStatic() and SetGateways() methods require *lists* of values to be passed
nic.EnableStatic(IPAddress=[ip],SubnetMask=[subnetmask])
nic.SetGateways(DefaultIPGateway=[gateway])

Вот как вернуться к автоматическому получению IP-адреса (через DHCP):

import wmi

# Obtain network adaptors configurations
nic_configs = wmi.WMI().Win32_NetworkAdapterConfiguration(IPEnabled=True)

# First network adaptor
nic = nic_configs[0]

# Enable DHCP
nic.EnableDHCP()

Примечание: вВ производственном скрипте вы должны проверить значения, возвращаемые EnableStatic () , SetGateways () и EnableDHCP () .(«0» означает успех, «1» означает, что требуется перезагрузка, а другие значения описаны на страницах MSDN, связанных именами методов. Примечание: для EnableStatic () и SetGateways () коды ошибок возвращаются в виде списков).

Полная информация обо всех функциональных возможностях класса Win32NetworkAdapterConfiguration также может быть найдена в MSDN .

Примечание. Я проверял это на Python 2.7, но так как модули PyWIn32 и WMIдоступно для Python 3, я полагаю, что вы сможете добиться того, чтобы это работало для Python 3, удалив символ "u" перед строковыми литералами.

5 голосов
/ 28 сентября 2011

Вы можете использовать модуль подпроцесса для запуска

netsh interface ip set address [params]

Запустите это из командной строки (без [params]), чтобы получить некоторую помощь по его использованию.Тогда вы можете сделать

import subprocess
subprocess.call("netsh interface ip set address ....".split())

Обновление:

Для тех, кто слишком занят, чтобы rtfm,

netsh interface ip set address lan static 192.168.0.100 255.255.255.0
netsh interface ip set address lan dhcp

здесь lan этоимя настраиваемого сетевого интерфейса, 192.168.0.100 - это IP-адрес, 255.255.255.0 - маска сети.Первая команда устанавливает статический адрес, вторая возвращается к dhcp.

0 голосов
/ 18 января 2019

Вы можете использовать vbscript для изменения IP-адреса,

Dim strIPAddress, strSubnetMask,strGateway, intGatewayMetric, strDns1, strDns2, objWMIService, colItems, stradaptername, objFSO
Const ForReading = 1 
Const ForAppending = 8
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set OutPutFile = objFSO.CreateTextFile("C:\ProgramData\test.txt" ,2 , True)
Set InterfaceName = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter Where NetConnectionStatus >= 0")
If objFSO.FileExists("C:\ProgramData\test.txt") Then
Set OutPutFile = objFSO.CreateTextFile("C:\ProgramData\test1.txt" ,2 , True)
End If
For Each objItem in InterfaceName
If objFSO.FileExists("C:\ProgramData\test.txt") Then
arrInterfaces = objItem.NetConnectionID
'wscript.echo "test: " &arrInterfaces
Set objFileToWrite = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\ProgramData\test.txt",8,true)
ObjFileToWrite.WriteLine(arrInterfaces)
objFileToWrite.Close
Set objFileToWrite = Nothing
End If
next
If objFSO.FileExists("C:\ProgramData\test.txt") Then
Set objFileToRead = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\ProgramData\test.txt",1)
strFileText = objFileToRead.ReadAll()
objFileToRead.Close
Set objFileToRead = Nothing
'wscript.echo "obtained" &strFileText
End If
Result = inputbox("Enter the AdapterName: " &vbCrLf &strFileText)
If Result = "" then
'wscript.echo "user selected cancel"
Else
strIPAddress=InputBox("Enter Static IP Adrress: ")
strSubnetMask =InputBox("Enter SubnetMask: " )
strGateway=InputBox("Enter Default Gateway: ")
strDns1=InputBox("Enter Preferred DNS: ")
strDns2=InputBox("Enter Alternate DNS: ")
Set objShell = WScript.CreateObject("Wscript.Shell")
objShell.CurrentDirectory = "C:\Windows\System32"
objShell.Run "netsh interface ip set address name=""" & Result & """ static " & strIPAddress & " " & strSubnetMask & " " & strGateway & " " & intGatewayMetric, 0, True
objShell.Run "netsh interface ip set dns name=" & Result & " static "& strDns1, 0, True
objShell.Run "netsh interface ip add dns name=" & Result & " addr="& strDns2, 0, True
Set objShell = Nothing: Set obj=Nothing
End If
WScript.Quit
...