Este tutorial trata sobre la Interfaz de Red NetSh, una herramienta que nos permite realizar consultas, aplicar y exportar configuraciones, diagnosticar problemas y automatizar configuraciones y comprobaciones de red entre sus variadas opciones.
Qué es el Shell de Red netsh
El shell de Red netsh
es una utilidad de scripting de línea de comandos, que nos permite mostrar y configurar componentes de red, tanto para equipos locales como remotos. Netsh está disponible en las siguientes versiones de Windows:
- Windows Server 2016, 2019 y 2022
- Windows 10 21H2 y 20H2
Es una herramienta recomendada para crear scripts de configuración de red con la finalidad de configurar equipos de forma rápida y eficaz. Podemos utilizar netsh de diferentes formas:
- Desde el el Shell Cmd (Símbolo de Sistema).
- Desde la interfaz de consola de PowerShell.
- En Scripts de PowerShell y Batch Scripting (archivos por lotes).
Netsh utiliza la biblioteca de vínculos dinámicos (DLL) para poder interactuar con los componentes del Sistema Operativo. Por ejemplo, la librería Dhcpmon.dll proporciona a netsh el contexto y el conjunto de comandos necesarios para configurar y administrar los servidores DHCP.
Comenzando con netsh
Podemos utilizar netsh accediendo a su consola escribiendo netsh y a continuación escribiendo el comando (contexto) que queremos utilizar. También podemos ejecutar un directamente el comando netsh que deseamos ejecutar.
1 2 |
PS c:\> netsh netsh> |
Una vez en la consola debemos saber que Netsh trabaja con contextos y subcontextos. Cada contexto/subcontexto dispone de un conjunto de comandos que podemos consultar utilizando el símbolo interrogación (?). A continuación se nos muestra una lista de contextos y subcontextos disponibles:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
netsh ? Comandos en este contexto: .. - Sube un nivel de contexto. ? - Muestra una lista de comandos. abort - Descarta los cambios realizados estando en modo Sin conexión. add - Agrega una entrada de configuración a una lista de entradas. advfirewall - Cambia al contexto `netsh advfirewall'. alias - Agrega un alias. branchcache - Cambia al contexto `netsh branchcache'. bridge - Cambia al contexto `netsh bridge'. bye - Sale del programa. commit - Confirma los cambios realizados en el modo Sin conexión. delete - Elimina una entrada de configuración de una lista de entradas. dhcpclient - Cambia al contexto `netsh dhcpclient'. dnsclient - Cambia al contexto `netsh dnsclient'. dump - Muestra un script de configuración. exec - Ejecuta un archivo de script. exit - Sale del programa. firewall - Cambia al contexto `netsh firewall'. help - Muestra una lista de comandos. http - Cambia al contexto `netsh http'. interface - Cambia al contexto `netsh interface'. ipsec - Cambia al contexto `netsh ipsec'. lan - Cambia al contexto `netsh lan'. mbn - Cambia al contexto `netsh mbn'. namespace - Cambia al contexto `netsh namespace'. netio - Cambia al contexto `netsh netio'. offline - Establece el modo actual a Sin conexión. online - Establece el modo actual a En línea. p2p - Cambia al contexto `netsh p2p'. popd - Extrae un contexto de la pila. pushd - Inserta el contexto actual en la pila. quit - Sale del programa. ras - Cambia al contexto `netsh ras'. rpc - Cambia al contexto `netsh rpc'. set - Actualiza las opciones de configuración. show - Muestra información. trace - Cambia al contexto `netsh trace'. unalias - Elimina un alias. wcn - Cambia al contexto `netsh wcn'. wfp - Cambia al contexto `netsh wfp'. winhttp - Cambia al contexto `netsh winhttp'. winsock - Cambia al contexto `netsh winsock'. wlan - Cambia al contexto `netsh wlan'. Los siguientes subcontextos están disponibles: advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ipsec lan mbn namespace netio p2p ras rpc trace wcn wfp winhttp winsock wlan |
Como los contextos netsh pueden contener subcontextos, podemos seguir el mismo procedimiento (?) para consultar los comandos u opciones de que dispone cada uno de ellos. En este caso vamos a obtener más información de las opciones del contexto interface:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
netsh>interface ? Los siguientes comandos están disponibles: Comandos en este contexto: 6to4 - Cambia al contexto `netsh interface 6to4'. ? - Muestra una lista de comandos. dump - Muestra un script de configuración. help - Muestra una lista de comandos. httpstunnel - Cambia al contexto `netsh interface httpstunnel'. ipv4 - Cambia al contexto `netsh interface ipv4'. ipv6 - Cambia al contexto `netsh interface ipv6'. isatap - Cambia al contexto `netsh interface isatap'. portproxy - Cambia al contexto `netsh interface portproxy'. set - Establece la información de configuración. show - Muestra información. tcp - Cambia al contexto `netsh interface tcp'. teredo - Cambia al contexto `netsh interface teredo'. udp - Cambia al contexto `netsh interface udp'. Los siguientes subcontextos están disponibles: 6to4 httpstunnel ipv4 ipv6 isatap portproxy tcp teredo udp |
De la misma forma procedemos a consultar la ayuda para el Subcontexto tcp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
netsh>interface tcp ? Los siguientes comandos están disponibles: Comandos en este contexto: ? - Muestra una lista de comandos. add - Agrega una entrada de configuración a una tabla. delete - Elimina una entrada de configuración de una tabla. dump - Muestra un script de configuración. help - Muestra una lista de comandos. reload - Recarga algunos estados de configuración persistentes. Experimental. No usar. reset - Restablece los valores predeterminados de todos los parámetros TCP. rundown - Desencadena una detención de la conexión en cualquier sesión de seguimiento activa. set - Establece la información de configuración. show - Muestra información. |
Desplazándonos entre contextos y subcontextos
Una vez conocemos como funciona internamente el Shell de Red Netsh, veamos como podemos desplazarnos entre contextos y subcontextos. Accedemos a un contexto introduciendo su nombre:
1 2 3 4 |
netsh netsh>interface netsh interface>tcp netsh interface tcp> |
Retrocedemos al contexto anterior utilizando el signo de puntuación del punto (.):
1 2 |
netsh interface tcp> . netsh interface> |
A continuación podemos consultar información sobre los interfaces de red de que disponemos:
1 2 3 4 5 6 7 |
netsh interface>show interface Estado admin. Estado Tipo Nombre interfaz ------------------------------------------------------------------------- Habilitado Conectado Dedicado VirtualBox Host-Only Network Habilitado Desconectado Dedicado Wi-Fi Habilitado Conectado Dedicado Ethernet |
El contexto ipv4 y wlan con ejemplos
Ahora que conocemos cómo funciona la Interfaz de Red NetSh iremos viendo con algunos ejemplos su potencial y lo que nos puede ayudar para realizar scripts de configuración automática para equipos.
El contexto ipv4
Conocemos el contexto interface por lo que a continuación aprenderemos un poco más de cerca sobre el subcontexto ipv4. Vamos a combinarlo con el comando set para cambiar la dirección IP y puerta de enlace de nuestro interfaz de red Ethernet.
1 |
netsh interface>ip set address "ethernet" static 192.168.0.50 255.255.255.0 192.168.0.1 |
A continuación comprobamos que se ha realizado el cambiado accediendo al contexto ipv4.
1 2 3 4 5 6 7 8 9 |
netsh interface ipv4>show addresses Configuración para la interfaz "Ethernet" DHCP habilitado: No Dirección IP: 192.168.0.50 Prefijo de subred: 192.168.0.0/24 (máscara 255.255.255.0) Puerta de enlace predeterminada: 192.168.0.1 Métrica de puerta de enlace: 1 Métrica de interfaz: 25 |
Si queremos que nuestra interfaz de red se configure automáticamente vía DHCP, especificaremos el parámetro source (podemos incluirlo si lo deseamos) como dhcp.
1 |
netsh interface>ip set address "ethernet" dhcp |
Al igual que el comando de red ipconfig /all podemos consultar información detallada de los interfaces de que disponemos,
1 2 3 4 5 6 7 8 9 10 11 12 13 |
netsh interface ipv4>show config Configuración para la interfaz "Ethernet" DHCP habilitado: Sí Dirección IP: 192.168.0.14 Prefijo de subred: 192.168.0.0/24 (máscara 255.255.255.0) Puerta de enlace predeterminada: 192.168.0.1 Métrica de puerta de enlace: 0 Métrica de interfaz: 25 Servidores DNS configurados estáticamente: 8.8.8.8 8.8.4.4 Registrar con el sufijo: Solo el principal Servidores WINS configurados a través de DHCP: ninguno |
Tenemos la posibilidad de utilizar la Interfaz de Red Netsh en sus diferentes contextos como Herramienta de Diagnóstico ya que permite consultar una variada cantidad de información. Por lo que si disponemos de tiempo es buen momento de bucear en este contexto ipv4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
netsh interface ipv4>show ? Los siguientes comandos están disponibles: Comandos heredados desde el contexto netsh: show alias - Lista todos los alias definidos. show helper - Lista todos los servicios de ayuda de nivel superior. show mode - Muestra el modo actual. Comandos en este contexto: show addresses - Muestra configuraciones de direcciones IP. show compartments - Muestra parámetros de compartimiento. show config - Muestra direcciones IP e información adicional. show destinationcache - Muestra las entradas de caché de destino. show dnsservers - Muestra las direcciones del servidor DNS. show dynamicportrange - Muestra parámetros de configuración de intervalo de puertos dinámicos. show excludedportrange - Muestra todos los intervalos de puertos excluidos. show global - Muestra parámetros de configuración global. show icmpstats - Muestra estadísticas ICMP. show interfaces - Muestra parámetros de interfaz. show ipaddresses - Muestra direcciones IP actuales. show ipnettomedia - Muestra asignaciones de red IP a medios. show ipstats - Muestra estadísticas IP. show joins - Muestra los grupos de multidifusión unidos. show neighbors - Muestra entradas en caché de vecinos. show offload - Muestra la información de descarga. show route - Muestra entradas de tabla de rutas. show subinterfaces - Muestra parámetros de subinterfaz. show tcpconnections - Muestra conexiones TCP. show tcpstats - Muestra estadísticas TCP. show udpconnections - Muestra conexiones UDP. show udpstats - Muestra estadísticas UDP. show winsservers - Muestra las direcciones del servidor WINS. |
El contexto wlan
A continuación vamos a trabajar con el contexto wlan que nos permite consultar información relacionada sobre los interfaces de red Wireless. El comando show es el que nos permite mostrar información adicional.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
netsh wlan>show interfaces Hay 1 interfaz en el sistema: Nombre : Wi-Fi Descripción : TP-Link Wireless USB Adapter GUID : 6ac1c51c-3022-4338-9c56-658e219986c1 Dirección física : d4:6e:0e:03:be:ed Estado : desconectado Estado de radio : Hardware Activado Software Activado Hosted network status : No disponible |
También podemos verificar todas las conexiones inalámbricas disponibles a las que podemos conectar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
>netsh wlan show networks Nombre de interfaz : Wi-Fi Actualmente hay 10 redes visibles. SSID 1 : Lowi7032 Tipo de red : Infraestructura Autenticación : WPA2-Personal Cifrado : CCMP SSID 2 : MiFibra-EFA6 Tipo de red : Infraestructura Autenticación : WPA2-Personal Cifrado : CCMP SSID 3 : JAVIKOLINO Tipo de red : Infraestructura Autenticación : WPA2-Personal Cifrado : CCMP |
Veamos cómo funciona el contexto connect y disconnect, que nos permite conectar y desconectar nuestro interfaz de red Wifi de un punto de acceso:
1 2 |
netsh wlan>connect name="ANDROMEDA" La solicitud de conexión se completó correctamente. |
1 2 |
netsh wlan>disconnect La solicitud de desconexión se completó correctamente para la interfaz "Wi-Fi". |
Si por el contrario queremos habilitar o deshabilitar el interfaz de red Wifi haremos lo siguiente:
1 2 |
netsh interface>set interface "Wi-Fi" disabled netsh interface>set interface "Wi-Fi" enabled |
Por si fuera poco también podemos consultar los perfiles guardados de cada punto de acceso WIFI que tengamos guardados. Empezaremos consultando los perfiles de que disponemos:
1 2 3 4 5 6 7 8 9 10 11 |
netsh wlan>show profiles Perfiles en la interfaz Wi-Fi: Perfiles de directiva de grupo (solo lectura) --------------------------------------------- <Ninguno> Perfiles de usuario ------------------- Perfil de todos los usuarios : ANDROMEDA |
A continuación consultamos el perfil detallado del punto de acceso, con su configuración incluidas las claves de acceso guardadas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
netsh wlan>show profile name="ANDROMEDA" key=clear Perfil ANDROMEDA en la interfaz Wi-Fi: ======================================================================= Aplicado: Perfil de todos los usuarios Información del perfil ---------------------- Versión : 1 Tipo : LAN inalámbrica Nombre : ANDROMEDA Opciones de control : Modo de conexión : conectar automáticamente Difusión de red : conectarse solo si esta red está difundiendo Cambio automático: no cambiar a otras redes Selección aleatoria de dirección MAC: deshabilitada Configuración de conectividad ----------------------------- Número de SSID : 1 Nombre de SSID : "ANDROMEDA" Tipo de red : Infraestructura Tipo de radio : [ Cualquier tipo de radio ] Extensión de proveedor : no está presente Configuración de seguridad -------------------------- Autenticación : WPA2-Personal Cifrado : CCMP Autenticación : WPA2-Personal Cifrado : GCMP Clave de seguridad : Presente Contenido de la clave : laclavedeaccesopuedesconsultarlaaqui Configuración de costos ------------- Costo : Sin restricciones Congestionado : No A punto de alcanzar el límite de datos: No Límite de datos superado : No Itinerancia : No Origen de costo : Predeterminado |
Netsh y PowerShell Scripting
Conocemos el funcionamiento básico de la Interfaz de Red Netsh y a continuación veremos un ejemplo de un script en PowerShell para automatizar tareas de red.
El siguiente script nos permite trabajar con hashes que contienen la configuración de red de equipos, de tal forma que cuando lo ejecutemos, primero consultará el nombre del equipo y establecerá una configuración específica para cada uno de ellos.
Por supuesto también lo podríamos complicar más consultando esta información desde un CSV para así tener toda la información más organizada, consultando la dirección Mac en vez de la interfaz de red en vez del nombre del equipo, etc …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`""; exit; } # Recupera el nombre del ordenador donde se ejecuta el script (ejemplo: DPL3451) $computer = (Get-WmiObject Win32_OperatingSystem).PSComputerName # configuración por defecto # Si indicamos dhcp el equipo se configura por asignación de ip dinámica $conf = @{ Name = "Ethernet"; Source = "static" } # Lista de equipos # source puede ser static/dhcp $computers = @{ EQUIPO01 = @{ Computer = "EQUIPO01"; Name = "Ethernet"; Source = "static"; Ip = "172.16.1.34"; Mask = "255.255.0.0"; Gateway = "172.16.1.1"; } EQUIPO02 = @{ Computer = "EQUIPO02"; Name = "Ethernet"; Source = "static"; Ip = "172.16.1.35"; Mask = "255.255.0.0"; Gateway = "172.16.1.1"; } } # Servidores NS (defecto) $ns = @{ Ns1 = "172.16.10.12"; Ns2 = "192.168.112.12" } Write-Output("Configuración IP fija: " + $computers[$computer].Computer) Write-Output($computers[$computer]) Write-Output($ns) if ( $conf.Source -eq "static" ) { # static ip netsh interface ipv4 set address $computers[$computer].Name $computers[$computer].Source $computers[$computer].Ip $computers[$computer].Mask $computers[$computer].Gateway # static dns servers netsh interface ipv4 add dnsservers $computers[$computer].Name $ns.Ns1 netsh interface ipv4 add dnsservers $computers[$computer].Name $ns.Ns2 index=2 } else { # Para asignar dhcp netsh interface ipv4 set address $computers[$computer].Name dhcp netsh interface ipv4 set dnsservers $computers[$computer].Name dhcp } |
Utilizando netsh como herramienta de consulta y diagnóstico
Netsh puede ser utilizado como herramienta de diagnóstico. Nos permite consultar información detallada sobre el sistema y sobre las configuración de red. En el siguiente tutorial hablaremos de ello con más detalle.
Advertencia sobre el uso de netsh y TCP/IP
En futuras versiones de Windows, es posible que Microsoft elimine la función Netsh para TCP/IP, por lo que Microsoft recomienda que realicemos los procesos de configuración y administración de TCP/IP en Windows PowerShell.
Deberíamos comenzar a utilizar los comandos para la administración de TCP/IP que proporciona Windows Powershell.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
PS C:\> Get-Command -Module NetTCPIP CommandType Name Version Source ----------- ---- ------- ------ Function Find-NetRoute 1.0.0.0 NetTCPIP Function Get-NetCompartment 1.0.0.0 NetTCPIP Function Get-NetIPAddress 1.0.0.0 NetTCPIP Function Get-NetIPConfiguration 1.0.0.0 NetTCPIP Function Get-NetIPInterface 1.0.0.0 NetTCPIP Function Get-NetIPv4Protocol 1.0.0.0 NetTCPIP Function Get-NetIPv6Protocol 1.0.0.0 NetTCPIP Function Get-NetNeighbor 1.0.0.0 NetTCPIP Function Get-NetOffloadGlobalSetting 1.0.0.0 NetTCPIP Function Get-NetPrefixPolicy 1.0.0.0 NetTCPIP Function Get-NetRoute 1.0.0.0 NetTCPIP Function Get-NetTCPConnection 1.0.0.0 NetTCPIP Function Get-NetTCPSetting 1.0.0.0 NetTCPIP Function Get-NetTransportFilter 1.0.0.0 NetTCPIP Function Get-NetUDPEndpoint 1.0.0.0 NetTCPIP Function Get-NetUDPSetting 1.0.0.0 NetTCPIP Function New-NetIPAddress 1.0.0.0 NetTCPIP Function New-NetNeighbor 1.0.0.0 NetTCPIP Function New-NetRoute 1.0.0.0 NetTCPIP Function New-NetTransportFilter 1.0.0.0 NetTCPIP Function Remove-NetIPAddress 1.0.0.0 NetTCPIP Function Remove-NetNeighbor 1.0.0.0 NetTCPIP Function Remove-NetRoute 1.0.0.0 NetTCPIP Function Remove-NetTransportFilter 1.0.0.0 NetTCPIP Function Set-NetIPAddress 1.0.0.0 NetTCPIP Function Set-NetIPInterface 1.0.0.0 NetTCPIP Function Set-NetIPv4Protocol 1.0.0.0 NetTCPIP Function Set-NetIPv6Protocol 1.0.0.0 NetTCPIP Function Set-NetNeighbor 1.0.0.0 NetTCPIP Function Set-NetOffloadGlobalSetting 1.0.0.0 NetTCPIP Function Set-NetRoute 1.0.0.0 NetTCPIP Function Set-NetTCPSetting 1.0.0.0 NetTCPIP Function Set-NetUDPSetting 1.0.0.0 NetTCPIP Function Test-NetConnection 1.0.0.0 NetTCPIP |