• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Überprüfen ob Netzwerkverbindung besteht oder geändert wurde

gesko

Alkmene
Registriert
05.09.06
Beiträge
34
Hi Folks,

gibt es mit applescript die Möglichkeit einfach zu prüfen ob eine Netzwerkverbindung (nicht Internetverbindung) besteht oder geändert wurde? Egal ob Airprot oder LAN.

Ich habe ein shell script geschrieben das den default gateway ändert wenn es im Netzwerk eine bestimmte MAC-Adresse findet.

Code:
#!/bin/sh

ROUTERMACADDRESS="0:24:fe:e1:13:33"
GATEWAYDEFAULT="192.168.2.2"
GATEWAYALT="192.168.2.1"


if arp -a | grep $ROUTERMACADDRESS >/dev/null 2>&1; then 
    
    route change default $GATEWAYALT
    echo "$(date) Route geändert"
    route -n get default
    
    if ! ping -c 1 google.com >/dev/null; then
        
        route change default $GATEWAYDEFAULT
    
    fi


fi

Dieses script soll nur ausgeführt werden wenn eine Netzwerkverbindung hergestellt oder geändert wird. Zum Beispiel WLAN Netzwerk wird gewechselt oder LAN-Stecker raus und wieder rein.

greets

gesko
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Du könntest dir einen launchd-Job erstellen, mit mindestens folgendem Grundgerüst:
Code:
[SIZE="-2"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//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>local.myjobs.example</string>
	<key>ProgramArguments</key>
	<array>
		<string>/path/to/my funny scripts/masterpiece</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
	<key>WatchPaths</key>
	<array>
		<string>/Library/Preferences/SystemConfiguration/preferences.plist</string>
	</array>
</dict>
</plist>[/SIZE]
 

gesko

Alkmene
Registriert
05.09.06
Beiträge
34
Code:
[SIZE=-2]
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/preferences.plist</string>
    </array>
[/SIZE]

Danke für Deine Hilfe. Die Datei "preferences.plist" wird bei mir aber nur beim Ändern der Airportverbindung geändert (z.B. Airport on/off). Ziehe ich den LAN Stecker an meinem MBA mit USB-Ethernet-Adapter ab und stecke kurz danach wieder an, wird die Datei nicht geändert. Oder wird die Datei wirklich jedes mal geladen und "RunAtLoad" würde das script dann triggern. Kann ich unter OS X irgendwo nachsehen wann eine Datei das letzte mal geladen wurde?

All the best,

gesko
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Äähmm... war gestern wohl zu spät zum fertig denken...
1) 'RunAtLoad' bezieht sich auf den Startzeitpunkt des lauchd-Jobs, nicht der mit WatchPaths beobachteten Datei(en).
2) Stop && REWIND
3) Versuchs stattdessen mit folgendem:
Code:
notifyutil -q -1 com.apple.system.config.network_change

[I]# Ob8: Eine Eins, kein 'L' [/I]
Der Befehl wird abwarten bis die Meldung von irgendeiner x-beliebigen Änderung der Netzwerkparameter eintrifft und sich dann beenden. Die Endlosschleife dazu überlasse ich deiner Fantasie.
 

gesko

Alkmene
Registriert
05.09.06
Beiträge
34
Code:
notifyutil [B]-q [/B]-1 com.apple.system.config.network_change

Vielen Dank für den Tip. Der Parameter "-p" ist allerdings überflüssig.

Ich habe dank Deiner Hilfe das Script nun fertig. Es macht genau das was es soll. 1000 Dank!

Code:
#!/bin/sh#
# Shell script to change default route when a dedicated router is detected on the network.
# by gesso
#
# This script must be run as root.
#
#####################################################
# VARIABLES
#####################################################
ROUTERMACADDRESS="0:24:fe:e1:13:33"
GATEWAYDEFAULT="192.168.2.2"
GATEWAYALT="192.168.2.1"


#####################################################
# MAIN SCRIPT 
#####################################################


while true
do
    if notifyutil -1 com.apple.system.config.network_change >/dev/null; then # Use notifyutil to monitor if there are changes on network. e.g. Cahnge WiFi or connect to another LAN.
        
        sleep 10 # Sleep for 10 sec
        
        if ! route -n get default | grep $GATEWAYALT >/dev/null; then # If route is NOT $GATEWAYALT then ..
        
            if arp -a | grep $ROUTERMACADDRESS >/dev/null 2>&1; then # Use arp to check for a MAC address on the network
            
                route change default $GATEWAYALT >/dev/null # Change default route if MAC address is available to $GATEWAYALT
            
                if ! ping -c 1 google.com >/dev/null; then # Check if there is NOT a internet connection on this gateway
                 
                     route change default $GATEWAYDEFAULT >/dev/null # If there is no connection change back the default gateway to $GATEWAYDEFAULT
             
                 fi
                 
             fi
        
        fi
    
    fi
    
done


Live long an prosper,

gesko