65.9K
CodeProject is changing. Read more.
Home

Ad & Spyware Prevention Using Your Hosts File

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.17/5 (8 votes)

Jan 11, 2006

viewsIcon

51724

downloadIcon

297

This article explains how you can prevent ads and spyware, using your hosts file.

Introduction

I created this script to automate the process of updating your hosts file from the list contained on http://www.someonewhocares.org/hosts/. Using this hosts file is the best way I have found to "make the internet not suck (as much)" just like it claims to.

The VBScript downloads the web page to a local temp file, parses it so only comments and wanted lines are contained, then puts this file in the proper directory. It also creates a backup copy of the hosts file, and sets the new one to read-only. Just double-click to execute it or if the "all was successful" echo is removed from the end, then it may be run as a Windows scheduled task. I have tested it on Windows 2K, 2003, and XP.

Prevention is better than cleaning, and being able to use hotmail without the "Win Free DVD Player" ad flashing in your face is priceless. Every IT guy should use this!

The Code

    'Create objFSO and objIE objects
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    set objIE=WScript.createobject("internetexplorer.application")


    'Determine path to hosts and set strHostsPath to correct path
    dim bFolder, strHostsPath
    bFolder = objFSO.folderExists("C:\WINDOWS\")
    
    if bFolder = False then

        strHostsPath = "C:\WINNT\system32\drivers\etc\"
    else
        strHostsPath = "C:\WINDOWS\system32\drivers\etc\"
    
    End if    


    'Create Temp Web file here since 
    'it needs a few milliseconds to complete
    Set TempWebFile = objFSO.CreateTextFile("C:\Temp.html", 2)

    'Navigate and wait for page to load
    objIE.Navigate ("http://someonewhocares.org/hosts/")

    Wscript.Sleep 1000
    'If sleep here omitted, an endless loop 
    'happens on windows 2003

    'wait for IE to Download Page before continuing execution
    While objIE.Busy: Wend 

    'Write contents of navigated webpage to local temp Web file
    TempWebFile.Write objIE.Document.body.outerHTML 
    TempWebFile.close 'Close File

    'open the local Webpage and read in all lines
    set PageText = objFSO.GetFile("C:\temp.html")
    set ts = pagetext.OpenAsTextStream(1,-2)


    dim ResultLine,ResultComment,ReadLine
'40

    'Create output file for parsed data from webpage
    Set OutFile = objFSO.OpenTextFile("C:\temp.txt",2,True)
    ' FileMode = 1=read 2=Write 8=Append


    Do while not ts.AtEndOfStream


        ReadLine = ts.readline   
        ResultLine = InStr(Readline, "127.0.0.1")
        ResultComment = InStr(Readline, "#")

        'Weed out anything but Good lines, 
        '  comments, and blanklines, and write temp file.
        if (ResultLine = 1) or (ResultComment = 1) _
                            or (ReadLine = "") then
            OutFile.WriteLine(ReadLine)
        end if 
    Loop
    
    ts.close
    OutFile.close 'Close File


    'Set host file to normal attributes from whatever it may be 
    Set objHostsFile = objFSO.GetFile(strHostsPath + "hosts")
    objHostsFile.Attributes = 0

    'Backup existing hosts file
    set BackFile=objFSO.GetFile(strHostsPath + "hosts")
    BackFile.Copy strHostsPath + "hosts.bak"

    'Copy new hosts file
    set NewFile=objFSO.GetFile("C:\temp.txt")
    NewFile.Copy strHostsPath + "hosts"

    'Delete Temp Files
    set DeleteFile=objFSO.GetFile("C:\Temp.html")
    DeleteFile.delete
    NewFile.delete

    'Set new host file attribute to read only
    objHostsFile.Attributes = 1

    WScript.Echo "Your Hosts File Has Been Updated Successfully!"