begin process at 2012 02 17 07:20:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > MINI CACHE DNS

MINI CACHE DNS


 Description

Mini Cache DNS à utilisation simple. Fonctionne très bien pour des caches de taille moyennes (je pense +/- 50 à 75 noms)

Utilisez-le via la fonction automatique : DNSRequest(ByVal host As String) As Net.IPAddress

(Le module de log n'est pas de moi)

Source

  • Class clsDNSCache
  • Structure DNSCacheDataType
  • Dim DomainName As String
  • Dim IP As Net.IPAddress
  • Dim datetime As DateTime
  • Sub Parse(ByVal Entry As String)
  • Dim tmp() As String = Split(Entry, ":")
  • DomainName = tmp(0)
  • IP = Net.IPAddress.Parse(tmp(1))
  • datetime = Date.FromBinary(tmp(2))
  • End Sub
  • Overrides Function ToString() As String
  • Return DomainName & ":" & IP.ToString & ":" & datetime.ToBinary
  • End Function
  • Shared Empty As New DNSCacheDataType
  • End Structure
  • Dim Data As New ArrayList
  • Dim filename As String = My.Application.Info.DirectoryPath & "\DNSCache.dat"
  • Dim file As New IO.FileStream(filename, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.Read)
  • Public Sub New()
  • Log.WriteToLog("dnscache.log", "Initializing DNSCache")
  • Dim filereader As New IO.StreamReader(file)
  • Do Until filereader.EndOfStream
  • Dim newentry As New DNSCacheDataType
  • newentry.Parse(filereader.ReadLine())
  • Data.Add(newentry)
  • Loop
  • filereader.Close()
  • Log.WriteToLog("dnscache.log", "DNSCache initialized")
  • CleanExpired()
  • End Sub
  • Public Function Read(ByVal DomainName As String) As DNSCacheDataType
  • Log.WriteToLog("dnscache.log", "Searching entry DN=" & DomainName)
  • CleanExpired()
  • For Each entry As DNSCacheDataType In Data
  • If entry.DomainName = DomainName Then
  • Log.WriteToLog("dnscache.log", "Entry found : DN=" & entry.DomainName & " IP=" & entry.IP.ToString & " Date=" & entry.datetime.ToShortDateString & " " & entry.datetime.ToShortTimeString)
  • Return entry
  • End If
  • Next
  • Log.WriteToLog("dnscache.log", "Entry not found")
  • Return DNSCacheDataType.Empty
  • End Function
  • Public Function Read(ByVal IP As Net.IPAddress) As DNSCacheDataType
  • Log.WriteToLog("dnscache.log", "Searching entry IP=" & IP.ToString)
  • CleanExpired()
  • For Each entry As DNSCacheDataType In Data
  • If entry.IP.Equals(IP) Then
  • Log.WriteToLog("dnscache.log", "Entry found : DN=" & entry.DomainName & " IP=" & entry.IP.ToString & " Date=" & entry.datetime.ToShortDateString & " " & entry.datetime.ToShortTimeString)
  • Return entry
  • End If
  • Next
  • Log.WriteToLog("dnscache.log", "Entry not found")
  • Return DNSCacheDataType.Empty
  • End Function
  • Public Sub Write(ByVal DomainName As String, ByVal IP As Net.IPAddress)
  • Log.WriteToLog("dnscache.log", "Writing new entry : DN=" & DomainName & " IP=" & IP.ToString)
  • Dim entry As New DNSCacheDataType
  • entry.DomainName = DomainName
  • entry.IP = IP
  • entry.datetime = DateTime.Now
  • Data.Add(entry)
  • Log.WriteToLog("dnscache.log", "New entry writed")
  • FlushToDisk(False)
  • End Sub
  • Public Sub CleanExpired(Optional ByVal hours As Double = 2)
  • Log.WriteToLog("dnscache.log", "Cleaning expired entries")
  • restart:
  • For Each entry As DNSCacheDataType In Data
  • If entry.datetime.AddHours(hours) < Now Then
  • Log.WriteToLog("dnscache.log", "Deleting : DN=" & entry.DomainName & " IP=" & entry.IP.ToString)
  • Data.Remove(entry)
  • GoTo restart
  • End If
  • Next
  • Log.WriteToLog("dnscache.log", "Expired entries deleted")
  • FlushToDisk(False)
  • End Sub
  • Public Sub Clear(Optional ByVal NeedToLog As Boolean = True)
  • If NeedToLog Then Log.WriteToLog("dnscache.log", "Clearing DNSCache")
  • file.Close()
  • IO.File.Delete(filename)
  • file = New IO.FileStream(filename, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.Read)
  • If NeedToLog Then Log.WriteToLog("dnscache.log", "DNSCache cleared")
  • End Sub
  • Public Sub FlushToDisk(Optional ByVal NeedToLog As Boolean = True)
  • If NeedToLog Then Log.WriteToLog("dnscache.log", "Writing DNSCache database")
  • Clear(False)
  • Dim filewriter As New IO.StreamWriter(file)
  • For Each entry As DNSCacheDataType In Data
  • filewriter.WriteLine(entry.ToString)
  • Next
  • filewriter.Close()
  • If NeedToLog Then Log.WriteToLog("dnscache.log", "DNSCache database writed")
  • End Sub
  • Public Function DNSRequest(ByVal host As String) As Net.IPAddress
  • Dim entry As clsDNSCache.DNSCacheDataType = Read(host)
  • If entry.Equals(clsDNSCache.DNSCacheDataType.Empty) Then
  • WriteToLog("dnscache.log", "Resolving : " & host)
  • DNSRequest = Net.Dns.GetHostEntry(host).AddressList(0)
  • WriteToLog("dnscache.log", " => Resolved : " & DNSRequest.ToString)
  • Write(host, DNSRequest)
  • Else
  • DNSRequest = entry.IP
  • End If
  • End Function
  • End Class
  • Module Log
  • Public Sub WriteToLog(ByVal Filename As String, ByVal Comment As String)
  • Dim sw As System.IO.StreamWriter
  • Try
  • Console.WriteLine(Comment)
  • sw = New System.IO.StreamWriter(Filename, True)
  • sw.WriteLine(Date.Now & " " & Comment)
  • Catch e As Exception
  • Finally
  • If Not sw Is Nothing Then sw.Close()
  • End Try
  • End Sub
  • End Module
Class clsDNSCache
    Structure DNSCacheDataType
        Dim DomainName As String
        Dim IP As Net.IPAddress
        Dim datetime As DateTime

        Sub Parse(ByVal Entry As String)
            Dim tmp() As String = Split(Entry, ":")
            DomainName = tmp(0)
            IP = Net.IPAddress.Parse(tmp(1))
            datetime = Date.FromBinary(tmp(2))
        End Sub
        Overrides Function ToString() As String
            Return DomainName & ":" & IP.ToString & ":" & datetime.ToBinary
        End Function

        Shared Empty As New DNSCacheDataType
    End Structure

    Dim Data As New ArrayList
    Dim filename As String = My.Application.Info.DirectoryPath & "\DNSCache.dat"
    Dim file As New IO.FileStream(filename, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.Read)

    Public Sub New()
        Log.WriteToLog("dnscache.log", "Initializing DNSCache")
        Dim filereader As New IO.StreamReader(file)
        Do Until filereader.EndOfStream
            Dim newentry As New DNSCacheDataType
            newentry.Parse(filereader.ReadLine())
            Data.Add(newentry)
        Loop
        filereader.Close()
        Log.WriteToLog("dnscache.log", "DNSCache initialized")
        CleanExpired()
    End Sub

    Public Function Read(ByVal DomainName As String) As DNSCacheDataType
        Log.WriteToLog("dnscache.log", "Searching entry DN=" & DomainName)
        CleanExpired()
        For Each entry As DNSCacheDataType In Data
            If entry.DomainName = DomainName Then
                Log.WriteToLog("dnscache.log", "Entry found : DN=" & entry.DomainName & " IP=" & entry.IP.ToString & " Date=" & entry.datetime.ToShortDateString & " " & entry.datetime.ToShortTimeString)
                Return entry
            End If
        Next
        Log.WriteToLog("dnscache.log", "Entry not found")
        Return DNSCacheDataType.Empty
    End Function
    Public Function Read(ByVal IP As Net.IPAddress) As DNSCacheDataType
        Log.WriteToLog("dnscache.log", "Searching entry IP=" & IP.ToString)
        CleanExpired()
        For Each entry As DNSCacheDataType In Data
            If entry.IP.Equals(IP) Then
                Log.WriteToLog("dnscache.log", "Entry found : DN=" & entry.DomainName & " IP=" & entry.IP.ToString & " Date=" & entry.datetime.ToShortDateString & " " & entry.datetime.ToShortTimeString)
                Return entry
            End If
        Next
        Log.WriteToLog("dnscache.log", "Entry not found")
        Return DNSCacheDataType.Empty
    End Function
    Public Sub Write(ByVal DomainName As String, ByVal IP As Net.IPAddress)
        Log.WriteToLog("dnscache.log", "Writing new entry : DN=" & DomainName & " IP=" & IP.ToString)
        Dim entry As New DNSCacheDataType
        entry.DomainName = DomainName
        entry.IP = IP
        entry.datetime = DateTime.Now
        Data.Add(entry)
        Log.WriteToLog("dnscache.log", "New entry writed")
        FlushToDisk(False)
    End Sub
    Public Sub CleanExpired(Optional ByVal hours As Double = 2)
        Log.WriteToLog("dnscache.log", "Cleaning expired entries")
restart:
        For Each entry As DNSCacheDataType In Data
            If entry.datetime.AddHours(hours) < Now Then
                Log.WriteToLog("dnscache.log", "Deleting : DN=" & entry.DomainName & " IP=" & entry.IP.ToString)
                Data.Remove(entry)
                GoTo restart
            End If
        Next
        Log.WriteToLog("dnscache.log", "Expired entries deleted")
        FlushToDisk(False)
    End Sub
    Public Sub Clear(Optional ByVal NeedToLog As Boolean = True)
        If NeedToLog Then Log.WriteToLog("dnscache.log", "Clearing DNSCache")
        file.Close()
        IO.File.Delete(filename)
        file = New IO.FileStream(filename, IO.FileMode.OpenOrCreate, IO.FileAccess.ReadWrite, IO.FileShare.Read)
        If NeedToLog Then Log.WriteToLog("dnscache.log", "DNSCache cleared")
    End Sub
    Public Sub FlushToDisk(Optional ByVal NeedToLog As Boolean = True)
        If NeedToLog Then Log.WriteToLog("dnscache.log", "Writing DNSCache database")
        Clear(False)

        Dim filewriter As New IO.StreamWriter(file)
        For Each entry As DNSCacheDataType In Data
            filewriter.WriteLine(entry.ToString)
        Next
        filewriter.Close()
        If NeedToLog Then Log.WriteToLog("dnscache.log", "DNSCache database writed")
    End Sub

    Public Function DNSRequest(ByVal host As String) As Net.IPAddress
        Dim entry As clsDNSCache.DNSCacheDataType = Read(host)
        If entry.Equals(clsDNSCache.DNSCacheDataType.Empty) Then
            WriteToLog("dnscache.log", "Resolving : " & host)
            DNSRequest = Net.Dns.GetHostEntry(host).AddressList(0)
            WriteToLog("dnscache.log", " => Resolved : " & DNSRequest.ToString)
            Write(host, DNSRequest)
        Else
            DNSRequest = entry.IP
        End If
    End Function
End Class

Module Log
    Public Sub WriteToLog(ByVal Filename As String, ByVal Comment As String)
        Dim sw As System.IO.StreamWriter
        Try
            Console.WriteLine(Comment)
            sw = New System.IO.StreamWriter(Filename, True)
            sw.WriteLine(Date.Now & "     " & Comment)
        Catch e As Exception
        Finally
            If Not sw Is Nothing Then sw.Close()
        End Try
    End Sub
End Module

 Conclusion

Nécessite une petite optimisation pour des gros cache : ne pas effectuer le FlushToDisk à chaque modifications en mémoire


 Sources du même auteur

Source .NET (Dotnet) DIRECTDISKACCESS
Source avec Zip Source .NET (Dotnet) XGBLENDERCOMPRESSOR
Source avec Zip Source .NET (Dotnet) CLASSE DE LECTURE DE LA LIBRAIRIE ITUNES
Source avec Zip Source .NET (Dotnet) WINSOCK.NET
Source avec Zip Source .NET (Dotnet) FLOPPY (UTILITAIRE DE LIGNE DE COMMANDE)

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales