60 lines
1.9 KiB
Bash
Executable File
60 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# get2_dhclient.sh - Bash Bunny extension to change from a DHCP server to a client.
|
|
# This is needed when connected to macOS/OSX with Internet Sharing because
|
|
# the host is the DHCP server and the Bash Bunny is the DHCP client.
|
|
#
|
|
# It also replaces the standard GET function so that TARGET_IP, TARGET_HOSTNAME
|
|
# and HOST_IP work properly without having to modify the standard version. It
|
|
# renames and uses the standard version for any other environment variables.
|
|
#
|
|
# Note that this must be sourced after get.sh so it is named "get2_dhclient.sh"
|
|
# on the assumption that they are sourced in order by filename.
|
|
#
|
|
# This is free software released under the terms of the GPLv2+
|
|
#
|
|
# 20190321 raf <raf@raf.org>
|
|
|
|
function DHCLIENT() {
|
|
|
|
# Do nothing if GET isn't defined (get.sh hasn't been sourced yet)
|
|
[ $(declare -f GET | /usr/bin/wc -l) = 0 ] && return
|
|
|
|
# Do nothing if we've already done it
|
|
[ $(declare -f orig_GET | /usr/bin/wc -l) != 0 ] && return
|
|
|
|
# Stop the DHCP server if it is running
|
|
/bin/systemctl status isc-dhcp-server && /bin/systemctl stop isc-dhcp-server
|
|
|
|
# Bring down the usb0 network interface
|
|
/sbin/ifdown usb0
|
|
|
|
# Bring it up again as a DHCP client
|
|
/sbin/dhclient usb0
|
|
|
|
# Rename the standard GET function before we replace it
|
|
eval "$(echo "orig_GET()"; declare -f GET | tail -n +2)"
|
|
export -f orig_GET
|
|
|
|
# Replace GET so that TARGET_IP, TARGET_HOSTNAME and HOST_IP work
|
|
function GET() {
|
|
case "$1" in
|
|
"TARGET_IP")
|
|
export TARGET_IP=$(awk '/option routers/ { tip = substr($3, 1, length($3)-1) } END { print tip }' /var/lib/dhcp/dhclient.leases)
|
|
;;
|
|
"TARGET_HOSTNAME")
|
|
export TARGET_HOSTNAME=$(awk '/server-name/ { thn = substr($2, 2, length($2)-3) } END { print thn }' /var/lib/dhcp/dhclient.leases)
|
|
;;
|
|
"HOST_IP")
|
|
export HOST_IP=$(awk '/fixed-address/ { hip = substr($2, 1, length($2)-1) } END { print hip }' /var/lib/dhcp/dhclient.leases)
|
|
;;
|
|
*)
|
|
orig_GET "$1"
|
|
;;
|
|
esac
|
|
}
|
|
}
|
|
|
|
export -f DHCLIENT
|
|
|