-------------Le module serveur doit être lancer après que le client soit lancer (en attente)----------
Opt("TrayIconHide",1) ; cache l'icone de send.exe
FileChangeDir(@ProgramFilesDir&"\xxx\Helpdesk")
$FileDebug = FileOpen("debug.log",1)
if($filedebug=-1) then MsgBox(16,"Attention !","Erreur de création du fichier debug...")
#include <GUIConstants.au3>
#include <IE.au3>
Opt("TCPTimeout",30000) ;30 secondes
Global $glob,$compteur=0,$ancienid,$file_proxy,$file,$handle,$socket,$FileDebug,$Temp_Debut,$Temp_Fin
; AVEC PROXY
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lit la valeur Proxy de la BDR")
$proxyenable = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable")
if $proxyenable="1" Then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Le proxy est activé sur le poste")
$username=""
$password=""
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Vérifie si le fichier proxy existe déjà")
if FileExists("proxy")=1 Then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ouvre le fichier Proxy en lecture")
$file_proxy=FileOpen("proxy",0)
if $file_proxy=-1 Then
MsgBox(16,"Erreur","Impossible d'ouvrir le fichier de configuration")
exit
Endif
$ligne=FileReadLine($file_proxy,1)
if $ligne=1 Then
MsgBox(16,"Erreur","Erreur de lecture du fichier de configuration")
exit
Endif
$pos=StringInStr($ligne,";")
$taillechaine=StringLen($ligne)
$username=StringLeft($ligne,$pos-1)
$password=Stringmid($ligne,$pos+1,$taillechaine-$pos+1)
if $username="" or $password="" then
MsgBox(16,"Erreur","Erreur de lecture de la configuration proxy")
exit
Endif
else
$username = InputBox("Paramètres proxy ? ", "Vous utiliser un proxy, entrez votre nom d'utilisateur S.V.P.", "", "",100,150)
$password = InputBox("Paramètres proxy ? ", "Vous utiliser un proxy, entrez votre mot de passe S.V.P. ", "", "",100,150)
if $username="" or $password="" then
MsgBox(4096, "Erreur ", " Erreur de saisie recommencer ! ")
Exit
Endif
$file_proxy=FileOpen("proxy",2)
if $file_proxy=-1 Then
MsgBox(16,"Erreur","Erreur de création du fichier de configuration")
Exit
Endif
$res=FileWriteLine($file_proxy,$username&";"&$password)
if($res=0) Then
MsgBox(16,"Erreur","Erreur pendant l'écriture du fichier de configuration")
Exit
EndIf
FileClose($file_proxy)
Endif
envset("http_proxy_user", $username)
envSet("http_proxy_password",$password)
; Interface IHM
$handle=GuiCreate("Helpdesk", 430, 280,-1,-1,$DS_MODALFRAME+$DS_SETFOREGROUND+$WS_POPUPWINDOW+$WS_CAPTION, $WS_EX_TOOLWINDOW)
$liste=GUICtrlCreateList("", 10,10,200,196, $LBS_NOTIFY, $WS_EX_CLIENTEDGE)
GuiCtrlSetData(-1, "xx|xx|xx|xx|xx|xx|xx", "xx")
GuiCtrlCreatePic("logo.bmp",220,15, 200,181)
GUICtrlCreateLabel("Avant d'établir une connection, veuillez nous contacter au xx.xx.xx.xx.xx",40,225)
GUICtrlCreateLabel("
http://www.xxx.fr",220,200)
$debug=GUICtrlCreateLabel("Etat : en attente...",10,260,500)
$bouton1=GUICtrlCreateButton("Quitter",350,250,70,25) ; quitter le logiciel
$bouton2=GUICtrlCreateButton("Notre site Internet",240,250,100,25) ; site internet
$bouton3=GUICtrlCreateButton("Lancer",80,200,50,20) ; Lancer l'assistance
Sleep(1000) ; laisse le temp au controle de bien s'initialiser
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
case $msg = $bouton1
exit
case $msg = $bouton2
$oIE = _IECreate ("
www.xxx.fr")
_IENavigate($oIE,"
http://www.xxx.fr")
case $msg = $bouton3
$prenom=GUICtrlRead($liste)
ExitLoop
case $msg = $GUI_EVENT_CLOSE
OnAutoItExit()
Exit
EndSelect
Wend
Switch $prenom
case "xx"
$ch = 9001
case "xx"
$ch = 9002
case "xx"
$ch = 9003
case "xx"
$ch = 9004
case "xx"
$ch = 9005
case "xx"
$ch = 9006
case "xx"
$ch = 9007
EndSwitch
$retour=CreeFile($ch,$prenom)
If $retour<>"" then
MsgBox(16,"Erreur",$retour)
exit
Endif
GUISetState(@SW_HIDE) ; cache l'interface utilisateur
RunWait("Helpdeskserver.exe","",@SW_HIDE)
MsgBox(64,"Information","La Session d'assistance est terminé...",5)
Exit
EndIf
func CreeFile($ch,$prenom)
;creation du fichier de connection
$file=fileopen("helpdesk.txt",2)
if $file=-1 then return "Erreur pendant la création du fichier de connection..."
FileWriteLine($file,"[DIRECT]")
FileWriteLine($file,"[HOST]")
FileWriteLine($file,$prenom)
FileWriteLine($file,"-id "&$ch&" -sslproxy -connect xx.dyndns.org:443 -noregistry")
FileClose($file)
return ""
EndFunc
; SANS PROXY
$temp_debut=TimerInit()
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Chemin d'execution : " &@WorkingDir)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lit la clé run de la BDR")
if RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","Helpdesk")="" then
; Interface IHM
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" La clé dans la BDR n'existe pas, création de GUI")
$handle=GuiCreate("Helpdesk", 430, 280,-1,-1, $WS_CAPTION, $WS_EX_TOOLWINDOW)
$liste=GUICtrlCreateList("", 10,10,200,196, $LBS_NOTIFY, $WS_EX_CLIENTEDGE)
GuiCtrlSetData(-1, "xx|xx|xx|xx|xx|xx|xx", "xx")
GuiCtrlCreatePic("logo.bmp",220,15, 200,181)
GUICtrlCreateLabel("Avant d'établir une connection, veuillez nous contacter au xx.xx.xx.xx.xx",40,225)
GUICtrlCreateLabel("
http://www.xxx.fr",220,200)
$debug=GUICtrlCreateLabel("Etat : en attente...",10,260,500)
$bouton2=GUICtrlCreateButton("Notre site Internet",240,250,100,25) ; site internet
$bouton1=GUICtrlCreateButton("Quitter",350,250,70,25) ; quitter le logiciel
$bouton3=GUICtrlCreateButton("Lancer",80,200,50,20) ; Lancer l'assistance
Sleep(1000)
GUISetState(@SW_SHOW)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Création interface GUI créé")
While 1
$msg = GUIGetMsg()
Select
case $msg = $bouton1
exit
case $msg = $bouton2
$oIE = _IECreate ("
www.xxx.fr")
_IENavigate($oIE,"
http://www.xxx.fr")
case $msg = $bouton3
$prenom=GUICtrlRead($liste)
exitloop
case $msg = $GUI_EVENT_CLOSE
OnAutoItExit()
Exit
EndSelect
Wend
GUISetState(@SW_HIDE) ; cache l'interface utilisateur
Else
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" La clé dans la BDR est présente")
if $CmdLine[0]<>0 Then
$prenom=$CmdLine[1]
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ligne de commande : Prenom = " & $prenom)
Else
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ligne de commande incorrecte, redémarrer l'ordinateur")
MsgBox(16,"Erreur","Ligne de commande incorrect !"&@LF&"Redémarrer votre ordinateur...")
Exit
EndIf
EndIf
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Entre dans la boucle")
do
reconnect($compteur)
$compteur=$compteur+1
Until reconnect($compteur)<>"lance" ; si la fonction renvoi une valeur différente de "lance" alors fin de la session d'assistance
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Supprime la clé Run de la BDR")
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","Helpdesk")
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Session d'assistance terminée")
MsgBox(64,"Info...","La Session d'assistance est terminé...",5)
Func reconnect($compteur)
$temp_fin = TimerDiff($temp_debut)
if($temp_fin/1000)/60>300 Then ;5 heures
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Fin de session d'assistance du au temps 5 Heures")
return "connectepas"
EndIf
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Temp : " & $temp_fin)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Charge la Dll Winsock")
$res=TCPStartup()
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lance la résolution DNS")
$serveur_internet=TCPNameToIP("xxx.dyndns.org")
if $serveur_internet="" then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Résolution DNS échoué, Attend 1 Minute")
Sleep(30000) ; Attend 30 secondes
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Relance la boucle")
Return("lance")
Endif
$port_serveur_internet = 8080
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Connection d'un socket")
$socket = TCPConnect($serveur_internet , $port_serveur_internet)
$szData= 'user='&$prenom
$longueur=StringLen($szData)
$envoi="POST /send.php HTTP/1.0" & @LF & "Connection: Close" & @LF & "Content-type: application/x-www-form-urlencoded" & @LF & "Content-Length: " & $longueur & @LF & @LF & $szdata & @LF
$new = StringAddCR($envoi)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lance la requête au serveur")
$res=TCPSend($socket,$new)
; lecture de la réponse
$buff=""
$buff = TCPRecv($socket, 500) ; ne pas mettre un tampon trop fort car pas de reception parfois
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lit la réponse de la requête"&@LF&@LF&$buff&@LF&@LF)
$glob=$buff
$pos=StringInStr($glob,"/",0,6)
$pos=$pos+1
$len=StringLen($glob);
$ch=StringMid($glob,$pos,$len) ; récupère le id de connection
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" ID de connection : " &$ch)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le socket ouvert")
TCPCloseSocket($socket)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Libère la Dll socket")
TCPShutdown()
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Valeur de connection : " &StringMid($glob,$pos-8,7))
if(StringMid($glob,$pos-8,7))="connect" Then
;creation du fichier de connection
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Crée le fichier de connection")
$file=fileopen("helpdesk.txt",2)
FileWriteLine($file,"[DIRECT]")
FileWriteLine($file,"[HOST]")
FileWriteLine($file,$prenom)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ecriture fichier d'assistance : " & "-id "&$ch&" -sslproxy -connect xx.dyndns.org:443 -noregistry")
FileWriteLine($file,"-id "&$ch&" -sslproxy -connect xx.dyndns.org:443 -noregistry")
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le fichier d'assistance")
FileClose($file)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ecrit la clé Run dans la BDR")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Helpdesk", "REG_SZ", "" & @WorkingDir & "" & "\send.exe" & " " & $prenom)
if $compteur=0 then
$ancienid=$ch
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lance le Helpdesk avec ID : "&$ch & " Compteur = 0")
RunWait("Helpdeskserver.exe","",@SW_HIDE)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Relance la boucle, renvoi lance")
return "lance"
else ; $compteur>0
if $ancienid<>$ch then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Lance le Helpdesk avec ID : "&$ch & " Compteur = "&$compteur)
$ancienid=$ch ; remet à jour la variable ancienid avec le ch en cours
RunWait("Helpdeskserver.exe","",@SW_HIDE)
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Relance la boucle, renvoi lance")
return "lance"
endif
endif
else
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Renvoi connecte pas")
return "connectepas"
endif
EndFunc
Func OnAutoItExit() ; automatiquement appeler en quand d'erreur
if $file_proxy<>-1 then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le fichier Proxy")
FileClose($file_proxy)
Endif
if $handle<>0 then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Détruit l'interface GUI")
GUIDelete($handle)
EndIf
if $file<>-1 then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le fichier de Connection")
FileClose($file)
EndIf
if $socket<>-1 then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le Socket")
TCPCloseSocket($socket)
Endif
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Libère la dll Winsock")
TCPShutdown()
If $FileDebug<>-1 Then
FileWriteLine($FileDebug,@hour&"-"&@min&"-"&@SEC&" Ferme le fichier de Debug")
FileClose($FileDebug)
Endif
EndFunc
---------------Fichier Send.php-------------
<?php
$id=mysql_connect("127.0.0.1","root","");
$link=mysql_select_db("bhelpdesk",$id);
$user=$_POST['user'];
$req="SELECT * FROM cliserv WHERE user='$user'";
$result=mysql_query($req) or die(mysql_error());
$array=mysql_fetch_array($result);
$etat=$array['etat'];
$id=$array['id'];
mysql_close();
echo "$etat/$id";
?>
------------Fichier connect.php---------------
<?php
$id=mysql_connect("127.0.0.1","root","");
$link=mysql_select_db("bhelpdesk",$id);
$user=$_POST['user'];
$etat=$_POST['etat'];
$id=$_POST['id'];
$req="UPDATE cliserv SET etat='$etat',id='$id' WHERE user='$user'";
mysql_query($req) or die(mysql_error());
mysql_close();
echo "ok";
?>
----------------------------------------
Je n'ai pas le temp matériel de réaliser en détail un tutorial de fonctionnement
mais j'ai testé et cela fonctionne très bien.
Pour les fichiers send.php et connect.php, il faut les placer sur un serveur web qui sait gérer le php4.
Bonne soirée à tous
je suis à votre écoute si vous avez des questions à me poser.