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

9

O Mac OS X pode ser configurado para configurar automaticamente sua interface de aeroporto com um endereço IP estático quando conectado a uma rede Wi-Fi com um determinado nome, e em todas as outras redes Wifi usam 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 padrão "DHCP". No entanto, isso exige que você insira Preferências do Sistema para alterar a lista suspensa Local sempre que alternar entre locais. Isso pode ser automatizado?

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

    
por Markus Hallmann 07.01.2011 / 21:31

5 respostas

8

Isso não é algo que pode ser feito simplesmente pelo sistema operacional.

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

No entanto, você não precisa entrar em Preferências do Sistema - > Rede - > [Menu suspenso Local]. Você pode acessar o Menu Apple -> Localização (cerca de 6 opções abaixo) - > [selecione o local desejado]

-b

    
por 07.01.2011 / 22:31
7

É possível fazer sem terceiros, consulte link

    
por 07.03.2012 / 00:11
1

Uma solução não-livre de terceiros que provavelmente funcionaria para você é Locais .

Como sugerido por esta resposta para uma pergunta semelhante, mas não idêntica, em stackoverflow, você pode criar um script que seja executado em um intervalo regular. launchd impedirá que ele seja executado mais de uma vez.

Psuedocode:

  • obtenha o valor saved_wifi de um arquivo
  • defina current_wifi como saída de networksetup -getairportnetwork AirPort
  • se saved_wifi == current_wifi, saia
  • else execute networksetup -switchtolocation {location} , em que {location} é o nome do local para o qual você deseja alternar com base na rede Wi-Fi encontrada.

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

-

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

    
por 07.01.2011 / 22:19
1

Introdução ao Location Changer

Este é um script muito promissor para alterar os locais de rede com base no SSID de Wi-Fi:

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

Instalação

Instala via linha de comando:

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

Ele pedirá uma senha de root para instalar o diretório locationchanger to /usr/local/bin .

É isso aí!

Depois disso, se houver um local de rede cujo nome é idêntico ao nome (SSID) da rede Wi-Fi atual , ele alternará automaticamente para o local da rede. Caso contrário, ele mudará para o local Automático . (BTW, se não houver nenhum local chamado Automatic , ele reclama em logs e saídas).

Script específico do local

Se você quiser executar um script toda vez que se conectar a uma rede WiFi específica, coloque esses scripts em ~/.locations e nomeie-os após redes WiFi, 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 talvez você queira criar ~/.locations/Automatic que 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 ).

Alias de localização

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

Home_WiFi_5GHz=Home_WiFi

Aqui, as chaves são nomes de redes Wi-Fi e os valores são 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 localização têm prioridade sobre a regra de nome igual. No exemplo acima, somente o script ~/.locations/Home_WiFi será executado quando você se conectar à rede Wi-Fi Home_WiFi_5GHz .

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

Solução de problemas

Você pode ver registros extensos com o seguinte comando:

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

Exemplo de saída:

[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 lançamento:

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 em ~/.locations :

rm -rf ~/.locations
    
por 13.10.2017 / 05:24
0

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

Crie vários locais nas 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 mude os valores de 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/^.*(\(.*\)).*$//''

echo "${newloc}"

Este script alterará 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. Vamos criar um agente de lançamento 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>

Eu criei este arquivo em ~/Library/LaunchAgents (dentro do meu diretório home), pois sou o único usuário que usa essa máquina. Se você quiser que ele seja global, coloque-o em /Library/LaunchAgents .

Este arquivo deve ser de propriedade de root e ter 600 permissions:

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

Uma vez que você efetue logout / login ou reinicialize o sistema, o agente de inicialização iniciará o trabalho, dependendo de onde você colocou o arquivo (seu diretório home ou global). Mas se você não quiser fazer isso e quiser 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. Agora o IP do seu Mac será alterado automaticamente.

Nota: Também funciona no El Capitan!

    
por 20.04.2016 / 08:36