From: Ian Kelling Date: Fri, 9 Sep 2016 20:51:54 +0000 (-0700) Subject: add hostmac X-Git-Url: https://iankelling.org/git/?p=small-misc-bash;a=commitdiff_plain;h=52a495c50926a3f93e98dd2d1f9d423bb7ec093f add hostmac --- diff --git a/hostmac b/hostmac new file mode 100755 index 0000000..2402fd4 --- /dev/null +++ b/hostmac @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright (C) 2016 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eE -o pipefail +trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR + +case $1 in + -h|--help) + cat <<'EOF' +Usage: hostmac HOST +Get a host's mac address + +If it's not in ip a, then ping it and look in the arp cache. +EOF + exit 0 + ;; +esac +host=$1 + +ip=$(host $host | sed -rn 's/^\S+ has address //p') + +# first sed joins ip a paragraphs into a single line. +if ip a | sed -r '1{x;d};/^[0-9]/{: p;x;s/\n//g;b};$b p;H;d' \ + | sed -rn "/${ip//./\\.}/{s#^.*link/ether\s(\S+)\s.*#\1#p;q1}"; then + ping -c1 $ip &>/dev/null + arp -n $ip | tail -n+2 | awk '{print $3}' +fi