#Region " Hosts Helper "
Public Class Hosts_Helper
' [ Hosts Helper ]
'
' // By Elektro H@cker
'
' Examples:
'
' MsgBox(Hosts_Helper.HOSTS_Exists)
' Hosts_Helper.Add("www.youtube.com", "231.7.66.33")
' Hosts_Helper.Block("www.youtube.com")
' MsgBox(Hosts_Helper.IsAdded("www.youtube.com"))
' MsgBox(Hosts_Helper.IsBlocked("www.youtube.com"))
' Hosts_Helper.Remove("www.youtube.com")
' Hosts_Helper.Clean_Hosts_File()
Shared ReadOnly HOSTS As String = _
IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "Drivers\etc\hosts")
''' <summary>
''' Adds a new Block mapping into the Hosts file.
''' </summary>
Public Shared Sub Block(ByVal URL As String)
Dim Entry As String = String.Format("::1 {0}", URL)
If HOSTS_Exists() AndAlso IsBlocked(URL) Then
Throw New Exception(String.Format("""{0}"" is already blocked.", URL))
Exit Sub
ElseIf HOSTS_Exists() AndAlso IsAdded(URL) Then
Remove(URL)
End If
Try
IO.
File.
AppendAllText(HOSTS,
(Environment.
NewLine & Entry
), System.
Text.
Encoding.
Default) Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
''' <summary>
''' Adds a new mapping into Hosts file.
''' </summary>
Public Shared Sub Add(ByVal URL As String, ByVal IP_Address As String)
Dim Entry As String = String.Format("{0} {1}", IP_Address, URL)
If HOSTS_Exists() AndAlso (IsAdded(URL) OrElse IsBlocked(URL)) Then
Throw New Exception(String.Format("""{0}"" is already mapped.", URL))
Exit Sub
ElseIf Not Validate_IP(IP_Address) Then
Throw New Exception(String.Format("""{0}"" is not a valid IP adress.", IP_Address))
Exit Sub
End If
Try
IO.
File.
AppendAllText(HOSTS,
(Environment.
NewLine & Entry
), System.
Text.
Encoding.
Default) Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
''' <summary>
''' Removes a blocked or an added URL from the Hosts file.
''' </summary>
Public Shared Sub Remove(ByVal URL As String)
If Not HOSTS_Exists() Then
Throw New Exception("HOSTS File does not exists.")
Exit Sub
ElseIf HOSTS_Exists() And Not (IsAdded(URL) OrElse IsBlocked(URL)) Then
Throw New Exception(String.Format("""{0}"" is not added yet.", URL))
Exit Sub
End If
Try
Dim Content As String = _
System.
Text.
RegularExpressions.
Regex.
Replace(IO.
File.
ReadAllText(HOSTS
).
ToLower, _
String.Format("(\d{{1,3}}\.\d{{1,3}}\.\d{{1,3}}\.\d{{1,3}}|::1)(\s+|\t+){0}", URL.ToLower), String.Empty)
IO.
File.
WriteAllText(HOSTS, Content, System.
Text.
Encoding.
Default)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
''' <summary>
''' Checks if an URL is already added into the Hosts file.
''' </summary>
Public Shared Function IsAdded(ByVal URL As String) As Boolean
Return If(Not HOSTS_Exists(), False, _
System.Text.RegularExpressions.Regex.IsMatch( _
System.
Text.
RegularExpressions.
Regex.
Replace(IO.
File.
ReadAllText(HOSTS
).
ToLower,
"\s+|\t+",
";"), _
String.Format(";[^\#]?\d{{1,3}}\.\d{{1,3}}\.\d{{1,3}}\.\d{{1,3}};{0}", URL.ToLower)))
End Function
''' <summary>
''' Checks if an URL is already blocked into the Hosts file.
''' </summary>
Public Shared Function IsBlocked(ByVal URL As String) As Boolean
Return If(Not HOSTS_Exists(), False, _
System.Text.RegularExpressions.Regex.IsMatch( _
System.
Text.
RegularExpressions.
Regex.
Replace(IO.
File.
ReadAllText(HOSTS
).
ToLower,
"\s+|\t+",
String.
Empty), _
String.Format("[^\#](127.0.0.1|::1){0}", URL.ToLower)))
End Function
''' <summary>
''' Checks if the Hosts file exists.
''' </summary>
Public Shared Function HOSTS_Exists() As Boolean
Return IO.
File.
Exists(HOSTS
) End Function
''' <summary>
''' Cleans all the mappings inside the Hosts file.
''' </summary>
Public Shared Sub Clean_Hosts_File()
Try
IO.
File.
WriteAllText(HOSTS,
String.
Empty) Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
' Validates an IP adress.
Private Shared Function Validate_IP(ByVal IP_Address As String) As Boolean
Dim IP As System.Net.IPAddress = Nothing
Return System.Net.IPAddress.TryParse(IP_Address, IP)
End Function
End Class
#End Region