Skip to content
David Kittell
David Kittell

Application & System: Development / Integration / Orchestration

  • Services
    • Application Development
    • Online Application Integration
  • Code
  • Online Tools
  • Tech Support
David Kittell

Application & System: Development / Integration / Orchestration

Host File Update

Posted on July 29, 2013November 15, 2016 By David Kittell

Proxy Server host block list is now available at http://goo.gl/jXiOLp, make sure you do not use this in Windows host file.

http://hosts-file.net/ad_servers.txt
http://jamesisbored.com/iphone/content/hosts.php
http://jansal.googlecode.com/svn/trunk/adblock/hosts
http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts;showintro=0&mimetype=plaintext
http://someonewhocares.org/hosts/hosts
http://sysctl.org/cameleon/hosts
http://unbelovedhosts.apk.defim.de/hosts
http://winhelp2002.mvps.org/hosts.txt
http://www.malwaredomainlist.com/hostslist/hosts.txt
http://www.montanamenagerie.org/hostsfile/hosts.txt
https://adaway.org/hosts.txt

It’s a good idea to do this script in a directory that is specific to your host file project

#!/bin/bash
clear

echo "Removing old host file downloads - start"
rm host*.txt
rm all.txt
echo "Removing old host file downloads - stop"

echo "Downloading new versions of the host file lists - start"
curl -s -o host1.txt http://goo.gl/A8LzsL
curl -s -o host2.txt http://goo.gl/P1JY6Q
curl -s -o host3.txt http://hosts-file.net/ad_servers.txt
curl -s -o host4.txt http://jamesisbored.com/iphone/content/hosts.php
curl -s -o host5.txt http://jansal.googlecode.com/svn/trunk/adblock/hosts
#curl -s -o host6.txt http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext
#curl -s -o host7.txt http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts;showintro=0&mimetype=plaintext
curl -s -o host8.txt http://someonewhocares.org/hosts/hosts
curl -s -o host9.txt http://sysctl.org/cameleon/hosts
curl -s -o host10.txt http://unbelovedhosts.apk.defim.de/hosts
curl -s -o host11.txt http://winhelp2002.mvps.org/hosts.txt
curl -s -o host12.txt http://www.malwaredomainlist.com/hostslist/hosts.txt
curl -s -o host13.txt http://www.montanamenagerie.org/hostsfile/hosts.txt
curl -s -o host14.txt http://www.mvps.org/winhelp2002/hosts.txt
curl -s -o host15.txt https://adaway.org/hosts.txt
curl -s -o host16.txt https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt
curl -s -o host17.txt https://mirror.cedia.org.ec/malwaredomains/justdomains
#curl -s -o host18.txt https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext
curl -s -o host19.txt https://raw.githubusercontent.com/lewisje/jansal/master/adblock/hosts
curl -s -o host20.txt http://hosts-file.net/hphosts-partial.asp
echo "Downloading new versions of the host file lists - stop"

echo "Combining all lists into one - start"
cat *.txt > all.txt
echo "Combining all lists into one - stop"

echo "Cleaning the list - step 1"
sed -i '/^#/ d' all.txt
echo "Cleaning the list - step 2"
tr '[:upper:]' '[:lower:]' < all.txt > cleaner.txt
echo "Cleaning the list - step 3"
sed -i -e 's|127.0.0.1||' cleaner.txt
echo "Cleaning the list - step 4"
sed -i -e 's|0.0.0.0||' cleaner.txt
echo "Cleaning the list - step 5"
sed -i -e 's|::1||' cleaner.txt
echo "Cleaning the list - step 6"
sed -i -e 's|fe80::1%lo0||' cleaner.txt
echo "Cleaning the list - step 7"
sed -i -e 's/^[[:space:]]*//' cleaner.txt
echo "Cleaning the list - step 8"
sed -i '/^*{/d' cleaner.txt
echo "Cleaning the list - step 9"
cat cleaner.txt | sort | awk '!a[$0]++' > all.txt
echo "Cleaning the list - step 10"
rm clean*
echo "Cleaning the list - step 11"
sed -i '/^\s*$/d' all.txt
echo "Cleaning the list - step 12"
sed -i -e 's/^/0.0.0.0 /' all.txt

echo "Saving new hosts file"
cp all.txt hosts

echo "Saving new hosts lists file"
cat hosts | sort | sed -e 's|0.0.0.0 ||'  > host

Make sure you chmod the shell script

