Motor de scanare in LAN

Votati daca va place site-ul!

Acces lent: Asteptati sa vedeti imaginile
Vedere de ansamblu Meniul DHTML-JavaScript

<TDheight="25"align="left">

  < DIV id ="men" align ="left"></ DIV >
 
< SCRIPT language ="JavaScript"
type ="text/javascript">

  try
 
{ cmDraw ('men', animMenu, 'hbr',
cmThemeOffice, 'ThemeOffice');}
 
catch( e )
 
{ alert( e.description ); }

  </ SCRIPT >

</TD>

Verifica fisier cu ActiveX Meniul DHTML-JavaScript
   
Acces lent: Asteptati sa vedeti imaginile

PingActiveX.PingActiveXClass Ping;
try
{
    P
ing = new PingActiveX.PingActiveXClass();
}
catch( Exception ex )
{ throw new Exception( "<font color=blue>
Eroare creare control PingActiveX</font>: " +
ex.Message );
}

bool Pornit = true;
try
{ Pornit = Ping.ping( Calculator ); }
catch( Exception ex )
{ throw new Exception( "Eroare apelare control
PingActiveX: "
+ ex.Message );
}

Motorul de scanare a retelei Ping cu ActiveX din C# (ASP.NET)
Acces lent: Asteptati sa vedeti imaginile
Autocomplete cu AJAX (XmlHttpRequest)

ListaShare

 

Explicatii:

Site-ul permite interogarea bazei de date ce contine toate fisierele share-ate in LAN. Dupa ce s-a realizat o cautare, fiecare fisier in parte poate fi verificat daca este sau nu Online.

Baza de date este umpluta folosind o aplicatie de scanare.


Intai in motorul de scanare, thread-ul de cautare a calculatoarelor ia IP-urile (din lista de IP-uri, la care se stie tiparul de alocare) la rand si face ping. Daca i se raspunde la ping, insereaza IP-ul in lista de IP-uri valide.

Threadul de scanare a folderelor share-ate ia cate un IP din lista si cauta share-urile. Fiecare folder gasit este introdus in lista de Foldere valide. Daca in lista de Foldere exista mai mult de 10 intrari, threadul de scanare a IP-urilor sta si asteapta.

Threadul de cautare in foldere ia cate un folder din lista, il sterge din baza de date iar apoi il parcurge recursiv si introduce in baza de date subfolderele si fisierele.

Scanarea se face o data la 6 ore, folosind facilitatea Scheduled Tasks din Windows.


Site-ul permite interogarea bazei de date. Se poate cauta dupa cuvinte (toate cuvintele sau oricare din ele). Se poate cauta dupa tipul de fisier. Sau dupa extensii custom. Se poate cauta intr-un interval de marime. Cum baza de date retine fisierele intalnite in ultimele 3 zile, se poate cauta intr-un interval maxim de disponibilitate.

Toate acestea fiind posibile, exista in meniu o lista preselectii care completeaza automat formularul si il trimite serverului. Preselectiile sunt: Filme, Videoclipuri, Concerte, Melodii si Imagini de CD.

Pentru ca fisierele sunt retinute pana al 3 zile, utilizatorul are posibilitatea sa interogheze fiecare fisier in parte sa vada daca este sau nu disponibil in acel moment. Acest lucru este realizat cu un control ActiveX Automation, accesibil din C# .Net si care face ping la IP-ul respectiv. Daca ping-ul raspunde in mai putin de 1,5 secunde, calculatorul este marcat ca pornit si se trece la verificarea disponibilitatii fisierului. Folosind un truc de HTML/Javascript, utilizatorul vede un iframe de asteptare pana se termina cautarea fisierului. Trucul este ca browserul asteapta terminarea raspunsului de la pagina, iar pagina nu-i "da drumu" pana nu termina.


 

Limbaj:
Aplicatia a fost realizata in limbajul C# folosind ASP.NET si Visual Studio .Net 2003. Baza de date este tinuta de un server Sql Server 2000. Motorul de scanare si aplicatia ActiveX Automation pentru ping sunt realizate in VisualC++ 6 cu MFC.

Baza de date are urmatoarele tabele:
Folder
Fisier
Parere
Tips
MaximFolder

"Momente de programare:"

// PingActiveX.odl : type library source for PingActiveX.exe
// This file will be processed by the MIDL compiler to produce the
// type library (PingActiveX.tlb).

[ uuid(B1B3D37C-3236-44F9-86A6-BE5841375966), version(1.0) ]
library PingActiveX
{
     importlib("stdole32.tlb");
     importlib("stdole2.tlb");  

     //  Primary dispatch interface for CPingActiveXDoc

     [ uuid(8521F96C-6626-4101-9BD4-4A8063605D10) ]
     dispinterface IPingActiveX
     {
          properties:
                // NOTE - ClassWizard will maintain property information here.
                //    Use extreme caution when editing this section.
                //{{AFX_ODL_PROP(CPingActiveXDlgAutoProxy)
                //}}AFX_ODL_PROP

          methods:
                // NOTE - ClassWizard will maintain method information here.
                //    Use extreme caution when editing this section.
                //{{AFX_ODL_METHOD(CPingActiveXDlgAutoProxy)
                [id(1)] boolean ping(BSTR calculator);
                [id(2)] void exit();
                //}}AFX_ODL_METHOD  

     };

     //  Class information for CPingActiveXDoc
     [ uuid(DD728C84-4A40-4801-AB14-05C56C3F4A4E) ]
     coclass PingActiveX
     {
          [default] dispinterface IPingActiveX;
     }; 

     //{{AFX_APPEND_ODL}}
     //}}AFX_APPEND_ODL}}
};

Trucul cu iframe-ul de asteptare:

       <SCRIPT language="javascript">
       function Online(fisier)
       {
             try
             {
                    document.getElementById("ifrmonline").src='Online.aspx?fisier='+fisier;
             }
             catch(e)
             {
                    alert( "Online: " + e.description );
             }
       }
       </SCRIPT>
</HEAD>
<BODY bgcolor="#fff7be" onload="Online('<%=CaleFisier%>');">
       <FORM id="Form1" method="post" runat="server">
             <P align="center">
                    <TABLE id="Table1" cellspacing="1" cellpadding="1" border="0">
                           <TR>
                                  <TD>Verific fisierul:
                                  </TD>
                                  <TD>
                                        <ASP:LABEL id="Label1" runat="server" forecolor="Blue">Label</ASP:LABEL></TD>
                           </TR>
                           <TR>
                                  <TD></TD>
                                  <TD>
                                        <IFRAME runat="server" id="ifrmonline" src='asteapta.aspx' width="320" height='180' frameborder="no"
                                               scrolling="no"></IFRAME>
                                  </TD>
                           </TR>
                    </TABLE>
             </P>
       </FORM>
</BODY>