Last active
September 6, 2024 11:24
-
-
Save dkittell/34fe7b7422323fba546948b7448933a5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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