chmod +x update_hosts.sh

Mac OS X Example – Open Terminal

cd ~/Downloads
curl -O http://winhelp2002.mvps.org/hosts.txt
sudo cp /private/etc/hosts /private/etc/hosts.bk
sudo cp ~/Downloads/hosts.txt /private/etc/hosts

Windows PowerShell first create a text file from the list above or with your own list and save it as C:\Temp\hosts\ServerList.txt

# Directory Parameter
$FileDirectory = "C:\Temp\hosts\lists\"

# If directory doesn't exist create the directory
if((Test-Path $FileDirectory) -eq 0)
    {
        mkdir $FileDirectory;
        # cd $FileDirectory;
    }

    $hostfiltered = ""


clear
$ServerList = (Get-Content "C:\Temp\hosts\ServerList.txt") | Sort-Object

$ServerNumber = 1

write-host $ServerList.count total host lists read from file
foreach ($line in $ServerList)
{
   # write-host $line

    # We assume the file you download is named what you want it to be on your computer
    $FileName = [System.IO.Path]::GetFileName($line)

    $FullFilePath = "$($FileDirectory)Server_$($ServerNumber).txt"

    # write-host     $FullFilePath 
       
    # Give a basic message to the user to let them know what we are doing
    Write-Host "`r`nDownloading '$line' to '$FullFilePath'"
    
    # Download - Start
    $uri = New-Object "System.Uri" "$line" 
    $request = [System.Net.HttpWebRequest]::Create($uri) 
    $request.set_Timeout(15000) #15 second timeout 
    $response = $request.GetResponse() 
    $totalLength = [System.Math]::Floor($response.get_ContentLength()/1024) 
    $responseStream = $response.GetResponseStream() 
    $targetStream = New-Object -TypeName System.IO.FileStream -ArgumentList $FullFilePath, Create 
    $buffer = new-object byte[] 10KB 
    $count = $responseStream.Read($buffer,0,$buffer.length) 
    $downloadedBytes = $count 
    while ($count -gt 0) 
    {         
        [System.Console]::Write("`r`nDownloaded {0}K of {1}K", [System.Math]::Floor($downloadedBytes/1024), $totalLength) 
        $targetStream.Write($buffer, 0, $count) 
        $count = $responseStream.Read($buffer,0,$buffer.length) 
        $downloadedBytes = $downloadedBytes + $count 
    } 
  
    $targetStream.Flush()
    $targetStream.Close() 
    $targetStream.Dispose() 
    $responseStream.Dispose() 
    
    # Give a basic message to the user to let them know we are done
    Write-Host "`r`nDownload complete"
    # Download - Stop   

     $ServerNumber = $ServerNumber + 1
}

cd C:\Temp\hosts\lists

Write-Host "`r`nCombining Lists"

$FullFilePathFiltered = "C:\Temp\hosts\lists\combined_files.txt"
$FullFilePathFiltered1 = "C:\Temp\hosts\lists\combined_files1.txt"

If (Test-Path $FullFilePathFiltered){
    Remove-Item $FullFilePathFiltered
}

If (Test-Path $FullFilePathFiltered1){
    Remove-Item $FullFilePathFiltered1
}

Get-ChildItem -recurse -include "*.txt" | % { Get-Content $_ -ReadCount 0 | Add-Content $FullFilePathFiltered }

Remove-Item C:\Temp\hosts\lists\Server_*

Write-Host "`r`nCombined Lists"

Write-Host "`r`nCleaning File - Remove Localhost"
    (get-content $FullFilePathFiltered) | select-string -pattern 'localhost' -notmatch | Set-Content $FullFilePathFiltered
    (get-content $FullFilePathFiltered) | select-string -pattern 'broadcasthost' -notmatch | Set-Content $FullFilePathFiltered
Write-Host "`r`nCleaning File - Remove Localhost - Done"

Write-Host "`r`nCleaning File - Replace Tabs with space"
cat $FullFilePathFiltered | %{$_ -replace '[\t]',' '}  > $FullFilePathFiltered1
Write-Host "`r`nCleaning File - Replace Tabs with space - Done"

Write-Host "`r`nCleaning File - Replace Double Spaces"
cat $FullFilePathFiltered1 | %{$_ -replace ' {2,}',' '}  > $FullFilePathFiltered
Write-Host "`r`nCleaning File - Replace Double Spaces - Done"

