The aim of my program is to download whois data to a textfile from multiple websites whoes addresses are within the file "WebsiteList.txt" but I keep receiveing the error -"Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host."
Below is my program so far and attached is first the list of websites named WebsiteList.txt and the server file which needs to be in the bin directory. (For you to use this code/program you need to rename it from servers.lst.txt to servers.txt)
Could someone please get this to work for me. Thank you, I just can't seem to solve this problem.
Below is my program so far and attached is first the list of websites named WebsiteList.txt and the server file which needs to be in the bin directory. (For you to use this code/program you need to rename it from servers.lst.txt to servers.txt)
Could someone please get this to work for me. Thank you, I just can't seem to solve this problem.
Imports System.IO
Imports System.Text
Imports System.Net.Sockets
Public Class Form1
Dim FILEtoWrite As String = "c:\users\Andrew\Desktop\WhoisData.txt"
Dim FILEtoRead As String = "c:\users\Andrew\Desktop\WebsiteList.txt"
Private whoisTable As New Hashtable()
Private Sub Add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Add.Click
If System.IO.File.Exists(FILEtoRead) = True Then
Dim objReader As New System.IO.StreamReader(FILEtoRead)
Do While objReader.Peek() <> -1
ListBox1.Items.Add(objReader.ReadLine())
Loop
End If
End Sub
Sub Lookup(ByVal domain As String)
Dim i As Int32
Dim lines As String
Dim server As String
Dim tld As String
If (isDomain(domain.Trim)) Then
tld = domain.Substring(domain.IndexOf(".") + 1)
server = whoisTable.Item(tld)
Else
Exit Sub
End If
' do the whois query
Dim whoisResult As String = doWhoisQuery(domain, server)
' send the output to the results textbox
lines += "[" + server + "]" + vbLf
lines += whoisResult + vbLf
' check for a redirect whois server
Dim infoServer As String = GetInfoServer(whoisResult)
If (infoServer <> "") Then
whoisResult = doWhoisQuery(domain, infoServer)
lines += "[" + infoServer + "]" + vbLf
lines += whoisResult
End If
DownloadtoFile(lines)
End Sub
Sub DownloadtoFile(ByVal Lines As String)
Dim objWriter As New System.IO.StreamWriter(FILEtoWrite, True)
objWriter.WriteLine(Lines)
objWriter.WriteLine()
objWriter.Close()
End Sub
Private Function doWhoisQuery(ByVal domain As String, ByVal server As String) As String
Dim returnData As String = ""
Dim tcpClient As New TcpClient()
tcpClient.Connect(server, 43)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(domain + vbCrLf)
networkStream.Write(sendBytes, 0, sendBytes.Length)
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
Dim recvSize As Int32
recvSize = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
While (recvSize <> 0)
returnData += Encoding.ASCII.GetString(bytes, 0, recvSize)
recvSize = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
End While
Else
If Not networkStream.CanWrite Then
returnData = "Cannot write data to this stream."
Else
If Not networkStream.CanRead Then
returnData = "Cannot read data from this stream."
End If
End If
End If
tcpClient.Close()
Return returnData
End Function
Private Function isDomain(ByVal domain As String) As Boolean
Dim regex As New RegularExpressions.Regex("^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$")
Return regex.IsMatch(domain)
End Function
Private Shared Function LoadWhoisServers(ByVal filename As String) As Hashtable
Dim tmpArray() As String
Dim whoisTable As New Hashtable()
Try
Dim MyStreamReader As StreamReader = IO.File.OpenText(filename)
Do While MyStreamReader.Peek() >= 0
tmpArray = MyStreamReader.ReadLine().Split("|")
If (tmpArray.GetLength(0) = 6 And tmpArray(0).StartsWith("#") = False) Then
whoisTable.Add(tmpArray(0), tmpArray(1))
End If
Loop
MyStreamReader.Close()
Catch e As Exception
MsgBox(e.Message + vbLf + "The application will now exit.", MsgBoxStyle.Critical)
End
End Try
Return whoisTable
End Function
Private Shared Function GetInfoServer(ByVal queryTxt As String) As String
Dim regex As New RegularExpressions.Regex("Whois Server:\s+(.+)", RegularExpressions.RegexOptions.IgnoreCase)
Dim match As RegularExpressions.Match = regex.Match(queryTxt)
If (match.Value <> "") Then
Return match.Value.Substring(14)
Else
Return ""
End If
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
whoisTable = LoadWhoisServers("servers.lst")
End Sub
Private Sub DownloadWhoisInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DownloadWhoisInfo.Click
For i = 0 To ListBox1.Items.Count - 1
Lookup(ListBox1.Items(i))
Next
End Sub
End Class
Attachments
Last edited by a moderator: