O Mac OS X altera a configuração de IP automaticamente por local (por rede Wi-Fi)?

10

O Mac OS X pode ser configurado para configurar automaticamente sua interface do aeroporto com um endereço IP estático quando conectado a uma rede Wifi com um determinado nome e em todas as outras redes Wifi usar DHCP?

Atualmente, estou usando o recurso "Locais" da seção "Rede" nas Preferências do sistema para alternar manualmente entre duas configurações de endereço IP. Eu tenho uma configuração "meu IP estático" e uma configuração "DHCP" padrão. No entanto, isso requer a inserção de Preferências do sistema para alterar o menu suspenso sempre que se muda de local. Isso pode ser automatizado?

De preferência, isso seria feito sem software de terceiros.

Markus Hallmann
fonte

Respostas:

8

Isso não é algo que pode ser feito simplesmente através do sistema operacional.

Os locais acima mencionados são uma opção, juntamente com o freeware Location do aeroporto ou MarcoPolo ou pago Network Location. Há também um AppleScript chamado WiFiScriptor que pode ajudar.

Contudo! você não precisa acessar Preferências do sistema -> Rede -> [menu suspenso Localização]. Você pode acessar o menu Apple -> Local (cerca de 6 opções abaixo) -> [selecione o local desejado]

-b

supreme_b_ing
fonte
11
Obrigado pela dica sobre como trocar de local no menu Apple. Embora ainda manual, isso parece um pouco melhor do que entrar nas Preferências do Sistema com várias etapas.
Markus Hallmann
Agradecemos também por confirmar que atualmente não é possível fazê-lo sem software de terceiros.
Markus Hallmann
o link de localização do aeroporto parece apontar para um site de spam agora
Nat
9

É possível fazer sem terceiros, consulte https://github.com/rimar/wifi-location-changer

Yuval Rimar
fonte
2
Gostaria apenas de acrescentar que, para que isso funcione, o nome do seu local deve ser o mesmo que o SSID da rede wifi. A lógica do script é que ele procure um local com um nome semelhante ao SSID e mude para ele. Se não houver um local com esse nome, o padrão será automático / automático.
Rystraum
Além disso, tive que sair e fazer login novamente antes de começar a trabalhar no Yosemite.
precisa saber é o seguinte
1

Uma solução não livre de terceiros que provavelmente funcionaria para você é o Localizações .

Conforme sugerido por esta resposta a uma pergunta semelhante, mas não idêntica, sobre o stackoverflow, você pode criar um script que é executado em um intervalo regular. launchdimpedirá a execução mais de uma vez.

Psuedocode:

  • obter o valor save_wifi de um arquivo
  • defina current_wifi para saída de networksetup -getairportnetwork AirPort
  • se saved_wifi == current_wifi, saia
  • caso contrário, execute networksetup -switchtolocation {location}onde {location} é o nome do local para o qual você deseja alternar com base na rede wifi encontrada.

Pode haver uma situação de galinha e ovo aqui com a conexão ao wifi local que não fornece um endereço DHCP enquanto você está configurado para esperar um endereço do DHCP.

-

Atualização: possível pergunta duplicada encontrada que sugere uma solução de código- fonte aberto: MarcoPolo

Doug Harris
fonte
1

Como a resposta dada é manual, aqui está um script simples que a altera automaticamente:

Crie vários locais em Preferências do sistema> Rede para refletir cada uma das suas redes WiFi.

Script: ( /usr/bin/autolocation.sh) Coloque isso em algum local de sua preferência e altere os valores SSID no script de acordo com o seu cenário.

#!/bin/sh

#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/  */ /g' | awk '{print $3}'`

if [ $ssid = "voicegear" ]
then
        location="Office / Home"
elif [ $ssid = "vijay" ]
then
        location="Office / Home"
elif [ $ssid = "SCTHO" ]
then
        location="Shriram Santhome"
else
        location="Automatic"
fi

#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`

echo "${newloc}"

Este script altera a localização da rede (configurações) com base no SSID da rede sem fio. Agora, isso deve ser executado sempre que houver uma alteração nas configurações de rede. Criaremos um agente launchd para fazer o mesmo.