Write-Host "`r`nCleaning File - Remove Empty Lines"
    (Get-Content $FullFilePathFiltered ) | Where { $_ } | Set-Content $FullFilePathFiltered1
Write-Host "`r`nCleaning File - Remove Empty Lines - Done"

Write-Host "`r`nCleaning File - Remove localhost ::1"
    (Get-Content $FullFilePathFiltered1) | Where { $_ -notmatch "^:" } | Set-Content $FullFilePathFiltered
Write-Host "`r`nCleaning File - Remove localhost ::1 - Done"

Write-Host "`r`nCleaning File - Remove comments"
    (Get-Content $FullFilePathFiltered) | Where { $_ -notmatch "^#" } | Set-Content $FullFilePathFiltered
Write-Host "`r`nCleaning File - Remove comments - Done"

Write-Host "`r`nCleaning File - Replace 0.0.0.0 with 127.0.0.1"
cat $FullFilePathFiltered | %{$_ -replace "0.0.0.0","127.0.0.1"}  > $FullFilePathFiltered1
cat $FullFilePathFiltered1 | %{$_ -replace "188.165.196.30","127.0.0.1"}  > $FullFilePathFiltered

cat $FullFilePathFiltered | %{$_ -replace "46.246.119.139","127.0.0.1"}  > $FullFilePathFiltered1


Write-Host "`r`nCleaning File - Replace 0.0.0.0 with 127.0.0.1 - Done"

Write-Host "`r`nCleaning File - Remove Duplicates"
    (get-content $FullFilePathFiltered1) |Sort-Object  | get-unique| out-file $FullFilePathFiltered
Write-Host "`r`nCleaning File - Remove Duplicates - Done"

Clear-Content $FullFilePathFiltered1
Add-Content $FullFilePathFiltered1 (get-content "C:\Temp\hosts\header.txt")
Add-Content $FullFilePathFiltered1 (get-content $FullFilePathFiltered)

Write-Host "`r`nFile Cleaned"

#Only uncomment these if the lists combined is less than a couple MB otherwise it will make your computer nuts.
#Move-Item "C:\Windows\System32\drivers\etc\HOSTS" "C:\Windows\System32\drivers\etc\hosts.old"
#Move-Item $FullFilePathFiltered1 "C:\Windows\System32\drivers\etc\hosts"

Reference: http://winhelp2002.mvps.org/hosts.htm

Originally Posted on July 29, 2013
Last Updated on November 15, 2016
All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility for any damage you may do with this code.

Related

Code PowerShell UNIX Shell Scripts Windows Batch

Post navigation

Previous post
Next post

Related Posts

PowerShell – Reset Colors

Posted on October 20, 2017

If you have ever played with the colors of your PowerShell window this will help you reset the colors to default > $psISE.Options SelectedScriptPaneState : Top ShowDefaultSnippets : True ShowToolBar : True ShowOutlining : True ShowLineNumbers : True TokenColors : {[Attribute, #FF00BFFF], [Command, #FF0000FF], [CommandArgument, #FF8A2BE2], [CommandParameter, #FF000080]…} ConsoleTokenColors :…

Read More

NPI Database

Posted on May 7, 2015October 26, 2015

If you work in medical databases you are likely familiar with the site CMS NPI Search I have had a few projects that need the ability to validate NPI numbers so based on data at CMS.gov I have worked out a solution to get the data into a database that…

Read More

Compare SQL column against another column

Posted on January 29, 2015October 26, 2015

In a recent effort to clean up duplicates in my contacts I came across a script to assist me. In my situation I have some contacts that have had the company name inserted as the first/last name. SELECT id, [Company], [Title], [First Name], [Middle Name], [Last Name] FROM [OutlookContacts] WHERE…

Read More

Code

Top Posts & Pages

  • PowerShell - Rename Pictures to Image Taken
  • Front Page
  • C# - Start/Stop/Restart Services
  • MacPorts / HomeBrew - Rip CD tracks from terminal
  • PowerShell - Show File Extensions

Recent Posts

  • Javascript – Digital Clock with Style
  • BASH – Web Ping Log
  • BASH – Picture / Video File Name Manipulation
  • Mac OSX Terminal – Create SSH Key
  • Bash – Rename Picture

Top Posts

  • PowerShell - Rename Pictures to Image Taken
  • C# - Start/Stop/Restart Services
  • MacPorts / HomeBrew - Rip CD tracks from terminal
  • PowerShell - Show File Extensions
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID
©2025 David Kittell | WordPress Theme by SuperbThemes