¿Cómo cambiar realmente la dirección IP programáticamente sin reiniciar (sin conexión también)?

6

Realmente, intenté todo, y no hay una solución que funcione para mí.

  1. WMI: todo perfecto, pero no puedo cambiar la dirección IP cuando no hay conexión. O_o ¿Estás bromeando? ¿Cómo puedo hacer una conexión sin la dirección IP correcta?
  2. IPHelper: no hacer nada. Solo agrego dirección a la tabla. No funciona después de reiniciar.
  3. netsh: la forma estúpida, creo, pero está bien, si no lo haces, puedes intentarlo de otra manera. Antes de que sepa, el nombre de los adaptadores de red puede contener caracteres internacionales. ¿Alguien sabía cómo funciona en realidad, quiero decir dentro?
  4. Registro: funciona después del reinicio. No quiero reiniciar. ¿Puede alguien saber cómo notificar sobre cambios en las entradas de registro?

fuente
Cambiar el registro no ayudará porque eso no permite que el resto del sistema conozca la actualización, al menos no sin reiniciar. Debe modificarlo utilizando las API establecidas (que luego cambian el registro por usted). ¿Ha intentado deshabilitar la conexión / adaptador de red después de realizar el cambio y luego habilitarlo nuevamente?
Synetech
quizás esta pregunta de SO sea útil
Jeremy W

Respuestas:

2

Hice un guión que te puede gustar.
Utiliza netsh para lograr lo que necesita.

Simplemente copie el código aquí en un nuevo archivo y asígnele un nombre similar a configip.bat o como prefiera (simplemente no lo llame ipconfig :)

Deberá modificar varias cosas en el script:
direcciones IP que desee, máscaras de subred y puertas de enlace.
Todos los servidores DNS están configurados en Google (8.8.8.8), por lo que es muy probable que funcionen para usted, a menos que su ISP requiera que use los suyos. En ese caso, usa esos.

Tiene varias opciones para la red local (cableada e inalámbrica), así como DHCP (IP autoasignada).
También hay una opción para volcar su configuración actual para que pueda ver cómo se ve desde la perspectiva de netsh.
Esto le permitirá modificar mi script con facilidad ya que tendrá todos los parámetros en el archivo c: \ networkconfig.txt.

Por supuesto, si necesita más ayuda con la modificación, estaré aquí :)


@echo off
cls
:start
echo.
echo IP Configuration
echo.
echo 1. LAN Home
echo 2. LAN Office
echo 3. LAN DHCP
echo 4. WLAN Home
echo 5. WLAN Office
echo 6. Configuration Dump
echo 7. Quit
echo.

set /p userinput=Enter your choice: set option=%userinput:~0,1% if "%option%"=="1" goto homelan if "%option%"=="2" goto officelan if "%option%"=="3" goto landhcp if "%option%"=="4" goto homewan if "%option%"=="5" goto officewan if "%option%"=="6" goto configdump if "%option%"=="7" goto end echo. echo Invalid choice goto start

:homelan echo. echo Applying LAN HOME configuration. echo. netsh interface ip set address "Local Area connection" static 192.168.1.2 255.255.255.0 192.168.1.1 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:officelan echo. echo Applying LAN OFFICE configuration. echo. netsh interface ip set address "Local Area connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Local Area Connection" static 8.8.8.8 goto end

:landhcp echo. echo Applying DYNAMIC configuration. echo. netsh interface ip set address name="Local Area Connection" source=dhcp netsh interface ip set dns name="Local Area Connection" source=dhcp goto end

:homewan echo. echo Applying WLAN HOME configuration. echo. netsh interface ip set address name="Wireless Network Connection" source=dhcp netsh interface ip set dns name="Wireless Network Connection" source=dhcp goto end

:officewan echo. echo Applying WLAN OFFICE configuration. echo. netsh interface ip set address name="Wireless Network Connection" static 123.456.78.90 255.255.255.0 123.456.78.254 1 netsh interface ip set dns name="Wireless Network Connection" static 8.8.8.8 goto end

:configdump netsh -c interface dump > c:\networkconfig.txt echo. echo Config file "c:\networkconfig.txt" created. echo. echo To restore settings from config dump, use: echo netsh -f networkconfig.txt echo. pause goto end

:end

extremko
fuente
¿Hay alguna manera de averiguar los nombres de las conexiones mediante programación? ¿O al menos la conexión que está actualmente en uso?
Sterex
Gracias @Kaitlyn, pero no recuerdo por qué incluso busqué esto (waaay en 2013). De todos modos, puede ayudar a las personas que buscan una solución si realmente elaboras las dos formas que mencionaste. :)
Sterex