Lokale Ip mit Batch Script ändern?
Hallo kann mir jemand ein BAT Script geben mit dem ich meine lokale IP also zumbeispiel von 192.168.178.40 zu 192.168.178.41 ändern. Das ganze möchte ich für ein Programm nutzen. Kann mir da jemand helfen welches ich einfach mit Copy Paste in eine BAT einfügen.
Danke schonmal im Vorraus.
3 Antworten
netsh interface ip set address "LAN-Verbindung" static 192.168.178.41 255.255.255.0 IP-GW X
Musst halt den namen der "Lan-verbindung" wissen und die jeweilige GW-IP.
Das X braucht halt dann noch den Wert für die Metrik. Müsste man ausprobieren, ob die Metrik übernommen wird, wenn da nix eingetragen wird.
Ich möchte definitiv kein Schaden verursachen
Das glaube ich Dir gern.
Erst gestern hatten wir hier jemanden, der sich das Gateway weggeschossen hatte. (sowas passiert nicht von selbst)
Theorethisch kannst Du das auch Script kopieren. Besser wäre es jedoch zu begreifen was diese Batch tut. Das akquirieren der nötigen Daten ist das wichtigste für ein Programm welches weitgehend automatisch ablaufen soll.
Hier eine nahezu narensichere Batch... .diese legt sogar eine zweite Batch an, um wieder auf automatischen Bezug der Adresse zu schalten.
Die Anderen haben wunderbar aus dem weiten Netz abgeschrieben...Beifall.
Ganz so einfach kopieren is auch nicht!!! Ich habe zusätzlich dafür gesorgt, das die getätigten Einstellungen nur bis zum nächsten Neustart existieren. Danach ist alles wie zuvor. (zusätzliche Sicherheit gegen Dummheit.)
Das ist Batch und der code liegt vor Dir wie ein offenes Buch . Wenn Du soweit bist zu verstehen was da so alles abläuft. Wirst Du auch in der Lage sein die Veränderungen persistent zu machen.
@echo off
chcp 65001 >nul
setlocal enableDelayedExpansion
rem Verbindungsnamen und MAC holen (letztere zum spezifizieren des richtigen Adapters)
for /f "tokens=2,3 delims=," %%a in ('"wmic nic where NetEnabled=True get NetConnectionID,MACAddress,TimeOfLastReset /format:csv"') do (
set "__nicMACAddress=%%a"
set "__nicNetConnectionID=%%b"
)
rem Adressrohdaten holen (wmic macht weniger arbeit als das filtern der eingedeutschten Ipconfigausgabe)
for /f "usebackq tokens=*" %%. in (`"wmic nicconfig where MACAddress='%__nicMACAddress%' get DefaultIPGateway,DNSServerSearchOrder,GatewayCostMetric,IPAddress,IPSubnet,SettingID /format:csv"`) do (
rem leere Felder mit "n/a" auffüllen (eines der Dinge die passieren können, wenn man nicht konsequent alle Paramater setzt )
set "__dummyLine=%%."
for /f " tokens=2-6 delims=," %%a in ("!__dummyLine:,,=,n/a,!") do (
set "__nicConfigDefaultIPGateway=%%~a"
set "__nicConfigDNSServerSearchOrder=%%~b"
set "__nicGatewayCostMetric=%%~c"
set "__nicConfigIPAddress=%%~d"
set "__nicConfigIPSubnet=%%~e"
)
)
rem !!!!!!!!!!!!!!!!Der ganze Aufwand, dass der Nutzer sich nicht selbst abschießt!!!!!!!!!!!!!!!!!!!!
rem nicht jedes System muss zwangsläufig IPv6 gesetzt haben (zB ältere Router aus vor 2007; ja die sind noch immer am Netz)
rem Ipv4 adressen einzeln ausfiltern , mögliche unterschiedliche Anzahl von Feldern macht sonst die Selektion zum Russischroulett)
rem Gatway zuerst.
for /f "tokens=1 delims=;{} " %%a in ("%__nicConfigDefaultIPGateway%") do (
set "__localNetworkIPv4Gateway=%%~a"
)
rem 2 DNS sind Standard ,Länge von DNS kann vareiren!(andere verwerfen)
for /f "tokens=1,2 delims=;{} " %%a in ("%__nicConfigDNSServerSearchOrder%") do (
set "__localNetworkDNS1=%%~a"
set "__localNetworkDNS2=%%~b"
)
rem wir brauchen nur die SubnetMaske
for /f "tokens=1 delims=;{} " %%a in ("%__nicConfigIPSubnet%") do (
set "__localNetworkSubnetMask=%%~a"
)
rem und zu guter letzt die aktuelle eigene IPv4Adresse
for /f "tokens=1 delims=;{} " %%a in ("%__nicConfigIPAddress%") do (
set "__localNetworkIPv4=%%~a"
)
rem Gatewaymetrik
for /f "tokens=1 delims=;{} " %%a in ("%__nicGatewayCostMetric%") do (
set "__localNetworkGatewayMetric=%%~a"
)
set "__localNetworkConnectionID=%__nicNetConnectionID%"
echo:
echo Nur die sind erstmal wichtig
set __localNetwork
rem bis zu diesem Punkt ging es nur um das sammeln der aktuellen Daten
rem dafür sorgen, das der Nutzer im Netzwerkbereich des Gateways bleibt (es gibt neben gebräuchlichen 8bit-IP-Raum sind auch 16,20 und 24Bit gebrächlich)
rem die folgenden Testroutine unterstützten der Einfachheithalber nicht den 20 Bit UserAdressRaum!!!!
rem zerlege IPv4 und SubnetMask
for /f "tokens=1-4 delims=." %%a in ("%__localNetworkIPv4%") do (
set "__IPv4Spilt_1=%%a"
set "__IPv4Spilt_2=%%b"
set "__IPv4Spilt_3=%%c"
set "__IPv4Spilt_4=%%d"
)
for /f "tokens=1-4 delims=." %%a in ("%__localNetworkSubnetMask%") do (
set "__SubnetMaskSpilt_1=%%a"
set "__SubnetMaskSpilt_2=%%b"
set "__SubnetMaskSpilt_3=%%c"
set "__SubnetMaskSpilt_4=%%d"
)
rem filtere IPv4 Basisbereich aus (hier siehst Du wozu die Subnetmaske dient!)
set "__BaseIP="
for /l %%a in (1,1,4) do (
if !__SubnetMaskSpilt_%%a! neq 0 (
set "__BaseIPv4=!__BaseIPv4!!__IPv4Spilt_%%a!."
) else (
set "__BaseIPTail=!__BaseIPTail!x."
)
)
set "__BaseIPTail=%__BaseIPTail:~0,-1%"
:reask
echo:
echo Dein verfügbarer Adressbereich ist %__BaseIPv4%%__BaseIPTail%
echo Bitte vervollständige die Adresse zu Deiner gewünschten IP.
set /p "__newIP=%__BaseIPv4%"
set "__newIP=%__BaseIPv4%%__newIP%"
rem in den meisten Netzwerken sind die Adressen x.x.x.0 und >254 reserviert!
rem diese vermeiden! (könnte böse enden)
rem also prüfen was der User da tut
for /f "tokens=1-4 delims=." %%a in ("%__newIP%") do (
set /a "__dummy=%%d+0"
if !__dummy! lss 1 (
echo Die Adresse %%a.%%b.%%c.!__dummy! ist reserviert oder ungültig ^^!
goto :reask
)
if !__dummy! geq 254 (
echo Die Adresse %%a.%%b.%%c.!__dummy! ist reserviert oder ungültig ^^!
goto :reask
)
)
rem das Gateway auf den eigenen Rechner zu setzen ist erlaubt ,
rem dies ist jedoch eine extrem dumme Idee, wenn der Rechner kein Server ist!!! (in der Regel muss danach auch der Router zurückgesetzt werden -- ganz schlecht)
rem also prüfen was der User da tut
if "%__newIP%"=="%__localNetworkIPv4Gateway%" (
echo Die Adresse %__newIP% ist für das lokale Gateway reserviert ^^!
goto :reask
)
rem Vorsicht ist die Mutter des Elefanten im Porzelanladen:
echo erzeuge eine Reset-Batch "reset DHCP.cmd" falls irgendwas schiefgegangen ist!
@(
echo netsh interface ip set address name="%__localNetworkConnectionID%" dhcp
echo ipconfig /renew >nul
echo ipconfig /all
echo pause
)>"reset DHCP.cmd"
rem bis hier alles nur um dumme Nutzer von dummen Dingen abzuhalten!
rem wenn ich das an meinem Rechner mache brauche ich nur diese eine Zeile,
rem das oberhalb weiß ich aus dem Kopf und muss auch nicht darauf achten, das ich etwas dummes mache
netsh interface ip set address name="%__localNetworkConnectionID%" source=static address=192.168.0.20 mask=%__localNetworkSubnetMask% gateway=%__localNetworkIPv4Gateway% gwmetric=%__localNetworkGatewayMetric% store=active
ipconfig /all
pause
exit /b
Es gibt gute Gründe weshalb einige Sachen Administratorberechtigungen benötigen.
Jemandem der keine Ahnung hat eine Batch zu bauen, welche fähig ist komplexe Systemeinstellungen beinhaltet wäre unverantwortlich.
Es ist ja nicht nur das ändern der Ipv4 ebenso müssen auch ander Parameter angepasst werden (DNS-Server, ipv6-Addressen) usw.
Natürlich könnte ich das ganze in einem automatisierten script erledigen...keine Frage. Wenn ich das an unseren Rechnern wirklich mal von Hand machen muss bin ich jedoch zugegen und kann gegebenenfalls Korrekturen vornehmen. Lasse ich ein solches Script auf einen fremden Rechner los, dessen Einstellungen ich nicht kenne habe ich keine Kontrolle über die Vorgänge.
Das ganze möchte ich für ein Programm nutzen.
Wie muss ich das verstehen? Du hast keine Ahnung von Netzwerken und Rechnern und möchtest ein fremdes Script in ein eigenes Programm einbauen?
@DominikPrinz hat Dir de bereits den Namen des Programms mitgeteilt, mit welchem man Netzwerkadaptereinstellungen vornimmt (netsh)
Beschäftige dich damit , dann trägst Du die Verantwortung für Dein eigenes Programm und den Schaden, welchen es unter Umständen verursacht.
ich habe meine Antwort "hoch" genommen : https://www.gutefrage.net/frage/lokale-ip-mit-batch-script-aendern#answer-353460989
Ich möchte definitiv kein Schaden verursachen