Traceur pour un sondage d'utilisation pour MCF2020
Traceur pour un sondage d'utilisation pour MCF2020
Bonjour,
J'ai fait un programme (MCF2020) qui semble rencontré un "petit succès d'estime" dans la communauté française des simulateurs de vol.
Lors d'une prochaine version et temporairement, j'aimerai inclure un procédé qui me permette de connaitre le nombre de personne qui l'utilise ?
Mais, d'une manière transparente et non intrusive pour l'utilisateur (donc, pas d'email en retour) et pour un seul retour par utilisateur.
Comment feriez-vous cela ?
Philippe
J'ai fait un programme (MCF2020) qui semble rencontré un "petit succès d'estime" dans la communauté française des simulateurs de vol.
Lors d'une prochaine version et temporairement, j'aimerai inclure un procédé qui me permette de connaitre le nombre de personne qui l'utilise ?
Mais, d'une manière transparente et non intrusive pour l'utilisateur (donc, pas d'email en retour) et pour un seul retour par utilisateur.
Comment feriez-vous cela ?
Philippe
Re: Traceur pour un sondage d'utilisation pour MCF2020
Tu choppes une donnée unique, par exemple, le num de série du DD du PC ou simplement utiliser un ID unique genre:
Debug Computername()+UserName()
Si tu veux savoir le nombre d'USER en temps réel
- A chaque ouverture de soft tu upload un txt du nom Computername()+UserName() dans un dossier dédié en ligne.
- Et le soft, via un timer compte le nombre de fichiers présent.
- En quittant le soft, tu supprimes le fichier.
Si tu veux savoir le nombre d'USER qui ont utilisé ton soft
- Tu fais la même chose sans la suppression du fichier à la fin.
Avantage : pas intrusif
Inconvénient : nécessite un accès ftp uniquement dédié à ça pour des raisons de sécurités.
Debug Computername()+UserName()
Si tu veux savoir le nombre d'USER en temps réel
- A chaque ouverture de soft tu upload un txt du nom Computername()+UserName() dans un dossier dédié en ligne.
- Et le soft, via un timer compte le nombre de fichiers présent.
- En quittant le soft, tu supprimes le fichier.
Si tu veux savoir le nombre d'USER qui ont utilisé ton soft
- Tu fais la même chose sans la suppression du fichier à la fin.
Avantage : pas intrusif
Inconvénient : nécessite un accès ftp uniquement dédié à ça pour des raisons de sécurités.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Traceur pour un sondage d'utilisation pour MCF2020
Heu... perso j'ai pas vraiment envie que le nom de mon ordi et de ma session se balade en clair sur internet (via le protocol FTP). À la rigueur, tu fait passer par une fonction de hachage.Ar-S a écrit :tu upload un txt du nom Computername()+UserName()
[...]
nécessite un accès ftp
Code : Tout sélectionner
EnableExplicit
UseSHA2Fingerprint()
#DemiSel$ = "MCF2020"
Define id$
id$ = ComputerName()+UserName() ; Identifiant en clair
id$ = StringFingerprint(id$+#DemiSel$, #PB_Cipher_SHA2, 512) ; Use SHA2-512 variant
id$ = Right(id$, 8) ; On ne garde qu'une fraction du hash pour mieux l'anonymiser.
Debug id$
Le fait de ne garder qu'un petit extrait du hash le rend un peu plus anonyme en noyant le véritable id dans la multitude des pré-images possibles au détriment de la garantie d'unicité des ids (collisions volontaires).
Re: Traceur pour un sondage d'utilisation pour MCF2020
Merci à vous deux,
Pas mal le cryptage tronqué.
Par contre, je n'ai pas bien compris comment id$ repartait vers l'extérieur d'une manière "discrète" ?
Pas mal le cryptage tronqué.
Par contre, je n'ai pas bien compris comment id$ repartait vers l'extérieur d'une manière "discrète" ?
Re: Traceur pour un sondage d'utilisation pour MCF2020
À la réflexion, je pense qu'il vaudrait mieux faire le CRC32 du hash au lieu de transmettre un hash partiel. Comme ça il n'y a plus aucun moyen de savoir à quoi ressemblais le hash de départ.PhM a écrit :Pas mal le cryptage tronqué.
Il y a discret et anonymisé. Le but de ma manip n'est pas d'être discret mais anonymisé pour respecter au mieux la vie privée.PhM a écrit :Par contre, je n'ai pas bien compris comment id$ repartait vers l'extérieur d'une manière "discrète" ?
Il s'agit ci dessous des signification que j'estime correctes. Ce n'est pas forcément le cas
- Discret : personne ne sais que j'ai transmis l'info. Mais si on récupère ce qui a été transmis on peut retrouver les données d'origine.
- Anonyme : tout le monde sais que l'info à été transmise mais personne ne peut retrouver les données d'origine. (Hormis par force brute, et encore)
Dans notre cas tu peut utiliser une connexion FTP simple non sécurisé comme l'as proposé Ar-S pour transmettre l'info en clair puisque elle est anonymisée et donc rendue inexploitable pour récupérer des informations sensibles.
Après il y a toujours le problème des métadonnées. Si un ordinateur se connecte à ton FTP, on peut supposer qu'il utilise ton logiciel. Mais à un moment donnée faut arrêter d'être parano. Car hormi en passant par TOR, I2P ou autre (ce qui risque d'exciter les antivirus) ce genre d'information fuira toujours.
Re: Traceur pour un sondage d'utilisation pour MCF2020
Bonjour,
Si je comprends bien, je dois me référer au groupe de commandes décrites dans l'aide PureBasic - Ftp ?
Pour que le programme se connecte avec les bons identifiant et mot de passe.
Nouveau monde pour moi...
Je suis chez Orange donc quelque chose comme cela :
Si je comprends bien, je dois me référer au groupe de commandes décrites dans l'aide PureBasic - Ftp ?
Pour que le programme se connecte avec les bons identifiant et mot de passe.
Nouveau monde pour moi...
Je suis chez Orange donc quelque chose comme cela :
Code : Tout sélectionner
InitNetwork()
If OpenFTP(0, "perso-ftp.orange.fr", "mon-email", "mon_mot de passe")
Debug "Connecté avec succès à ftp.orange.fr"
Else
Debug "Impossible de se connecter à ftp.orange.fr"
EndIf
CloseFTP(0)
Re: Traceur pour un sondage d'utilisation pour MCF2020
...en faisant cela tu mets dans ton code ton login et mdp de site (qui est aussi celui qui sert à charger les pages si tu utilise celui de ton hébergeur)
Et même si tu le crypte dans le code, il devient visisble lors de la connexion puisque le FTP d'Orange n'est pas crypté.
Si tu veux faire des stats de connexions, utilise un compteur externe ou héberge chez quelqu'un qui te donne accès au log de ton site ou qui propose un langage dynamique (ex: PHP) et une base SQL. (free.fr te fait ça gratuit (base PHP, MySQL et PostgreSQL, mais pas accès au log. Le tout avec des version un peu périmées et sans support technique, mais le tout fonctionne quand même)
Et même si tu le crypte dans le code, il devient visisble lors de la connexion puisque le FTP d'Orange n'est pas crypté.
Si tu veux faire des stats de connexions, utilise un compteur externe ou héberge chez quelqu'un qui te donne accès au log de ton site ou qui propose un langage dynamique (ex: PHP) et une base SQL. (free.fr te fait ça gratuit (base PHP, MySQL et PostgreSQL, mais pas accès au log. Le tout avec des version un peu périmées et sans support technique, mais le tout fonctionne quand même)
Re: Traceur pour un sondage d'utilisation pour MCF2020
De toute manière, pour le moment, ce code ne fonctionne pas ?
Alors, qu'avec FileZilla, je me connecte avec le même identifiant et le même mot de passe !
C'est mal parti...
Cela ne fonctionne pas, non plus avec : If OpenFTP(0, "ftp://perso-ftp.orange.fr", "identifiant", "passe")
Alors, qu'avec FileZilla, je me connecte avec le même identifiant et le même mot de passe !
C'est mal parti...
Cela ne fonctionne pas, non plus avec : If OpenFTP(0, "ftp://perso-ftp.orange.fr", "identifiant", "passe")
Re: Traceur pour un sondage d'utilisation pour MCF2020
Il semble que ça ait changé depuis quelques temps
A partir du 21/05/2019, choisissez l'option de chiffrement FTP explicite sur TLS (en mode passif uniquement).
Donc pas possible avec PB pour l'instant.
A partir du 21/05/2019, choisissez l'option de chiffrement FTP explicite sur TLS (en mode passif uniquement).
Donc pas possible avec PB pour l'instant.
Re: Traceur pour un sondage d'utilisation pour MCF2020
Bonjour Marc,Marc56 a écrit :Donc pas possible avec PB pour l'instant.
Ah, très bien, je comprends mieux.
Bon, pour l'instant, je laisse tomber ma "curiosité statistique"...
Re: Traceur pour un sondage d'utilisation pour MCF2020
Comme l'as proposé Marc56, vu que tu as ton propre site, tu peut aussi faire des requêtes http et gérer ça en php.
Dans ton logiciel tu utilises des requêtes HTTP normales :
Et sur le serveur tu peut y mettre ce script :
Quelques remarques :
- Pense bien à adapter la constante #BASE_URL à ton serveur
- J'ai fait un filtrage par User-Agent mais tu peut le désactiver
- Le script PHP à besoin que les dossiers "active_ids" et "all_ids" soient déjà crées
- Si tu met juste "action=stats" le serveur te retourne le nombre d'utilisateur actuellement actifs et le nombre d'utilisateurs total
Dans ton logiciel tu utilises des requêtes HTTP normales :
Code : Tout sélectionner
DeclareModule Stats
Declare Init()
Declare OnStart()
Declare OnStop()
EndDeclareModule
Module Stats
EnableExplicit
#BASE_URL = "http://127.0.0.1/forums/purebasic/SondageMCF2020/stats.php?"
Define id$
NewMap Header$()
Declare$ _ComputeId()
Declare$ _StatsRequest(action$, id$="")
Procedure Init()
Shared id$, Header$()
InitNetwork()
UseSHA2Fingerprint()
UseCRC32Fingerprint()
id$ = _ComputeId()
Header$("User-Agent") = "MCF2020"
EndProcedure
Procedure OnStart()
Shared id$
_StatsRequest("start", id$)
EndProcedure
Procedure OnStop()
Shared id$
_StatsRequest("stop", id$)
EndProcedure
Procedure$ _ComputeId()
#DemiSel$ = "MCF2020"
Define id$
id$ = ComputerName()+UserName() ; Identifiant en clair
id$ = StringFingerprint(id$+#DemiSel$, #PB_Cipher_SHA2, 512) ; Use SHA2-512 variant
id$ = StringFingerprint(id$, #PB_Cipher_CRC32) ; On passe par CRC32 pour rendre impossible la recherche
ProcedureReturn id$
EndProcedure
Procedure$ _StatsRequest(action$, id$="")
Shared Header$()
Protected HttpRequest = HTTPRequest(#PB_HTTP_Get, #BASE_URL + "action="+action$+"&id="+id$, "", 0, Header$())
If HttpRequest
Debug "Status: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Debug "Réponse: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
FinishHTTP(HTTPRequest)
Else
Debug "La requête a échoué"
EndIf
EndProcedure
EndModule
CompilerIf #PB_Compiler_IsMainFile
Stats::Init()
Stats::OnStart()
Delay(10000)
Stats::OnStop()
CompilerEndIf
Code : Tout sélectionner
<?php
// On désactive la mise en cache dans les proxys
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
$action = isset($_GET['action']) ? $_GET['action'] : "";
$id = isset($_GET['id']) ? $_GET['id'] : "";
$client = $_SERVER["HTTP_USER_AGENT"];
// On fait quelques vérifications sur l'id
If (!preg_match("/[0-9a-f]{8}/", $id))
{
// Problème détecté on annule tout
$id = "";
}
// Idem sur l'action
$action = strtolower($action);
If ($action != isset($_GET['action']) ? $_GET['action'] : "")
{
$action = ""; // Problème détecté on annule tout
}
// Si on veut, ont peut aussi vérifier que la requête à bien été émise par ton logiciel
If ($client <> "MCF2020")
{
$client = "";
}
If ($action == "start" and $id != "" and $client <> "")
{
fclose(fopen("./active_ids/".$id, 'w')); // Fichier pour le nombre actuel d'utilisateurs
fclose(fopen("./all_ids/".$id, 'w')); // Fichier pour le nombre total d'utilisateurs
echo "start";
}
elseif ($action == "stop" and $id != "" and $client <> "")
{
If (file_exists("./active_ids/".$id)){
unlink("./active_ids/".$id);
}
echo "stop";
}
elseif ($action == "stats" and $id == "")
{
$active = -2; $total = -2; // On décompte les entrées "." et ".."
if ($dh = opendir("./active_ids/")) {
while (($file = readdir($dh)) !== false) {
$active += 1;
}
closedir($dh);
}
if ($dh = opendir("./all_ids/")) {
while (($file = readdir($dh)) !== false) {
$total += 1;
}
closedir($dh);
}
header('Content-Type: text/plain');
echo "Utilisateurs actifs : ", $active, "\n";
echo "Utilisateurs total : ", $total, "\n";
}
else
{
header('HTTP/1.0 500 Internal Server Error');
header('Content-Type: text/plain');
echo "erreur";
}
- Pense bien à adapter la constante #BASE_URL à ton serveur
- J'ai fait un filtrage par User-Agent mais tu peut le désactiver
- Le script PHP à besoin que les dossiers "active_ids" et "all_ids" soient déjà crées
- Si tu met juste "action=stats" le serveur te retourne le nombre d'utilisateur actuellement actifs et le nombre d'utilisateurs total
Re: Traceur pour un sondage d'utilisation pour MCF2020
Bonjour et merci Naheulf,
je viens juste de découvrir ton travail.
Je vais essayer de comprendre tout cela et je te tiens au courant.
je viens juste de découvrir ton travail.
Je vais essayer de comprendre tout cela et je te tiens au courant.