#!/bin/bash # # Purpose: display or set date from a host via http # # Requires: bash, ping, head, date, grep & sed # Autor: Daniel Lange, http://daniel-lange.com/software/ # License: GPL v3 or later, http://www.gnu.org/licenses/ # # Version: v0.1, 08-10-22, initial release # if [ "$1" = "-h" -o "$1" = "--help" ] ; then echo "$0 v0.1 (c) Daniel Lange, 2008. Released under the GNU GPL v3 or later." echo "Usage: $0 <-d|-s> " echo " -d = display date (default)" echo " -s = set date (may require root privileges)" echo " HOST = FQDN of the server to retrieve the Date: header from" echo " (default: www.google.com)" exit 0 fi if [ "$1" != "-d" -a "$1" != "-s" ] ; then echo "Error: either -d or -s expected as first argument". exit 1 fi if [ "$#" -gt 2 ] ; then echo "Error: too many arguments, use -h for help" exit 2 fi DATE_OPTION="$1" DATE_HOST="${2:-www.google.com}" ping -q -c 1 -w 10 -W 10 $DATE_HOST > /dev/null 2>&1 if [ $? -ne 0 ] ; then echo "Error: Host $DATE_HOST not found (or ping missing)." exit 3 fi exec 3<>/dev/tcp/$DATE_HOST/80 echo -e "GET / HTTP/1.0\n\n">&3 LC_ALL=C LANG=en_EN date --rfc-2822 --utc $DATE_OPTION "$(head <&3 | grep -i "Date: " | sed -e s/Date\:\ //I)" exec 3<&-