Journal un "LanFileSearch" pour Linux ?

Posté par  .
Étiquettes : aucune
0
23
nov.
2004
j'habite dans une residence universitaire ou il y a plus de 400 chambres reliées entre elles par un reseau local puis a internet a travers un proxy (celui de l'université..)
Comme notre proxy ne nous permet pas l'utilisation de aMule et compagnie (pour telecharger une distro ou des ebooks voire meme des abandonwares :p..) il serait donc trés interessant de pouvoir squater des fichiers parmi ces 400 ordinateurs potentiellement connectés. Or voila le probleme, sous Linux le seul moyen de prendre un fichier chez quelqu'un est d'utiliser Samba et ses interminables commandes ou ptete meme Linneighborhood qui facilite la tache en tapant les commandes a notre place mai le Hic dans tout ça est que si je cherche quelque chose de particulier, je devrais m'amuser a monter tous les repertoires de tous les ordinateurs du reseau puis de chercher mon fichier (aprés avoir fait un updatedb ou si chuis mazo chercher dans chaque dossier..)..ce qui est trés penible..
Sous Windows (helas oui!) il existe un utilitaire malheureusement non libre et payant et sourtout SOUS WINDOWS, c'est "File Lan search ou Lan fileSearch ...ou un truc du genre." bref, comme vous l'avez sans doute remarqué , ce programme sert a chercher un fichier precis dans tout le reseau local et ce en un clin d'oeil(ou du moins en quelques secondes..).
Ma question est Pourquoi n'y a t-il pas d'utilitaire semblable sous Linux (j'ose esperer recevoir un "Mais siiiii!! ça existe t'as juste mal cherché!") ce qui ferait en sorte que jme sente un peu con d'ecrire un premier journal (eh wé c mon 1er) qui n'aura servi a rien ou du moins qu'a moi ou encore casser mes projets.(vous comprendrez).. mais en attendant j'aimerai dire qu'il n'est pas si compliqué de faire un programme pareil sous Linux (une boucle qui monte tous les pc du rezo dans un repertoire, une routine qui fait des fichiers de ce repertoire une base de donnée et Hop le travail est fait)
d'ailleur pourquoi ne pas en faire un projet ?
Le LinFileSearch! ou LinFS , ou ptete LiLan ! bref, libre a son programmeur d'en choisir le nom...
  • # p2p ?

    Posté par  . Évalué à 2.

    peut etre qu'un petit serveur de p2p au sein du reseau devrait suffire non ?
    ou alors s'equiper de clients bittorrent et publier ses torrents sur un petit serveur web interne disposant d'un moteur de recherche...

    ca irait tres vite (surtout sur un reseau interne), serait aussi pratique et permettrait de laisser les utilisateurs decider des fichiers qu'ils souhaitent partager sans craindre de grosses et betes failles de secu dues a leur ignorance (style "oups, j'ai partage tout mon DD sans restrictions et un petit malin m'a plante mon dossier systeme ")
    quoique, les p2p n'arreteraient pas un gars qui s'y connait un peu... quoique y'aurait plein d'autres failles a tenter avant de s'embeter avec ca... enfin bref quoi :D
  • # Peer to peer

    Posté par  . Évalué à 5.

    Tu peux très bien monter un réseau local de P2P, en installant un serveur edonkey ou en utilisant des réseaux sans serveur comme overnet, et certainement d'autres (gnutella, openFT...).

    C'est quand même fait pour, il faudrait arrêter de voir que l'aspect piratage de musique/film sur le net !
  • # Direct connect

    Posté par  . Évalué à 7.

    Un serveur direct connect répondrait tout à fais à tes besoins.

    Tu peux y faire des recherches sur l'ensembles des personnes connectés (c'est ce que tu souhaites non ?), partager ce que tu souhaites, régler la vitesse d'up et de dl, sa gère les files d'attentes, etc . Il existe des clients et des serveurs pour windows et linux répondant à peu près à tous les besoins possibles.

    Voici ceux dispo dans mes packages :

    * net-p2p/opendchub
    Homepage: http://opendchub.sf.net(...)
    Description: hub software for Direct Connect

    * net-p2p/dc-gui
    Homepage: http://brainz.servebeer.com/dctc/(...)
    Description: GUI for dctc

    * net-p2p/dchub
    Homepage: http://brainz.servebeer.com/dctc/#dchub(...)
    Description: dchub (Direct Connect Hub), a linux hub for the p2p 'direct connect'

    * net-p2p/dc-qt
    Homepage: http://dc-qt.sourceforge.net/(...)
    Description: Direct Connect Text Client, QT Gui

    * net-p2p/ldcc
    Homepage: http://www.softservice.com.pl/ldcc/(...)
    Description: linux console, text-based client for DIRECT CONNECT

    * net-p2p/dctc
    Homepage: http://brainz.servebeer.com/dctc/(...)
    Description: Direct Connect Text Client, almost famous file share program
  • # Et la marmotte.

    Posté par  . Évalué à 7.

    "(pour telecharger une distro ou des ebooks voire meme des abandonwares :p..)"

    Mais oui, bien sur. Surtout pour prendre HL² & le dernier xvid des studios Centropy.

    Je pouffe de rire quand j'entend un mec qui me dit qu'on télécharge une distribution sur edonkey. Sur bt, pourquoi pas, et c'est sans doute le réseau qui a la plus grande utilisation légale, mais aller télécharger à 5Ko/s sur edonkey une distribution qu'on peut chopper à 500ko/s ou 5Mo/s sur un mirroir proxad ou lip6...

    A part ça, "fast file search" permet d'indexer un réseau mixte samba/ftp.

    konqueror en utilisation jointe avec lisa permet de naviguer de façon très souple dans un réseau samba, montant dans le fs de kde automatiquement les partages.
    • [^] # Re: Et la marmotte.

      Posté par  (site web personnel) . Évalué à 0.

      Tu oublie les distros qui ne sont pas sur des serveurs ftp comme la suse 9.2 (perso ou pro), mandrake official/powerpack ...

      Mais en general, t'as raison, le ftp c'est mieux, voire bittorent si on download en meme temps que plein de monde (release d'une distrib)
      • [^] # Re: Et la marmotte.

        Posté par  . Évalué à 1.

        Comme je l'ai dit, à la limite ça passe par bittorrent, en aucun cas par edonkey.
    • [^] # Re: Et la marmotte.

      Posté par  (site web personnel) . Évalué à 3.

      Je confirme, Fast File Search fait ce que tu veux, je l'avais installé à ma résidence quand l'étais à l'École, j'avais même fait la traduction française à l'époque.

      C'est une interface en php et un crawler en perl qui parcourt ton réseau à heures fixes et qui remplit la base de données. Y'a pas mal de trucs sympas, genre les url qui sont en \\machine\fichier si le lecteur est un windows et en smb:// si c'est un linux.
  • # Tu peux le créer toi même ....

    Posté par  (site web personnel) . Évalué à 6.

    Nous avons été confronté au même problème, et nous avons donc développé un script en perl qui nous remplit une base SQL. Tout le monde peut utiliser un moteur de recherche en php pour consulter cette interface web. En plus, il fait aussi pour les serveurs ftp. Le seul problème c'est qu'il faut un serveur dédié ...
    • [^] # Re: Tu peux le créer toi même ....

      Posté par  (site web personnel) . Évalué à 1.

      Ou la je suis pas bien réveillé moi ... il fallait bien sûr lire "pour consulter cette base de donnée".
      • [^] # Re: Tu peux le créer toi même ....

        Posté par  (site web personnel) . Évalué à 9.

        Je me dis même qu'avec le script ce serait mieux ...
        C'est basé sur la commande smbclient
        Bonne chance !

        #!/usr/bin/perl -w

        # Script de recherche de partages sur le rézo
        # Largement inspiré du script de gluck pour windows.
        # (C) Nicolas Deslandes Octobre 2002

        use DBI;
        use locale;

        sub AnaMachine;
        sub AddPartage;

        $mainserver = "JABBA"; # Nom du controleur de domaine
        $cptlog = "-U kekya\%[ldWemvldS\\!] -N";

        my $dbh = DBI->connect("DBI:mysql:rezo:yoda", "user", "mdp")
        or die "Impossible de se connecter à la base de données";

        open MACHINES,"smbclient -L $mainserver $cptlog|";
        my $started = 0; # On ne commence pas tout de suite à lire les lignes
        my $firstemptyline = 1;
        while()
        {
        # On saute les premières lignes inutiles
        next unless ($started or /Server.*Comment/);
        if (!$started)
        {
        $started = 1;
        next;
        }
        next if /-{9}\s+-{7}/; # On saute la ligne de soulignement

        # Si la ligne est vide, on arrête
        last if (/^$/);

        if(/\W+(.+?)\ {4,}/) {AnaMachine($1);}
        }
        close MACHINES;
        exit;

        sub AnaMachine
        {
        my $machine = shift;

        # On regarde si la mise à jour de la machine est nécessaire
        # remplacement des apostrophes pour SQL
        (my $machineSQL = $machine) =~ s/'/''/g;

        my $dateMAJ = $dbh->selectrow_array("SELECT date FROM PartagesMAJ WHERE machine='$machineSQL'");

        #construction de la date courante
        my @temp = localtime();
        my $date = $temp[5] + 1900;
        $date .= '-'.($temp[4]+1).'-'.($temp[3]);
        $date =~ s/-(\d)-/-0$1-/;
        $date =~ s/-(\d)$/-0$1/;

        # Si la dateMAJ est définie, on la compare à la date courante,
        # sinon, on poursuit l'analyse de la machine
        if( defined $dateMAJ)
        {
        $dateMAJ =~ s/ 00:00:00$//;
        if($dateMAJ eq $date)
        {
        # Cas où on n'a rien à faire : on n'affiche rien à l'écran
        return;
        }
        }

        print "Mise à jour de $machine...";
        # On commence par regarder si la machine est online
        my $machineSH = $machine;
        $machineSH =~ s/!/\\!/g;
        $machineSH =~ s/'/\\'/g; # Ne semble pas marcher

        if(`smbclient -L $machineSH $cptlog | grep Connection` =~ /failed/)
        {
        #mettre à jour '$partageMAJ'
        print " offline; on essaiera plus tard\n";
        $dbh->do("UPDATE PartagesMAJ SET upState='0' WHERE machine='$machineSQL'");
        return;
        }
        else
        {
        #mettre à jour 'partageMAJ'
        print "\n";
        # On commence par effacer les entrées de la base liées à cette machine
        unless($dbh->do("DELETE FROM Partages WHERE machine='$machineSQL'"))
        {
        print "Impossible de supprimer les entrées de la base de données pour $machine\n";
        return;
        }

        open(LIST,"smbclient -L \"$machine\" $cptlog|");
        my $started = 0;
        my $ip = 0;
        while()
        {
        #print "Ligne : $_";
        if (/Got a positive name query response from (.*?)\s/) {
        $ip = $1;
        # IP incorrecte : loopback; on passe à la machine suivante
        next if $ip eq "127.0.0.1";
        }
        # On atteint d'abord les "----"
        next unless $started or /-{9}\s+-/;
        if (!$started)
        {
        $started = 1;
        next;
        }

        # Si on rencontre une ligne vide, on sort
        last if /^$/;

        if(/\s+(.+?)\s+Disk/)
        {
        # Si le nom du partage finit par '$', on passe au suivant
        next if $1 =~ /\$$/;

        # Sinon, on ajoute le partage à la base de données
        AddPartage($machine,$1);
        }
        }
        close(LIST);
        # $machine a été analysée; on met à jour PartagesMAJ;
        # Modification de la date : on supprime tous les caractères non numériques
        $date =~ s/\D//g;

        unless(($dbh->do("UPDATE PartagesMAJ SET date=$date, upState='1', ip='$ip' WHERE machine='$machineSQL'") eq 1)
        or ($dbh->do("INSERT INTO PartagesMAJ VALUES ('$machineSQL', '$date', '$ip', '1')") eq 1) )
        {
        print "Erreur recontrée durant la mise à jour de la date de $machine\n";
        return;
        }
        }

        sub AddPartage
        {
        my $machine = shift;
        my $partage = shift;

        (my $machineSQL = $machine) =~ s/'/''/g;
        (my $partageSQL = $partage) =~ s/'/''/g;

        my $currep = "\\\\";

        open(LISTFICH, "(echo recurse && echo ls) | smbclient \"//$machine/$partage\" $cptlog|");
        while()
        {
        next unless (/^\ {2}(.+?)\s+([DAHRS]*)\s+(\d+)\s*[a-zA-Z]{3}\s[a-zA-Z]{3}/ or /^(\\.+)$/);
        next if((defined $2) and ($2 =~ /[DH]/) ); # si on détecte un attribut répertoire ou caché, on passe à la ligne suivante
        # (les réperoires sont détectés grâce à $3)

        if(!defined $3)
        {
        # Répertoire détecté : On met à jour le répertoire courant
        next if $1 =~ /^\.{1,2}/; # On saute les répertoire '.' et '..'
        $currep = $1;
        # On modifie un peu ce qu'on a obtenu
        $currep .= '\\';
        $currep =~ s/\\/\\\\/g;
        $currep =~ s/'/''/g;
        }
        else
        {
        # Fichier
        my $nomfichcomplet = $1;
        my $taille = $3;
        my $nomf;
        my $extf; if ($nomfichcomplet =~ /(.+)\.(.+)/)
        {
        $nomf=$1;
        $extf=$2;
        }
        else
        {
        $nomf=$nomfichcomplet;
        $extf="";
        }

        $nomf =~ s/'/''/g;
        $extf =~ s/'/''/g;

        unless($dbh->do("INSERT INTO Partages VALUES "
        ."('$machineSQL','$partageSQL','$currep','$nomf','$extf',$taille)"))
        {
        print "Impossible d'insérer le fichier \\\\$machine\\$partage$currep\\$nomf.$extf : $taille;\n";
        }
        }
        }
        close LISTFICH;
        }
        }
    • [^] # Re: Tu peux le créer toi même ....

      Posté par  . Évalué à 2.

      Houille's power :-)

      Ayant fait partie de la même communauté que Skippy380, je me rappelle qu'on avait aussi jeté un coup d'oeil à UntzUntzLan http://untzuntzlan.sourceforge.net/(...) mais à l'époque (2-3 ans), nous n'avions pas réussi à le faire marcher comme nous le souhaitions... Peut-être auras-tu plus de chance ?
  • # Wai! Kde RuLeZ :)

    Posté par  (site web personnel) . Évalué à 5.

    http://perso.wanadoo.fr/gnumdk/kfind.png(...)

    Théoriquement ca doit fonctionner, mais je n'ai jamais testé :)
  • # Fast File Search

    Posté par  . Évalué à 2.

    Je me demande si Fast File Search (http://ffsearch.sourceforge.net/(...)) ne pourrait pas répondre à ton attente. Enfin je pense que oui :-)

    De souvenir, c'est un script qui scanne périodiquement les ressources réseau (samba et ftp) et met à jou une base de données. On peut faire des recherches dans cette base via une page web.

    En installant ça sur une machine, toute la résidence pourra y avoir accès sans changer son propre systèmes (et oui, faut toujours penser en tant qu'utilisateur paresseux).
    Peut être que ça peut aussi éviter de surcharger le réseau par des recherches incessantes de toutes les machines ?
    • [^] # Re: Fast File Search

      Posté par  (site web personnel) . Évalué à 2.

      oui je confirme, il est utilisé depuis environ 3 ans dans une autre rezid etudiante, et ça marche très bien. (il s'apellait femfind au debut je crois)

      Il faut juste ensuite inciter les gens a partager leurs fichiers en FTP plutot qu'en samba pour ne pas trop se faire chier pour les télécharger.
    • [^] # Re: Fast File Search

      Posté par  . Évalué à 2.

      ça a l'air d'etre plus simple ke le scripte de Skippy380, jvai tout essayer..meme le truc sous kde (rechercher un fichier dans :/smb .. meme si ça parait preske impossible..) .. je sens que je ne dormirai pa ce soir !
  • # Altaviron

    Posté par  . Évalué à 1.

    Dans ma résidence pour gérer ça il y'avait un serveur dédié qui scannait le réseau régulièrement. Ensuite avec une interface web les utilisateurs pouvaient effectuer des recherches sur plusieurs critères facilement. Ca tournait sur un petite machine (une ss5 pour 400 postes à scanner) et ça marchait plutôt bien. Je crois que le nom du projet est "altaviron" mais si tu veux plus d'infos MP moi, je te filerais le mail du mec qui s'en occupe.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.