Script для изменения IP-адреса в окнах

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

Я хотел бы иметь script, который позволяет мне быстро выбрать один или другой параметр ethernet - аппаратное обеспечение или интернет.

Я программирую в основном на python, но, возможно, есть пакетное решение.

Спасибо,

Барри.

Ответ 1

Вы можете использовать Python WMI-модуль для этого (установите расширения 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()

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

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

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

Ответ 2

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

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.

Ответ 3

Вы можете использовать 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