Skip to content

Instantly share code, notes, and snippets.

@andrewmackrodt
Last active June 27, 2024 00:15
Show Gist options
  • Save andrewmackrodt/9b67eb8d12d15df1c0b6e478044ee397 to your computer and use it in GitHub Desktop.
Save andrewmackrodt/9b67eb8d12d15df1c0b6e478044ee397 to your computer and use it in GitHub Desktop.
macOS script to toggle between static ip and dhcp using different routers
#!/usr/bin/env bash
set -euo pipefail
inetInterfaceIp=$( \
ifconfig \
| perl -0777 -pe 's/\n+^[ \t]/ /gm' \
| grep 'inet ' \
| grep RUNNING \
| grep -v LOOPBACK \
| sed -nE 's/([a-z0-9]+).* inet ([^ ]+).*/\1 \2/p' \
| grep -vE '\.1$' \
| head -n1
)
inetInterface=$(echo "$inetInterfaceIp" | awk '{ print $1 }')
inetIp=$(echo "$inetInterfaceIp" | awk '{ print $2 }')
networkSetupInterface=$( \
networksetup -listallhardwareports \
| grep -E 'Port:|Device:' \
| sed 's/Hardware /\n/' \
| sed -E 's/[A-Za-z]+: //g' \
| grep . \
| perl -0777 -pe 's/^(.+)\n(.+)/\2 \1/gm' \
| awk '$1 == "'"$inetInterface"'" { print $0 }' \
| sed -E 's/[^ ]+ //'
)
router=${1:-}
if [[ "$router" == "0" ]] || [[ "$router" == "" ]] && [[ "$inetIp" != 192.168.100.* ]]; then
echo "Setting $networkSetupInterface ($inetInterface) DHCP"
networksetup -setdhcp "$networkSetupInterface"
networksetup -setdnsservers "$networkSetupInterface" Empty
else
lastOctet=$(echo "$inetIp" | cut -d. -f4)
if [[ "$router" == "" ]]; then
router="2"
fi
newIp="192.168.$router.$lastOctet"
echo "Setting $networkSetupInterface ($inetInterface) Static IP $newIp"
networksetup -setmanual "$networkSetupInterface" "$newIp" 255.255.255.0 "192.168.$router.1"
networksetup -setdnsservers "$networkSetupInterface" 1.1.1.1 9.9.9.9
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment