[RESOLU] Sauvegarder Hostname Client

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Sauvegarder Hostname Client

Re: Sauvegarder Hostname Client

par xstevenetx » 12 mars 2021, 11:36

Tu as raison!!!
Hier j'étais fatigué .
En faite il me manqué la variable pour crée le fichier si il n'existe pas.
C'est bon tout fonctionne à merveille en phase de test je vais le mettre en condition réelle dans la journée.

Merci pour tout

Re: Sauvegarder Hostname Client

par Saian » 12 mars 2021, 01:39

Si si ça marche très bien, tu as du utiliser des caractères interdits dans un nom de fichier comme le / par exemple. :non:

Re: Sauvegarder Hostname Client

par xstevenetx » 12 mars 2021, 01:29

Déjà testé et ne fonctionne pas.
Si je met un nom de fichier "classique" sa fonctionne parfaitement.

Re: Sauvegarder Hostname Client

par Saian » 12 mars 2021, 01:11

^^
$filename = date('Y-m-d') . '.txt';

Re: Sauvegarder Hostname Client

par xstevenetx » 12 mars 2021, 01:04

Super Merci beaucoup sa fonctionne a merveille.
Dernière question est-il possible de changer
$filename = 'IPVisiteur.txt';
et de mettre la date du jour à la place de "IPVisiteur".

Merci

Re: Sauvegarder Hostname Client

par Saian » 11 mars 2021, 12:18

Salut, il suffit de mettre un true en deuxième paramètre du json_decode pour qu'il retourne la chaîne json sous forme d'un array php.
json_decode(file_get_contents('ip-to-host.json'), true)
Sinon effectivement ça retourne un objet au lieu de retourner un tableau associatif, d'où le "Cannot use object of type stdClass as array". Car effectivement on essaie de manipuler $ipToHost comme un array $ipToHost[$ip] et que le json_decode a retourné un objet de type stdClass pour standard class qui est la classe objet par défaut de php.
https://www.php.net/manual/fr/function.json-decode.php

Re: Sauvegarder Hostname Client

par xstevenetx » 11 mars 2021, 11:58

Merci de ta réponse.
J'ai essayer ton code et il fonctionne uniquement 1fois, je m'explique : Quand je le lance il me crée bien le .json et le rempli, après le fichier IPVisiteur.txt est bien rempli également.
Mais si je recommence l'opération il me donne une erreur :
ncaught Error: Cannot use object of type stdClass as array in C:\xampp\htdocs\index.php:355 Stack trace: #0 {main} thrown in C:\xampp\htdocs\index.php on line 355
Qui correspond à la ligne "$nameserv = $ipToHost[$ip] ?? $ip;"
Mais si je vide le .json tout refonctionne, mais uniquement 1 seule fois.

Merci

Re: Sauvegarder Hostname Client

par Saian » 10 mars 2021, 22:24

Enregistrer les données dans un fichier en json ça n'a vraiment rien de galère ou de compliqué, au contraire.

// enregistrer les données
$ipToHost = [
  '127.0.0.1' => 'localhost',// juste un exemple
  // etc
];
file_put_contents('ip-to-host.json', json_encode($ipToHost));

// lire les données
$ip = '127.0.0.1';
$ipToHost = json_decode(file_get_contents('ip-to-host.json'));
$hostname = $ipToHost[$ip] ?? $ip;

Tu peux alimenter le tableaux autant de fois que tu veux avant de l'enregistrer sous format json dans le fichier et inversement, tu peux chercher autant d'ip que tu veux dedans après en avoir récupérer le contenu une fois.

EDIT

Je m'ennuyais un peu alors voilà. J'ai pas testé le code alors y a peut être des erreurs.

<?php

// date et somecontent

$date = date('d/m/Y H:i');
$somecontent = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'];

// nameserv, lecture et écriture du fichier ip-to-host.json

// charge les ip du fichier ip-to-host.json si il existe sinon crée un tableau vide
$ipToHost = file_exists('ip-to-host.json')
  ? json_decode(file_get_contents('ip-to-host.json'))
  : [];

// essaie de récupérer le host dans les données enregistrées
$ip = $_SERVER['REMOTE_ADDR'];
$nameserv = $ipToHost[$ip] ?? $ip;

