[IMPROVED] hexroute - Nuevo utilitario que traduce direcciones IP a formato para dhcpd
This commit is contained in:
parent
821ce472a4
commit
141ed2b0d3
1 changed files with 100 additions and 0 deletions
100
bin/hexroute
Executable file
100
bin/hexroute
Executable file
|
@ -0,0 +1,100 @@
|
|||
#!/bin/bash
|
||||
######################################################################
|
||||
#
|
||||
# hexroute - Convert human readable routes to dhcpd static route info
|
||||
# for Windows(r) clients
|
||||
#
|
||||
# Copyright (c) 2005-2015 Karl McMurdo
|
||||
#
|
||||
# Freely distributable, but please keep header intact
|
||||
#
|
||||
# Update: May 10, 2007 Change Max Quad to 255
|
||||
#
|
||||
######################################################################
|
||||
|
||||
function split_ipaddr() {
|
||||
[ ${1:-X} = X -o "${1}" != ${1//[^.0-9]/} -o ${1:-X} = X \
|
||||
-o "${1//[0-9]/}" != "..." ] && return 1
|
||||
local rval=0
|
||||
local t
|
||||
local T[1]
|
||||
local T[2]
|
||||
local T[3]
|
||||
local T[4]
|
||||
T[1]=${1%%.*}
|
||||
T[2]=${1#*.}
|
||||
T[2]=${T[2]%%.*}
|
||||
T[3]=${1#*.*.}
|
||||
T[3]=${T[3]%%.*}
|
||||
T[4]=${1#*.*.*.}
|
||||
[ ${T[1]} = 0 ] && rval=1
|
||||
for t in 1 2 3 4
|
||||
do
|
||||
[ ${T[${t}]:-999} -gt 255 ] && rval=1
|
||||
eval "${2}[${t}]=${T[${t}]}"
|
||||
done
|
||||
return ${rval}
|
||||
}
|
||||
USAGE='echo -e "Usage: ${0//*\/} [-v|-h] target/bits [gw] gateway [target/bits [gw] gateway ...]\n\n\tie: ${0} 172.16.0.0/16 gw 192.168.1.1\n" && exit 1'
|
||||
INFO="HexRoute 1.0 Copyright (c) 2015 Karl McMurdo
|
||||
|
||||
Converts human readable route information to a dhcpd hex string
|
||||
|
||||
-v Once prints full dhcpd.conf line for route(s)
|
||||
Twice also prints option definiton lines for dhcpd.conf
|
||||
-h Prints this message
|
||||
"
|
||||
DHCPHDR="# New Option Type for Windows Client Static Routes
|
||||
option new-static-routes code 249 = string;"
|
||||
DHCPS="option new-static-routes "
|
||||
DHCPE=";"
|
||||
BADTARG='echo -e "Invalid target network: ${1}" && exit 2'
|
||||
BADBITS='echo -e "Invalid Network bit value: ${1}" && exit 3'
|
||||
BADGW='echo -e "Invalid Gateway: ${2}" && exit 4'
|
||||
VERBOSE=false
|
||||
EXTRAVERBOSE=false
|
||||
|
||||
while [ "${1:0:1}" = "-" ]
|
||||
do
|
||||
if [ "${1}" = "-v" ]
|
||||
then
|
||||
$VERBOSE && EXTRAVERBOSE=true
|
||||
VERBOSE=true
|
||||
elif [ "${1}" = "-h" ]
|
||||
then
|
||||
echo "${INFO}"
|
||||
eval "${USAGE}"
|
||||
else
|
||||
eval "${USAGE}"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
[ ${#} -lt 2 ] && eval "${USAGE}"
|
||||
OUT=""
|
||||
|
||||
while [ ${#} -ge 2 ]
|
||||
do
|
||||
split_ipaddr ${1/\/*/} TARG || eval "${BADTARG}"
|
||||
BITS=${1/*\//}
|
||||
shift
|
||||
[ ${BITS:-X} = X -o "${BITS}" != ${BITS//[^0-9]/} ] && eval "${BADBITS}"
|
||||
[ ${BITS} -gt 32 -o ${BITS} -lt 1 ] && eval "${BADBITS}"
|
||||
[ ${1:-X} = gw ] && shift
|
||||
split_ipaddr ${1:-X} GW || eval "${BADGW}"
|
||||
shift
|
||||
OUT=${OUT}$( printf ":%02x:%02x" ${BITS} ${TARG[1]} )
|
||||
[ ${BITS} -gt 8 ] && OUT=${OUT}$( printf ":%02x" ${TARG[2]} )
|
||||
[ ${BITS} -gt 16 ] && OUT=${OUT}$( printf ":%02x" ${TARG[3]} )
|
||||
[ ${BITS} -gt 24 ] && OUT=${OUT}$( printf ":%02x" ${TARG[4]} )
|
||||
OUT=${OUT}$( printf ":%02x:%02x:%02x:%02x" ${GW[@]} )
|
||||
done
|
||||
|
||||
$EXTRAVERBOSE && echo "${DHCPHDR}"
|
||||
if $VERBOSE
|
||||
then
|
||||
echo ${DHCPS}${OUT/:/}${DHCPE}
|
||||
else
|
||||
echo ${OUT/:/}
|
||||
fi
|
||||
|
Loading…
Reference in a new issue