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}")"
