Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Mac OS X adblock shell script using system hosts file (Block ads system wide)
#!/bin/sh
#
# Mac OSX Adblocker Script for IPv4
# Description: Blocks ads using system hosts file /private/etc/hosts, Ad-Domains would be redirected to 0.0.0.0
# Author: Daniel Hochleitner
# Created: 10.09.2015
# Use: sudo ./adblock_hosts.sh
# Get original hosts file from /private/etc/hosts
#
echo '!! Step 1: Get original hosts file'
# into current directory
if [ -f hosts_org.txt ]; then
echo '--> original hosts file already saved in current directory';
else
cp /private/etc/hosts hosts_org.txt
fi
# save into /private/etc/hosts_org
if [ -f /private/etc/hosts_org ]; then
echo '--> original hosts file already saved in /private/etc/hosts_org';
else
sudo cp -p /private/etc/hosts /private/etc/hosts_org
echo '--> saved hosts file into /private/etc/hosts_org'
fi
echo '!! Step 2: Get Adblock hosts files from WWW'
rm -fr www_hosts
mkdir www_hosts
cd www_hosts
# Host 1
curl -O https://adaway.org/hosts.txt
mv hosts.txt hosts1.txt
if [ -f hosts1.txt ]; then
echo '--> adaway.org saved';
fi
# Host 2
curl -O http://hosts-file.net/.%5Cad_servers.txt
mv .%5Cad_servers.txt hosts2.txt
if [ -f hosts2.txt ]; then
echo '--> hosts-file.net saved';
fi
# Host 3
curl -O http://winhelp2002.mvps.org/hosts.txt
mv hosts.txt hosts3.txt
if [ -f hosts3.txt ]; then
echo '--> winhelp2002.mvps.org saved';
fi
# Host 4
curl -O "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext"
mv serverlist.php\?hostformat\=hosts\&showintro\=0\&mimetype\=plaintext hosts4.txt
if [ -f hosts4.txt ]; then
echo '--> pgl.yoyo.org saved';
fi
# Host 5
curl -O http://www.malwaredomainlist.com/hostslist/hosts.txt
mv hosts.txt hosts5.txt
if [ -f hosts5.txt ]; then
echo '--> malwaredomainlist saved';
fi
# Host 6
curl -O http://someonewhocares.org/hosts/zero/hosts
mv hosts hosts6.txt
if [ -f hosts6.txt ]; then
echo '--> someonewhocares.org saved';
fi
# merge files into new host file
#
echo '!! Step 3: merge files into new host file'
cd ..
cat www_hosts/hosts1.txt >> hosts_new_temp.txt
cat www_hosts/hosts2.txt >> hosts_new_temp.txt
cat www_hosts/hosts3.txt >> hosts_new_temp.txt
cat www_hosts/hosts4.txt >> hosts_new_temp.txt
cat www_hosts/hosts5.txt >> hosts_new_temp.txt
cat www_hosts/hosts6.txt >> hosts_new_temp.txt
# Replace special entries
sed -i.bak '/localhost/d' hosts_new_temp.txt
sed -i.bak '/broadcasthost/d' hosts_new_temp.txt
sed -i.bak '/local/d' hosts_new_temp.txt
sed -i.bak '/piwik.org/d' hosts_new_temp.txt
sed -i.bak '/spclient.wg.spotify.com/d' hosts_new_temp.txt
sed -i.bak '/securemetrics.apple.com/d' hosts_new_temp.txt
sed -i.bak 's/127.0.0.1/0.0.0.0/' hosts_new_temp.txt
# build new hosts file
cat hosts_org.txt > hosts_new.txt
# special 0.0.0.0 entry
echo "# Special Entries" >> hosts_new.txt
echo "0.0.0.0 0.0.0.0 # fix for traceroute and netstat" >> hosts_new.txt
# adblock hosts entries
cat hosts_new_temp.txt >> hosts_new.txt
rm -f hosts_new_temp.txt*
# write new hosts file into system
echo '!! Step 4: write new hosts file into system'
echo '--> writing file...'
sudo cp hosts_new.txt /private/etc/hosts
chmod 644 /private/etc/hosts
echo '--> refresh DNS cache...'
dscacheutil -flushcache
sudo killall -HUP mDNSResponder
echo '!! Finished !!'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.