Interrogare server Whois con .NET

Come spesso accade, ci si ritrova a risolvere, grazie al Framework, problemi apparentemente intricati con poche righe di codice.
E’ il caso della classe che vi propongo, che esegue un’interrogazione ad un server Whois, ricevendo in cambio il record corrispondente (o un segnale di “not found”) al dominio richiesto. Innanzitutto i namespace da importare, che sono:

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.IO

La logica dietro a questa classe sarà quella di inzialmente impostare tramite delle property R/W il server Whois da interrogare, il dominio da verificare e l’eventuale porta TCP (di fatto è sempre la 43 per i Whois).

Private m_WhoisServer As String = String.Empty
Private m_Port As Integer = 43
Private m_Domain As String = String.Empty

Public Property Domain() As String
   Get
      Return m_Domain
   End Get
   Set(ByVal Value As String)
      m_Domain = Value + vbCrLf
   End Set
End Property

Public Property Port() As Integer
   Get
      Return m_Port
   End Get
   Set(ByVal Value As Integer)
      m_Port = Value
   End Set
End Property

Public Property WhoisServer() As String
   Get
      Return m_WhoisServer
   End Get
   Set(ByVal Value As String)
      m_WhoisServer = Value
   End Set
End Property

Per comodità, un overload del costruttore accetta direttamente server e dominio da verificare:

Public Sub New()
   
End Sub

Public Sub New(ByVal WhoisServer As String, ByVal Domain As String)
   Me.WhoisServer = WhoisServer
   Me.Domain = Domain
End Sub

Infine il codice principale, che esegue la query. Utilizzo un oggetto TcpClient, lo connetto al server e alla porta richiesto e imposto un timeout accettabile. Quindi passo, codificato in ASCII.GetBytes, il dominio da verificare. Da notare che quando viene impostata la property Domain, aggiungo alla fine il carattere di ritorno a capo: non settando questa chiusura, la richiesta al server rimane “appesa” (si può verificare la query anche tramite Telnet). Infine, leggo in uno streamreader il risultato restituito dal server.

Public Function Query() As String

   Dim TCPC As New TcpClient
   Dim sReturn As String

   Try
      TCPC.Connect(Me.WhoisServer, Me.Port)
      TCPC.ReceiveTimeout = 5000
      Dim arrDomain As Byte() = Encoding.ASCII.GetBytes(Me.Domain.ToCharArray)
      Dim s As Stream = TCPC.GetStream
      s.Write(arrDomain, 0, Me.Domain.Length)
      Dim sr As New StreamReader(TCPC.GetStream(), Encoding.ASCII)

      sReturn = sr.ReadToEnd

      TCPC.Close()
   Catch e As Exception
      sReturn = "Errore di comunicazione con il server " + Me.WhoisServer
   End Try

   Return sReturn

End Function

Ho utilizzato un blocco try-catch anche se preferisco sempre farne a meno, poiché ho sviluppato la classe in fretta e non ho potuto analizzare attentamente la gestione degli errori derivanti dall’oggetto TcpClient. Se qualcuno ha soluzioni più eleganti, sono sempre ben accette!

Posted by admin on Settembre 26th, 2007

Filed under .NET | No Comments »

The resource cannot be found / .NET 1.1 Visual Studio 2003

Ieri andava e oggi no.

Ho dovuto rimettere mano ad un’applicazione 1.1 (purtroppo :D?), proprio a cavallo di un’aggiornamento per Windows che riguarda il framework 1.1. Magari mi sbaglio di grosso, ma dalla sera alla mattina, solo quello è stato installato.. e VS 2003 ha smesso di far girare la mia applicazione. Poi mi sono accorto che non era proprio VS il problema, quanto IIS: anche manualmente, sfogliando il mio localhost, non venivano trovate le pagine aspx (tutto ok le html etc). Ho cercato un pò e ho trovato la soluzione in questo articolo:

 http://cephas.net/blog/2005/07/14/aspnet-the-resource-cannot-be-found/

Ha funzionato :P. Mistero della fede.

Posted by admin on Agosto 22nd, 2007

Filed under .NET, Uncategorized | No Comments »

Generare stringhe univoche con RNGCryptoServiceProvider - VB.NET

Ho trovato, testato e convertito a VB.NET (le cose più interessanti si trovano scritte sempre in C#, magari il passaggio a VB.NET può tornare utile a qualcuno!) un metodo piuttosto sicuro e performante per generare stringhe, anche brevi, univoche.

Mi è già capitato di avere una falsa univocità usando GUID, così ultimamente usavo un misto tra data e ora, SessionID (Asp.NET) e un numero random. La stringa risultante fa il suo lavoro ma si può avere lo stesso risultato più velocemente e con una stringa risultante più breve.

La mia traduzione è qui sotto, con maxSize si può regolare la lunghezza massima della stringa risultante; ho provato il tutto facendo centomila inserimenti in SQL Server in una tabella con un singolo campo-chiave e non ho riscontrato mai collisioni.

Public Shared Function GetUniqueString() As String

 Dim maxSize As Integer = 15

 Dim chars(62) As Char

 Dim a As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

 chars = a.ToCharArray

 Dim size As Integer = maxSize

 Dim data() As Byte = New Byte(1) {}

 Dim crypto As New System.Security.Cryptography.RNGCryptoServiceProvider

 crypto.GetNonZeroBytes(data)

 size = maxSize

 data = New Byte(size) {}

 crypto.GetNonZeroBytes(data)

 Dim results As New System.Text.StringBuilder(size)

 For Each b As Byte In data

  results.Append(chars(b Mod (chars.Length - 1)))

 Next

 Return results.ToString

End Function

L’articolo di riferimento è questo: http://www.codeproject.com/useritems/UniqueKeys.asp

Posted by admin on Luglio 31st, 2007

Filed under .NET | No Comments »

BluFTP, la soluzione semplice e definitiva per lo scambio di files via web

E’ disponibile la scheda informativa del software BluFTP, la soluzione semplice e definitiva per lo scambio di files via web.

Seguiranno alcuni screenshots e una versione dimostrativa (demo). Per rimanere informati sul prodotto, telefonare allo 02 938 10 90, contattare l’indirizzo bluftp@blugeco.com oppure visitare il sito web www.blugeco.com.

Posted by admin on Luglio 10th, 2007

Filed under blugeco, servizi, prodotti, programmi | No Comments »