Page 1 sur 1
[..] Controle parental
Posté : mer. 06 oct. 2010 12:40
par fred39
Bonjour, sur notre ordi familial, Chaque membre de la famille a un compte du style parent ou enfant.
Je voudrais mettre en place un filtrage parental pour les comptes enfants par l'intermédiaire de opendns.
Le principe d'openDNS est de rediriger les serveur dns dans la config ip vers les serveurs de opendns.
Je voudrais que seul les comptes enfants aient ces dns
Changer la config dns par script n'est pas un problème.
Mais comment changer les dns à la volée, en fonction de la session qui est ouverte?
Je suis preneur de toute idée.
Merci
Re: [..] Controle parental
Posté : mer. 06 oct. 2010 17:18
par SrBelial
bonjour,
hé bien si vous savez déjà changer la config dns par script aucun souci !
il vous suffit juste de faire exécuter un script à l'ouverture de session, qui en fonction de la session ouverte ira changer la config.
* vous compilez votre script pour remettre les DNS normaux, et hop on le place dans "C:\Documents and Settings\Parents\Menu Démarrer\Programmes\Démarrage\"
* vous compilez votre script pour remettre les DNS OpenDNS, et hop on le place dans "C:\Documents and Settings\Enfants\Menu Démarrer\Programmes\Démarrage\"
je pense que ça devrait le faire, sinon bah reviens vers nous !
Re: [..] Controle parental
Posté : mer. 06 oct. 2010 21:23
par fred39
Merci
J'avais bien pensé à faire comme ça.
Mais j'ai testé et dans le cas de "bascule" entre les comptes utilisateurs, ou si les sessions ne sont pas fermées, après une mise en veille par exemple;
quand on revient sur une session déjà ouverte, il n'exécute pas ce qu'il y a dans programmes démarrage.
Re: [..] Controle parental
Posté : jeu. 07 oct. 2010 15:46
par SrBelial
bon,
je propose autre chose, un peu plus robuste je pense, mais qui aura l'inconvénient de devoir tourner en permanence :
au démarrage, dans tous les utilisateurs : lancement du script
dans le script : boucle infinie qui teste toutes les 10 secondes le contenu de la macro "@UserName" => permet de déterminer si le compte est parent ou enfant.
Si changement de compte depuis la dernière vérification : on appelle la fonction qui va bien (dns normaux ou opendns)
est ce que ça convient mieux ?
Code : Tout sélectionner
While 1
Sleep(10000)
;/*Test contenu de @UserName et traitement conditionné*/
Wend
Re: [..] Controle parental
Posté : jeu. 07 oct. 2010 19:37
par Tlem
Il faudrait voir si il n'est pas possible de passer par un GPO.
Sinon, la solution de SrBelial me semble bien si le script est lancé en tant que service.
Re: [..] Controle parental
Posté : jeu. 07 oct. 2010 21:57
par fred39
Je n'ai pas trouvé par GPO. je m'attèle à ça et post dès que finalisé.
merci
Re: [..] Controle parental
Posté : mer. 13 oct. 2010 23:10
par fred39
Bonsoir, je suis en train de faire le script dont voici le code
Code : Tout sélectionner
#NoTrayIcon
#Include <Array.au3>
$utilisateur=@UserName ; quel est l'utilisateur connecté
;MsgBox(0,"test",$utilisateur)
Dim $SetOpenDns[2]
$SetOpenDns[0]="208.67.222.222"
$SetOpenDns[1]="208.67.220.220"
Dim $arrayenfants[2]
$arrayenfants[0]="Marie"
$arrayenfants[1]="fred"
$enfant=_ArraySearch($arrayenfants,$utilisateur)
$iconefiltre=@ScriptDir&"filtre.ico"
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE")
If IsObj($colItems) Then
If $enfant > -1 Then
For $objNetAdapter in $colItems
$readDns= $objNetAdapter.DNSServerSearchOrder(0)
if $readDns<>$SetOpenDns[0]&$SetOpenDns[1] Then
$SetDns= $objNetAdapter.SetDNSServerSearchOrder($SetOpenDns)
EndIf
MsgBox(0,"test",$enfant&@CRLF&$readDns&@CRLF&$SetDns)
Next
TraySetIcon($iconefiltre)
Else
For $objNetAdapter in $colItems
$readDns= $objNetAdapter.DNSServerSearchOrder(0)&$objNetAdapter.DNSServerSearchOrder(1)
if $readDns<>"" Then
$SetDns= $objNetAdapter.SetDNSServerSearchOrder()
EndIf
Next
TraySetState(2)
EndIf
EndIf
Sur mon pc en windows seven, le script lit bien la valeur du dns, (variable $readDns) mais $SetDns renvoie la valeur 91 et ne modifie pas les dns.
alors que ça fonctionne très bien en XP.
Si vous avez une idée...
merci
Re: [..] Controle parental
Posté : ven. 15 oct. 2010 11:06
par fred39
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
le return code 91
correspond à accès denied.
le compte avec lequel je test est pourtant admin.
je vérifierai en désactivant le contrôle de compte utilisateur.
Re: [..] Controle parental
Posté : dim. 17 oct. 2010 22:58
par fred39
Bonsoir,
Voici le script:
► Afficher le texte
Code : Tout sélectionner
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=controle_parental.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <Array.au3>
If $CMDLine[0] = 0 Then ; vérification si paramètre
msgbox(0,"erreur","paramètre obligatoire")
exit
EndIf
While 1
Sleep(10000)
$utilisateur=@UserName ; quel est l'utilisateur connecté
;MsgBox(0,"test",$utilisateur)
Dim $SetOpenDns[2]
$SetOpenDns[0]="208.67.222.222"
$SetOpenDns[1]="208.67.220.220"
$enfant=_ArraySearch($CMDLine,$utilisateur)
$iconefiltre=@ScriptDir&"\filtre.ico"
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE")
If IsObj($colItems) Then
If $enfant > -1 Then
For $objNetAdapter in $colItems
$readDns= $objNetAdapter.DNSServerSearchOrder(0)
if $readDns<>$SetOpenDns[0]&$SetOpenDns[1] Then
$SetDns= $objNetAdapter.SetDNSServerSearchOrder($SetOpenDns)
EndIf
Next
TraySetIcon($iconefiltre)
; MsgBox(0,"test",$enfant&@CRLF&$readDns&@CRLF&$SetDns&@CRLF&$iconefiltre)
Else
For $objNetAdapter in $colItems
$readDns= $objNetAdapter.DNSServerSearchOrder(0)
if $readDns<>"" Then
$SetDns= $objNetAdapter.SetDNSServerSearchOrder()
EndIf
; MsgBox(0,"test",$enfant&@CRLF&$readDns&@CRLF&$SetDns&@CRLF&$objNetAdapter&@CRLF&$colItems)
Next
TraySetState(2)
EndIf
EndIf
Wend
Je l'ai compilé,
Il fonctionne lancé en tant qu'administrateur
j'ai créé un petit script pour creer un service
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=test.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Servicecontrol.au3>
$test1= _CreateService("","controle_parental","controle_parental",'"'&"C:\controle_parental.exe"&'"'&" fred")
msgbox(0,"test",$test1&@crlf&@error)
Mon service est bien créé, mais quand je veux le démarrer, j'ai une "Erreur 1053 : Le service n'as pas répondu assez vite à la demande de lancement ou de contrôle"
comme dans ce post
http://autoitscript.fr/forum/viewtopic.php?f=3&t=5872
apparemment, on n'as pas le bon #include dans le script.
J'ai essayé aussi avec un #include <Services.au3> trouvé sur internet mais j'ai le même problème.
Merci pour votre aide