// si le host n'est pas trouvé dans les données du fichier, tente de le récupérer avec gethostbyaddr
if ($nameserv == $ip) {
  $nameserv = gethostbyaddr($ip);

  // si un nouveau host est trouvé, l'ajoute au tableau et met à jour (ou créé) le fichier ip-to-host.json
  if ($nameserv != $ip) {
    $ipToHost[$ip] = $nameserv;
    file_put_contents('ip-to-host.json', json_encode($ipToHost));
  }
}

// écriture des données dans le fichier IPVisiteur.txt

$filename = 'IPVisiteur.txt';
if (is_writable($filename)) {
  if (!$handle = fopen($filename, 'a')) {
    exit;
  }
  if (fwrite($handle, $date.' '.$somecontent.' '.$nameserv."\r\n") === FALSE) {
    exit;
  }
  fclose($handle);
}
Ça fera 25€ pour la demi heure. :mrgreen:

PS : pas besoin de fermer la balise php quand y a que du php dans le fichier.

PPS : on a tous été débutant un jour et le mieux pour apprendre c'est la doc, ses exemples, les recherches google et surtout essayer. :wink:

Re: Sauvegarder Hostname Client

par xstevenetx » 10 mars 2021, 22:07

Je suis vraiment débutant, et tout se que tu me dis est très beau mais je vais galérer à le mètre en place.
Donc si tu peux m'aider.

Merci

Re: Sauvegarder Hostname Client

par Saian » 10 mars 2021, 19:45

C'est pas bête comme idée. Quitte à stocker ça dans un fichier, j'utiliserai plutôt un array sérialisé (serialize/unserialize) ou converti en json (json_encode/json_decode) et à priori plutôt le json si besoin de pouvoir le lire ou y ajouter des entrées manuellement.

file_get_contents et file_put_contents feront très bien l'affaire pour écrire et lire le fichier.

Après si tu es amené à avoir beaucoup d'adresses dans le fichier peut être un fichier csv serait plus approprié mais le processus de lecture et d'écriture sera un peu plus complexe. Et dans ce cas une base de données serait encore mieux.

Sinon sqlite peut être une solution pour faire une base de données sans serveur mais j'ai jamais essayé.

Re: Sauvegarder Hostname Client

par xstevenetx » 10 mars 2021, 19:22

Une solution temporaire que j'aimerais faire :
Faire une base de données à coter en CSV avec le nom de la personne et a coter son Hostname.
EX:
Hostname;Nom
PC-De-Bureau1;Steven

Une fois relier ensemble il me dirait directement sur le mon fichier de log, à coter du hostname le nom de la personne.
EX: 10/03/2021 13:07 192.168.0.12 PC-De-Bureau1 Steven

Et si il n'y a pas de correspondance, me donner la première ligne d'un ping en -a :
EX: Envoi d'une requête 'ping' sur PC-De-Bureau2 [192.168.0.15] avec 32 octets de données

Merci d'avance.

Re: Sauvegarder Hostname Client

par Saian » 10 mars 2021, 00:45

Non je saurai pas trop dire. Peut être qu'un outil de DNS lookup pourrait t'aider à comprendre ? mais concrètement je ne saurai pas te dire quoi faire. C'est peut être tout simplement pas solutionnable ?

Re: Sauvegarder Hostname Client

par xstevenetx » 10 mars 2021, 00:32

Certainement que tu as raison, mais est-il possible de contourner le problème?
Même en VPN, si je fais un "ping -a IP" en CMD j'obtiens bien le hostname.

Re: Sauvegarder Hostname Client

par Saian » 09 mars 2021, 23:26

Salut, peut être un problème de DNS qui doit changer selon que tu es en locale ou sur le VPN ? je suis pas expert réseaux alors pas taper hein. ^^

Re: Sauvegarder Hostname Client

par xstevenetx » 09 mars 2021, 23:04

Bonjour,
Petite nouveauté, j'ai remarqué que le script fonctionne quand je suis dans le réseau directement de mon entreprise.
Mais quand je suis en "extérieur" avec un VPN, il me donne uniquement l'adresse IP, se qui ne m’intéresse pas vraiment.

Si quelqu'un a une solution.
Merci