launchd plist: ( ~/Library/LaunchAgents/com.vg.netwatcher.plist)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.vg.netwatcher</string>
        <key>Program</key>
        <string>/usr/bin/autolocation.sh</string>
        <key>LaunchEvents</key>
        <dict>
                <key>com.apple.notifyd.matching</key>
                <dict>
                        <key>com.apple.system.config.network_change</key>
                        <dict>
                                <key>Notification</key>
                                <string>com.apple.system.config.network_change</string>
                        </dict>
                </dict>
        </dict>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

Criei esse arquivo ~/Library/LaunchAgents(dentro do meu diretório pessoal), pois sou o único usuário que está usando esta máquina. Se você quiser que seja global, coloque-o /Library/LaunchAgents.

Este arquivo deve ser de propriedade roote ter 600permissões:

sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist

Depois que você fizer logout / login ou reiniciar o sistema, o agente de inicialização começará a funcionar, dependendo de onde você colocou o arquivo (seu diretório pessoal ou global). Mas se você não deseja fazer isso e deseja que ele seja carregado agora, execute o seguinte na linha de comando. Você tem que fazer isso apenas uma vez.

cd ~/Library/LaunchAgents
sudo launchctl load -w com.vg.netwatcher.plist

É isso aí. Agora, o IP do seu Mac mudará automaticamente.

Nota: Também funciona em El Capitan!

Vij Vijay
fonte
1

Introdução ao Location Changer

Aqui está um script muito promissor para alterar os locais de rede com base no WiFi SSID:

É criado por Anton Eprev . Você pode visualizar o código e a documentação mais detalhada no GitHub:

Instalação

Ele é instalado via linha de comando:

$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

Ele solicitará uma senha root para instalar locationchangerno /usr/local/bindiretório.

É isso aí!

Depois disso, se houver um local de rede cujo nome seja idêntico ao nome (SSID) da rede WiFi atual , ele alternará automaticamente para o local de rede. Caso contrário, ele alternará para o local automático . (BTW, se não houver um local chamado Automático , ele reclama nos registros e saídas.)

Script específico do local

Se você deseja executar um script sempre que se conectar a uma rede Wi-Fi específica, insira esses scripts ~/.locationse nomeie-os de acordo com as redes Wi-Fi, por exemplo ~/.locations/Corp Wi-Fi:

#!/usr/bin/env bash

# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'

E você pode criar ~/.locations/Automaticque redefinirá essas alterações em outros locais:

#!/usr/bin/env bash

# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

Certifique-se de lançar bits de execução nos scripts ( chmod +x).

Aliases de localização

Você pode compartilhar um local de rede entre várias redes WiFi. Por exemplo, se você possui um roteador sem fio que transmite em bandas de 2,4 e 5 GHz ao mesmo tempo, pode criar um arquivo de configuração ~/.locations/locations.confe inserir pares simples de valores-chave:

Home_WiFi_5GHz=Home_WiFi

Aqui, as chaves são nomes de redes WiFi e os valores são os locais de rede correspondentes . Junte-se a eles com sinais de igualdade nus ( =, sem espaços). No exemplo acima, se a rede WiFi Home_WiFi_5GHz estiver conectada, ela mudará para o local de rede Home_WiFi .

Observe que os alias de local têm prioridade sobre a regra de mesmo nome. No exemplo acima, somente o script ~/.locations/Home_WiFiserá executado quando você se conectar à rede WiFi Home_WiFi_5GHz .

Com os aliases de localização, você nem precisa criar locais de rede extras para nomes correspondentes de redes WiFi.

Solução de problemas

Você pode visualizar logs extensos com o seguinte comando:

$ tail -f ~/Library/Logs/LocationChanger.log

Saída de amostra:

[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)

Desinstalação

Primeiro, descarregue o agente de inicialização:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Em seguida, remova o arquivo binário, plist e log:

rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
sudo rm /usr/local/bin/locationchanger

Você também pode remover arquivos de configuração e scripts específicos do local ~/.locations:

rm -rf ~/.locations
Rockallite
fonte