У меня есть приложение, которое использует файл hosts
для блокировки определенных веб-сайтов. Веб-сайты не могут подключиться из-за файла hosts
, поэтому он прекрасно работает, однако моя программа должна вызывать событие, когда веб-сайт заблокирован.
Я использую этот код:
Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim blocker As BlockListener
Dim thread As Thread
blocker = New BlockListener
thread = New Thread(New ThreadStart(AddressOf blocker.listen))
thread.Start()
AddHandler blocker.Blocked, AddressOf User_Blocked
End Sub
Private Sub User_Blocked()
My.Computer.Audio.Play("Sounds\Website-Blocked.wav")
WebsiteDetected.ShowDialog()
SetForegroundWindow(WebsiteDetected.Handle)
End Sub
Public Class BlockListener
Private port As Integer = 80
Private listener As TcpListener
Private BlockUsers As Boolean = True
Public Event Blocked As EventHandler
Public Sub listen()
listener = New TcpListener(IPAddress.Parse("127.0.0.1"), port)
listener.Start()
While (BlockUsers)
Dim clientConnection As TcpClient = listener.AcceptTcpClient
clientConnection.Close()
BlockUsers = False
RaiseEvent Blocked(Me, EventArgs.Empty)
End While
listener.Stop()
End Sub
После того, как я подожду некоторое время (скажем, около две минуты ), программа может обнаружить плохие веб-сайты , которые посещаются, однако я не на самом деле не хочется ждать, так как я думаю, что гораздо практичнее, если вы просто запустите программу и все готово, вам не придется ждать, пока программа начнет прослушивать входящие соединения.
Можно ли как-нибудь послушать на сервере быстрее?
Кроме того, это может быть из-за того, что в моем файле hosts много веб-сайтов? У меня в общей сложности 80 000 зараженных веб-сайтов, и поскольку Visual Basic намного медленнее, чем некоторые языки, может ли это быть причиной?