Test connexion et VPN

Moutabix

Membre confirmé
1 Janvier 2011
33
2
Bonjour à tous,

J'ai pour habitude d'utiliser ce script :
Bloc de code:
on idle
	tell application "System Events" to tell current location of network preferences
		set t_service to service "VPN" -- nom du service VPN
		
		if not connected of current configuration of t_service then connect t_service
	end tell
	return 5 -- vérification au 5 secondes
end idle

Il permet de lancer un VPN au démarrage de la machine (j'ai créé une application lancée au démarrage). Etant souvent en déplacement, je n'ai pas toujours la possibilité d'être connecté à Internet. De ce fait l'application se lance et OSX m'affiche très souvent un message d'erreur comme quoi il ne peut pas se connecter. Normal. Du coup je suis obligé de quitter l'application pour que ces messages ne reviennent pas. Et si entre temps j'ai accès à une connexion, il me faut relancer l'application.

J'aimerai donc faire un script qui ne connecte le VPN uniquement si une connexion est active.

J'ai donc écrit ceci :
Bloc de code:
property test : missing value -- déclaration de la variable "test"

on run
	delay 1 -- délai pour laisser le temps à la machine de se connecté à Internet
	set test to true -- on présume qu'une connexion est disponible, soyons optimistes...
end run

on idle
	tell application "System Events" to tell current location of network preferences
		try
			do shell script "ping -c 1 google.com" -- on ping Google
		on error
			set test to false -- changement d"état de la variable en cas d'erreur
		end try
		
		if test is true then
			set t_service to service "VPN"
			if not connected of current configuration of t_service then -- si le VPN n'est pas connecté
				connect t_service -- on s'y connecte
			else
				delay 5 -- si déjà connecté, on attend 5 secondes avant de tester à nouveau la connexion VPN
			end if
		else
			delay 10 -- si le ping a échoué, on attend 10 secondes avant de tester à nouveau le ping
		end if
	end tell
	return 1 -- et on retourne au début après une seconde
end idle

Lorsque je lance l'application, aucun souci pour se connecter au VPN. Je débranche le câble RJ45 (je n'ai pas de Wifi sous la main pour essayer), le VPN se déconnecte. Jusque là tout va bien. Lorsque je rebranche le câble, rien ne se passe, le VPN n'est pas relancé.

Auriez-vous une petite idées? Une erreur de code? (c'est mon premier script, jusqu'à présent le copier-coller depuis Internet fonctionnait bien:))

Je vous remercie.

Moutabix
 
J'ai trouvé!

En cherchant un peu, je me suis rendu compte qu'avec le code précédent, une fois que la variable "test" était passé à l'état "faux", rien ne remettait à l'état "vrai". De ce fait, l'application ne relance jamais le VPN

Bloc de code:
on run
	delay 10 -- délai de 10 secondes pour laisser le temps à la machine de se connecter à Internet
end run

on idle
	tell application "System Events" to tell current location of network preferences
		set test to true as boolean
		try
			do shell script "ping -c 1 www.apple.com" -- on ping Apple
		on error
			set test to false -- changement d'état de la variable en cas d'erreur
		end try
		
		if test is true then
			set t_service to service "VPN"
			if not connected of current configuration of t_service then -- si le VPN n'est pas connecté
				connect t_service -- on s'y connecte
			else
				delay 5 -- si déjà connecté, on attend 5 secondes avant de tester à nouveau la connexion VPN
			end if
		else
			delay 10 -- si le ping a échoué, on attend 10 secondes avant de tester à nouveau le ping
		end if
	end tell
	return -- et on retourne au début
end idle

Et ça marche bien!

Pour ceux que ça intéresse, il suffit d'adapter les chiffres des délais et mettre le nom de votre VPN à la place de "VPN" dans le code.