Script para atribuir e remover IPs secundários arbitrários para uma interface

2

Estou tentando descobrir como escrever um script que me permita atribuir arbitrariamente e remover um endereço IP secundário de um sistema. Estou mais confortável com scripts em lote, então prefiro me concentrar em soluções para isso, se for possível.

Tenho certeza de que descobri como usar a entrada do usuário e usá-la para configurar um novo endereço IP e gateway.

O script em lote abaixo é escrito para uma interface chamada "LAN".

SET /P NEW-IPADDR="Enter IP:"
SET /P NEW-MASK="Enter Subnet Mask:"
SET /P NEW-GW="Enter Gateway:"
netsh interface ip add address name=LAN addr=%NEW-IPADDR% mask=%NEW-MASK% gateway=%NEW-GW% gwmetric=0
PAUSE

O PAUSE é inserido para permitir uma oportunidade de verificar erros em netsh antes que a janela do console saia automaticamente.

Tenho certeza de que o script poderia usar algumas instruções extras para verificação de erros (para contornar entradas de usuário vazias ou validar se as entradas correspondem ao padrão de um endereço IP). Mas o que me preocupa em descobrir agora é como limpar os endereços IP secundários definidos anteriormente.

Uma opção fácil seria simplesmente definir o script para limpar todos os IPs toda vez e ter uma linha pré-gravada que configure automaticamente o IP principal antes de solicitar o secundário. Idealmente, gostaria que o script funcionasse apenas em IPs secundários.

A opção dois é alterar a última linha do script acima para o seguinte:

ECHO "Secondary IP address configured.  Press any key to remove secondary IP."
PAUSE
netsh interface ip delete address name=LAN addr=%NEW-IPADDR% gateway=%NEW-GW%

No entanto, isso exige que o script não seja terminado de maneira anormal durante o PAUSE . Não é exatamente algo em que você possa confiar.

Outra opção seria ter o script armazenando os IPs secundários que ele configura em algum lugar permanente, para que ele possa extrair os valores posteriormente e trabalhar apenas com eles. É fácil colocar os valores em armazenamento permanente ( ECHO "%NEW-IPADDR%" > SecondaryIP.txt && ECHO "%NEW-MASK%" >> SecondaryIP.txt && ECHO "%NEW-GW%" >> SecondaryIP.txt ), mas agora tenho dois problemas:

  1. Não sei como obter os dados desse arquivo de texto, de uma forma que possa ser usada pelo script em lote. (Tenho certeza que isso pode ser facilmente corrigido).
  2. Isso depende do script ser a única coisa que toca o IP secundário. Um pouco mais confiável do que o script saindo normalmente, mas ainda não chega a 100%.

A opção ideal seria um script que possa reconhecer um "IP Primário" em oposição a um "IP Secundário" e somente trabalhar no segundo. Existe uma maneira de fazer isso?

Eu preciso de um método que seja compatível com uma versão padrão do Windows XP ou posterior, com pouco ou nenhum uso de ferramentas de terceiros. Embora eu prefira fazer isso em lote, também estou interessado em aprender mais sobre o PowerShell e ele está instalado nos sistemas em que usarei isso. Portanto, as soluções baseadas no PowerShell também são bem-vindas.

    
por Iszi 02.12.2011 / 16:36

1 resposta

1

Não consigo encontrar uma resposta completa, mas isso pode ajudá-lo a seguir na direção certa.

Você pode usar netsh do PowerShell para despejar a configuração atual.

netsh interface ipv4 dump >C:\netsh.txt

Isso deve lhe dar algo assim:

# ----------------------------------
# IPv4 Configuration
# ----------------------------------
pushd interface ipv4

reset
set global icmpredirects=enabled
add route prefix=0.0.0.0/0 interface="WAN" nexthop=192.168.1.1 publish=Yes
set subinterface interface= subinterface=ethernet_6 mtu=1492
add address name="WAN" address=192.168.1.200 mask=255.255.255.0
add address name="WAN" address=192.168.1.210 mask=255.255.255.0


popd
# End of IPv4 configuration

Você pode fazer 'grep' e 'sed' como operações no arquivo de texto resultante, usando as informações aqui . Esse é o bit que não posso detalhar sem gastar mais tempo com ele, porque, como você pode ver acima, as linhas para os endereços têm um formato idêntico. Seu script terá que usar as duas linhas de endereço para as variáveis, e você apenas sedará a segunda variável.

Você pode então executar o script de configuração editado com ...

netsh exec C:\netsh.txt

Observe que ipconfig mostrará dados de configuração novos e antigos até que você reinicie, mas deve aparecer corretamente na GUI, eu acho.

    
por 03.12.2011 / 20:27