This does not work, because the bourne shell does not support handling null bytes. Bastards.
sh <<"EOF" hostname="${1:-akisha}" # Strip out comments arptab() { tab="$(printf "\t")" sed -e 's/#.*$//g; s/'"${tab}"'/ /g; /^ *$/d' arptab } host_to_mac() { host="${1}" line="$(arptab | grep -i "${host}" | head -n 1)" mac="${line%% *}" echo "${mac}" | tr 'a-f' 'A-F' } hex_to_oct() { hex="$(echo "${1}" | tr 'a-f' 'A-F')" echo "ibase=16; obase=8; ${hex}" | bc } hex_to_byte() { oct="$(hex_to_oct "${1}")" printf ' ' | tr ' ' "\\${oct}" } mac_to_bytes() { for octet in $(printf "${1}" | tr ":" " ") do hex_to_byte "${octet}" done } packet() { mac="${1}" packet="FF:FF:FF:FF:FF:FF" packet="${packet}:${mac}:${mac}:${mac}:${mac}" packet="${packet}:${mac}:${mac}:${mac}:${mac}" packet="${packet}:${mac}:${mac}:${mac}:${mac}" packet="${packet}:${mac}:${mac}:${mac}:${mac}" mac_to_bytes "${packet}" } printf "$(packet "$(host_to_mac "${hostname}")")" | nc -vvbu 172.16.44.255 1 EOF sh <<"EOF" i=0 while [ $i -lt 256 ] do oct="$(echo "obase=8; ${i}" | bc)" printf ' ' | tr ' ' "\\${oct}" i=$(( $i + 1 )) done | hd EOF mac="$(host_to_mac "${1}")"