De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Anderson J. de Souza
Data de Publicação: 05 de Abril de 2007
Este script define automaticamente as rotas para as redes de uma operador como embratel, brasiltelecom, gvt ou outras,...
Apenas se vc utiliza dois links de operadoras diferentes.
#!/bin/sh
#
# Agentroute
# Mini agente de configuração de rotas
#
# Captura as os ips das placas de rede e define as rotas para as operadoras (brt,gvt,...) conforme for melhor
#
# Por Anderson J. de Souza ( 14/02/07 )
# anjoel.s@gmail.com
# +55 (54) 9115.13.15
#
WHOIS="whois"
GREP="grep"
AWK="awk"
IFCONFIG="ifconfig"
PIDFILE="/var/run/agentroute.pid"
TIMECHECK=360; # fazer rechecagem a cada n minutos (360=6horas)
GATEWAYS="10.1.1.1 200.xxx.xxx.xxx 192.168.1.1" # gateways, favor informar todos
#####################################
## Não alterar apartir deste ponto ##
#####################################
###########################
## Dont change from here ##
###########################
COUNTRY="BR"
ERautnum='^aut-num:[[:space:]]+AS[0-9]+$'
ERinetnum='^inetnum:[[:space:]]+[0-9][0-9./]+[0-9]$'
ERinet='^[[:space:]]+inet[[:space:]][0-9][0-9.]+[0-9].*$'
ERnetInvalid='^(10|127|192[.]168)[.].*$';
getForeignIP() {
fetch -q -o /dev/stdout http://www.whatismyip.com | grep '<TITLE>' | grep -oE '([0-9]{1,3}[.]){3}[0-9]{1,3}';
}
doHelp() {
f=`basename $0`;
echo "
Agente de descoberta de rotas da operadora para definilas pelo melhor gateway.
$f Faz leitura das redes da operadora e insere elas na tabela de roteamento.
$f makeRoutes Mesmo acima.
$f start Inicia o programa como um daemon dele mesmo para parar use stop.
$f stop Para o programa iniciado com start.
$f loop Inicia o programa como um daemon em foreground.
$f cleanpid Apaga arquivo de pid que nao eh apagado no modo loop.
OBS.: Este agente deve ser usado com dois links de operadoras diverentes.
OBS.: Este agente nao remove rotas colocadas.
Por Anderson J. de Souza 14/02/2007
anjoel.s@gmail.com
+55 (54) 9115.13.15
"
}
getIPs() {
${IFCONFIG} | ${GREP} -E ${ERinet} | ${AWK} '{print $2}' | ${GREP} -Ev ${ERnetInvalid};
return $?;
}
checkIP() {
# deveria capturar o coutry,... mas nao funciona em todos os casos
${WHOIS} $1 | ${GREP} -E ${ERautnum} | ${AWK} '{print $2}'
return $?;
}
getASNets() {
${WHOIS} -c $1 $2 | ${GREP} -E ${ERinetnum} | ${AWK} '{print $2}'
return $?;
}
netsToIP() {
AS=`checkIP $1`
[ $? ] || exit $?;
getASNets ${COUNTRY} ${AS}
return $?
}
setRoute() {
route add ${1} ${2}
}
rmRoute() {
route delete ${1}
}
setParenNets() {
NETS=`netsToIP $1`;
for n in ${NETS} ; do
setRoute ${n} ${1}
done;
}
setParentNetsForGateWays() {
nets=`host www.whatismyip.com | cut -d' ' -f4`
default=`netstat -rn | grep -E '^default[[:space:]]+.*$' | awk '{print $2}'`
for gw in ${GATEWAYS} ; do
ping -Q -m 1 -o -c 1 ${gw} > /dev/null # garante que tem o arp do gw
[ ${gw} != ${default} ] && # se nao for o gw default
[ arp ${gw} > /dev/null ] && # se o gw existe e esta na mesma rede
{
for n in $nets ; do
setRoute $n ${gw};
done;
ForeignIP=`getForeignIP`
for n in $nets ; do
rmRoute $n;
done;
NETS=`netsToIP ${ForeignIP}`;
for n in ${NETS} ; do
setRoute ${n} ${gw}
done;
sleep 10;
} done;
}
makeRoutes() {
setParentNetsForGateWays;
}
makeLoop() {
echo "makeLoop $$"
[ ${TIMECHECK} -lt 10 ] && TIMECHECK=360;
sleep 10;
time=${TIMECHECK};
time=$(( ${time} * 60 ));
[ -f ${PIDFILE} ] || echo $$ > ${PIDFILE};
while [ -f ${PIDFILE} ] && [ "`cut -d' ' -f1 ${PIDFILE}`" = "$$" ] ; do
echo "makeLoop while $$"
makeRoutes;
sleep ${time};
done;
}
cleanPid() {
rm -f ${PIDFILE};
}
## Execução do programa
case ${1} in
[sS][tT][aA][rR][tT])
[ -f ${PIDFILE} ] || {
makeLoop &
echo "$$ $!" >> ${PIDFILE};
sleep 1;
}
;;
[sS][tT][oO][pP])
[ -f ${PIDFILE} ] && {
kill `cut -d' ' -f2 ${PIDFILE}`;
sleep 2;
cleanPid;
}
;;
[rR][eE][sS][tT][aA][rR][tT])
$0 stop;
$0 start;
;;
[lL][oO][oO][pP])
makeLoop;
;;
cleanpid)
cleanPid;
;;
makeRoutes)
makeRoutes;
;;
-[hH])
doHelp;
;;
*)
makeRoutes;
;;
esac
exit 0;
Por Anderson J. de Souza ( 14/02/07 )
anjoel.s@gmail.com
+55 (54) 9115.13.15