#!/bin/sh | |
# SetDNS.sh | |
# | |
# | |
# Created by David Kittell on 6/14/19. | |
# | |
# Variables - Start | |
sExternalIPService="http://dns.kittell.net/ip.php" | |
sExternalMACALService="http://dns.kittell.net/macaltext.php?address=" | |
sFunctionsDirectory="/Users/dkittell/Documents/SourceCode/sh/Functions/" # Make sure to update to a valid directory. | |
# Get remote/public IP address | |
remoteip=$(curl -sSf -m 5 --connect-timeout 5 $sExternalIPService) | |
# Get computer name | |
computername=$(scutil --get ComputerName) | |
# Get serial number | |
sSerialNumber=$(system_profiler SPHardwareDataType |grep "Serial Number (system)" |awk '{print $4}' | cut -d/ -f1) | |
#echo $sSerialNumber | |
# Variables - Stop | |
# Run Once - Start | |
#mkdir -p $sFunctionsDirectory | |
#cd $sFunctionsDirectory | |
#wget https://gist.githubusercontent.com/dkittell/fcc82cef813fdc606a518867a33aa81a/raw/723b5161b784756086914affc30ff0baa749c51b/UnixIdentification.sh | |
#cd ~/ | |
# Run Once - Stop | |
# Functions - Start | |
# Function to convert IP Subnet Mask to CIDR | |
mask2cdr () | |
{ | |
# Assumes there's no "255." after a non-255 byte in the mask | |
local x=${1##*255.} | |
set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*} | |
x=${1%%$3*} | |
echo $(( $2 + (${#x}/4) )) | |
} | |
IPUpStatus() | |
{ | |
if ping -c 1 $1 &> /dev/null | |
#if ping -c 1 8.8.8.8 &> /dev/null | |
#if ping -c 1 2a0d:2a00:1:abab:23b9:93ef:2da9:dd2f &> /dev/null | |
then | |
rc=1 | |
else | |
rc=0 | |
fi | |
#rc=$(ping -c 1 -m 5 "$1" | grep "100.0% packet loss") | |
echo $rc | |
} | |
DHCPDNS() | |
{ | |
#sudo clear | |
sudo networksetup -setwebproxystate "$ActiveNetworkName" Off | |
sudo networksetup -setsecurewebproxystate "$ActiveNetworkName" Off | |
sudo networksetup -setv6automatic "$ActiveNetworkName" | |
sudo networksetup -setdnsservers "$ActiveNetworkName" empty | |
sudo networksetup -setdhcp "$ActiveNetworkName" | |
sudo networksetup -setsearchdomains "$ActiveNetworkName" empty | |
sudo networksetup -setproxybypassdomains "$ActiveNetworkName" empty | |
sudo dscacheutil -flushcache | |
sudo killall -HUP mDNSResponder | |
say "DNS Updated for $ActiveNetworkName" | |
echo "\n DNS Updated" | |
DHCPActive=$(networksetup -getinfo "$ActiveNetworkName" | grep DHCP) | |
# echo $DHCPActive | |
dnsserver=$(networksetup -getdnsservers "$ActiveNetworkName" ) | |
# echo $dnsserver | |
if [[ -z $dnsserver || $DHCPActive == "DHCP Configuration" ]]; then | |
if [[ $DHCPActive ]]; then | |
echo " DNS Server: Set With DHCP" | |
else | |
echo " DNS Server: Unknown" | |
fi | |
else | |
echo " DNS Server: $dnsserver" | |
fi | |
} | |
StaticDNS() | |
{ | |
if [[ ! -z "$1" ]]; then | |
echo "\nValidating $1 is accessible..." | |
IPUpStatus "$1" | |
if [[ $rc == 1 ]] ; then | |
sudo networksetup -setv6automatic "$ActiveNetworkName" | |
sudo networksetup -setdhcp "$ActiveNetworkName" empty # Disable DHCP if it's on | |
sudo networksetup -setwebproxystate "$ActiveNetworkName" Off | |
sudo networksetup -setsecurewebproxystate "$ActiveNetworkName" Off | |
sudo networksetup -setdnsservers "$ActiveNetworkName" empty | |
sudo networksetup -setsearchdomains "$ActiveNetworkName" empty | |
sudo networksetup -setproxybypassdomains "$ActiveNetworkName" empty | |
if [[ ! -z "$2" ]]; then | |
echo "Validating $2 is accessible..." | |
IPUpStatus "$1" | |
if [[ $rc == 1 ]] ; then | |
sudo networksetup -setdnsservers "$ActiveNetworkName" $1 $2 $3 $4 | |
else | |
sudo networksetup -setdnsservers "$ActiveNetworkName" $1 | |
fi | |
else | |
sudo networksetup -setdnsservers "$ActiveNetworkName" $1 | |
fi | |
sudo dscacheutil -flushcache | |
sudo killall -HUP mDNSResponder | |
say "DNS Updated for $ActiveNetworkName" | |
echo "\n DNS Updated" | |
DHCPActive=$(networksetup -getinfo "$ActiveNetworkName" | grep DHCP) | |
dnsserver=$(networksetup -getdnsservers "$ActiveNetworkName" | cut -d/ -f1|tr '\n' ' ') | |
if [[ -z $dnsserver ]]; then | |
if [[ $DHCPActive ]]; then | |
echo " DNS Server: Set With DHCP" | |
else | |
echo " DNS Server: Unknown" | |
fi | |
else | |
echo " DNS Server: $dnsserver" | |
fi | |
else | |
echo "Supplied DNS is not valid, setting DHCP" | |
DHCPDNS | |
fi | |
fi | |
} | |
NetworkInfo () | |
{ | |
# List all Network ports | |
NetworkPorts=$(ifconfig -uv | grep '^[a-z0-9]' | awk -F : '{print $1}') | |
echo "$computername" | |
echo "--------------" | |
echo " Computer OS: $(sh $sFunctionsDirectory/UnixIdentification.sh)" | |
echo " Computer Name: $computername" | |
echo " Current User Name: $(whoami)" | |
echo " Serial Number: $sSerialNumber" | |
if [[ $remoteip ]]; then | |
echo "Remote IP v4 Address: $remoteip\n" | |
else | |
echo "Remote IP v4 Address: Unable To Determine\n" | |
fi | |
echo "Active Network Port(s):" | |
for val in $(echo $NetworkPorts); do # Get for all available hardware ports their status | |
activated=$(ifconfig -uv "$(echo $val)" | grep 'status: ' | awk '{print $2}') | |
# Get VPN Information - Start | |
if [[ ":${NetworkPorts[*]}:" =~ "ppp0" ]]; then | |
VPNActivated=$(ifconfig -uv "ppp0" | grep 'state availability' | grep 'true') | |
if [ ! -z "VPNActivated" ]; then | |
#echo "VPN Active" | |
VPNipaddress=$(ifconfig -uv "ppp0" | grep 'inet' | cut -d ' ' -f2) | |
# VPNipaddressTranslation=$(ifconfig -uv "ppp0" | grep 'inet' | cut -d ' ' -f4) | |
#echo $VPNipaddress | |
fi | |
fi | |
if [[ ":${NetworkPorts[*]}:" =~ "gpd0" ]]; then | |
VPNActivated=$(ifconfig -uv "gpd0" | grep 'state availability' | grep 'true') | |
if [ ! -z "VPNActivated" ]; then | |
#echo "VPN Active" | |
VPNipaddress=$(ifconfig -uv "gpd0" | grep 'inet' | cut -d ' ' -f2 | sed 's/^[ \t]*//;s/[ \t]*$//') | |
#echo $VPNipaddress | |
fi | |
fi | |
# Get VPN Information - Stop | |
if [ "$activated" == "active" ]; then | |
label=$(ifconfig -uv "$(echo $val)" | grep 'type' | awk '{print $2}') | |
# echo $label | |
# ActiveNetwork=$(route get default | grep interface | awk '{print $2}') | |
# ActiveNetworkName=$(networksetup -listallhardwareports | grep -B 1 "$label" | awk '/Hardware Port/{ print }'|cut -d " " -f3- | uniq) | |
# ActiveNetworkName=$(networksetup -listnetworkserviceorder | grep $ActiveNetwork -B1 | head -1 | cut -d ")" -f2 | sed "s/^[ \t]*//") | |
ActiveNetworkName=$(networksetup -listnetworkserviceorder | grep "$val" -B1 | grep -v "$val" | cut -d ')' -f2 | sed 's/^[ ]*//;s/[ ]*$//') | |
#echo $ActiveNetwork | |
#echo $ActiveNetworkName | |
state=$(ifconfig -uv "$val" | grep 'status: ' | awk '{print $2}') | |
#echo $state | |
ipaddress=$(ifconfig -uv "$val" | grep 'inet ' | awk '{print $2}' | cut -d/ -f1|tr '\n' ' ') | |
# echo $ipaddress | |
ipaddressv6=$(ifconfig "$val" | grep inet6 | grep 'scopeid' | cut -d ' ' -f2 | cut -d '%' -f1 | cut -d/ -f1|tr '\n' ' ') | |
netmask=$(ipconfig getpacket "$val" | grep 'subnet_mask (ip):' | awk '{print $3}' | tr -d '[:space:]') | |
#echo $netmask | |
if [[ -z $(ifconfig -uv "$val" | grep 'link rate: ' | awk '{print $3, $4}' | sed 'N;s/\n/ up /' ) ]]; then | |
networkspeed="$(ifconfig -uv "$val" | grep 'link rate: ' | cut -d ':' -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')" | |
else | |
networkspeed="$(ifconfig -uv "$val" | grep 'link rate: ' | awk '{print $3, $4}' | sed 'N;s/\n/ up /' ) down" | |
fi | |
quality=$(ifconfig -uv "$val" | grep 'link quality:' | awk '{print $3, $4}') | |
#echo $quality | |
macaddress=$(ifconfig -uv "$val" | grep 'ether ' | awk '{print $2}') | |
#echo $macaddress | |
macal=$(curl -s "$sExternalMACALService$macaddress" | sed 's/^[ ]*//;s/[ ]*$//') | |
#echo $macal | |
router=$(ipconfig getpacket "$val" | grep 'router (ip_mult):' | sed 's/.*router (ip_mult): {\([^}]*\)}.*/\1/') | |
#echo $router | |
DHCPActive=$(networksetup -getinfo "$ActiveNetworkName" | grep DHCP) | |
#echo $DHCPActive | |
#dnsserver=$(networksetup -getdnsservers "$ActiveNetworkName" | awk '{print $1, $2}' | sed 'N;s/\n//' ) | |
dnsserver=$(networksetup -getdnsservers "$ActiveNetworkName" | cut -d/ -f1|tr '\n' ' ') | |
#echo $dnsserver | |
if [[ ! -z "$netmask" ]]; then | |
if [[ $ipaddress ]]; then | |
# Is this a WiFi associated port? If so, then we want the network name | |
if [ "$label" = "Wi-Fi" ]; then | |
WiFiName=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | grep '\sSSID:' | sed 's/.*: //') | |
#echo $WiFiName | |
echo " Network Name: $WiFiName" | |
fi | |
echo " Interface: $ActiveNetworkName ($val)" | |
echo " MAC Address: $macaddress ($macal)\n" | |
if [[ ! -z "$ipaddressv6" ]]; then | |
echo " IP Address v6: $ipaddressv6" | |
fi | |
echo " IP Address v4: $ipaddress" | |
echo " Subnet Mask: $netmask" | |
echo " Router: $router" | |
echo " IP CIDR: $ipaddress/$(mask2cdr $netmask)\n" | |
echo " Network Speed: $networkspeed" | |
echo " Link quality: $quality" | |
if [ ! -z "$VPNipaddress" ]; then | |
echo " VPN IP Address: $VPNipaddress\n" | |
fi | |
if [[ -z $dnsserver || $DHCPActive == "DHCP Configuration" ]]; then | |
if [[ $DHCPActive ]]; then | |
echo " DNS Server: Set With DHCP" | |
else | |
echo " DNS Server: Unknown" | |
fi | |
else | |
echo " DNS Server: $dnsserver" | |
fi | |
case "$1" in | |
"dhcp") | |
DHCPDNS | |
;; | |
"home") | |
# StaticDNS 10.40.20.3 | |
# StaticDNS 185.228.168.80 185.228.169.80 # IPv4 CleanBrowsing | |
StaticDNS 185.228.168.80 185.228.169.80 2a0d:2a00:1:abab:23b9:93ef:2da9:dd2f 2a0d:2a00:2:abab:23b9:93ef:2da9:dd2f | |
;; | |
"cleanbrowsing") | |
# StaticDNS 185.228.168.80 185.228.169.80 # IPv4 CleanBrowsing | |
StaticDNS 185.228.168.80 185.228.169.80 2a0d:2a00:1:abab:23b9:93ef:2da9:dd2f 2a0d:2a00:2:abab:23b9:93ef:2da9:dd2f | |
;; | |
"opendns") | |
StaticDNS 208.67.222.222 208.67.220.220 | |
;; | |
"google") | |
StaticDNS 8.8.8.8 8.8.4.4 | |
;; | |
*) | |
sConfig="0" | |
;; | |
esac | |
echo "--------------" | |
fi | |
fi | |
fi | |
done | |
} | |
# Functions - Stop | |
# Check Online Status - Start | |
#nc -z 8.8.8.8 53 >/dev/null 2>&1 | |
#online=$? | |
#if [ $online -eq 0 ]; then | |
# echo "Online, continuing...\n" | |
# | |
NetworkInfo $(echo $1 | awk '{print tolower($0)}') | |
# | |
# remoteip=$(dig +short myip.opendns.com @resolver1.opendns.com) | |
# echo "Remote IP: $remoteip" | |
# | |
#else | |
# echo "Sorry you are offline, please connect and try again." | |
# exit | |
#fi | |
# Check Online Status - Stop |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment