Ajuda formatar saída. [RESOLVIDO]

13. Re: Ajuda formatar saída. [RESOLVIDO]

Luis Eduardo Vilella
luivilella

(usa Debian)

Enviado em 27/06/2012 - 11:56h

@./.ronin,
Eu não sabia dessas funções heheh são muito TOP.
Partindo do exemplo que você repassou eu dei mais uma mexida para tirar aquele monte de arquivos.


function _procedimentosIniciais(){
rm -rf /etc/scripts/aux/
mkdir /etc/scripts/aux/
cp /etc/dhcp/dhcpd.conf /etc/scripts/aux/dhcpd.conf
arquivoEntrada="/etc/scripts/aux/dhcpd.conf"
arquivoSaidaREGRAS="/etc/scripts/aux/arqREGRAS"
}

function _definicaoDeRegras(){
_INICIO_REGRA='iptables -A INPUT -s'
_ACCEPT_FIM_REGRA='-j ACCEPT'
_REJECT_FIM_REGRA='-j REJECT'
}

function _getSubnet(){
delimitador='subnet'
grep -e $delimitador $arquivoEntrada |
sed "s/$delimitador/_/g" |
cut -d '_' -f2 |
sed 's/ /_/g' |
cut -d '_' -f2
}

function _getMaskSubnet(){
delimitador='netmask'
grep -e $delimitador $arquivoEntrada |
sed "s/$delimitador/_/g" |
cut -d '_' -f2 |
sed 's/ /_/g' |
cut -d '_' -f2
}

function _getIpList(){
delimitador='fixed-address'
grep -e $delimitador $arquivoEntrada |
sed "s/$delimitador/_/g" |
sed 's/;/_/g' |
cut -d '_' -f2 |
sed 's/ //g'
}

function _getRejectList(){
paste -d '/' $( _getSubnet ) $( _getMaskSubnet )
}

function _getAcceptRules(){
for _ip_range in $( _getIpList )
do
echo "${_INICIO_REGRA} ${_ip_range} ${_ACCEPT_FIM_REGRA}"
done
}

function _getRejectRules(){
unset _ip_range
for _ip_range in $( _getRejectList )
do
echo "${_INICIO_REGRA} ${_ip_range} ${_REJECT_FIM_REGRA}"
done
}

function _finalizaVariaveis(){
unset arquivoEntrada
unset arquivoSaidaREGRAS
unset delimitador
unset _ip_range
unset _INICIO_REGRA
unset _ACCEPT_FIM_REGRA
unset _REJECT_FIM_REGRA
}

function _executar(){
_procedimentosIniciais
_definicaoDeRegras
_getAcceptRules >> $arquivoSaidaREGRAS
_getRejectRules >> $arquivoSaidaREGRAS
chmod +x $arquivoSaidaREGRAS
#$arquivoSaidaREGRAS
cat $arquivoSaidaREGRAS
_finalizaVariaveis
}
_executar


Porem este código ainda tem um problema, como eu faço para juntar duas listas que não são arquivos??
Pois acho que o paste só funciona com arquivos.
Pensei sei como fazer em programação simples.. mais em shell preciso de ajuda, tipo fazer algo do tipo
-->> for until _getSubnet equal fim and _getMaskSubnet equal fim algo assim.

function _getRejectList(){
paste -d '/' $( _getSubnet ) $( _getMaskSubnet )
}


Outra questão.. não manjo de linux, você sabe como eu posso arrumar o bug que está cortando os caracteres?


  


14. Re: Ajuda formatar saída. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/06/2012 - 00:00h


function _getRejectList()
{
echo $(_setSubnet) $(_setMaskSubnet)
}



15. Re: Ajuda formatar saída. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/06/2012 - 00:22h


#!/bin/bash
# package http://sekysu.blogspot.com
#
# Makes iptables rules usings the /etc/dhcp/dhcp.conf file
# file MkIptblFromDhcpConf.sh
#
# charset UTF-8
# endofline Linux
# since 2012-26-06 23:58 (GMT -03:00)
# license GPL v2.0
#
# system GNU bash, version 3.1.17(2)-release i486 slackware 12.2
# autor Paulo Riceli (./.ronin) [ http://sekysu.blogspot.com ]
# autor http://www.vivaolinux.com.br/perfil/verPerfil.php?login=luivilella
# more http://sekysu.blogspot.com

typeset -r _INPUT_ARQ='/etc/dhcp/dhcpd.conf'
typeset -r _RULES='/tmp/rules.sh'
typeset -r _START_RULE='iptables -A INPUT -s'
typeset -r _ACCEPT_END_RULE='-j ACCEPT'
typeset -r _REJECT_END_RULE='-j REJECT'

function _getSubnet()
{
_DELIM='subnet'
grep -e ${_DELIM} ${_INPUT_ARQ} |
sed "s/${_DELIM}/_/g" |
cut -d '_' -f2 |
sed 's/ /_/g' |
cut -d '_' -f2
}

function _getMaskSubnet()
{
_DELIM='netmask'
grep -e ${_DELIM} ${_INPUT_ARQ} |
sed "s/${_DELIM}/_/g" |
cut -d '_' -f2 |
sed 's/ /_/g' |
cut -d '_' -f2
}

function _getIp()
{
_DELIM='fixed-address'
grep -e ${_DELIM} ${_INPUT_ARQ} |
sed "s/${_DELIM}/_/g" |
sed 's/;/_/g' |
cut -d '_' -f2 |
sed 's/ //g'
}

function _getRejectList()
{
echo "$(_getSubnet) $(_getMaskSubnet)"
}

function _getAcceptRules()
{
for _IP_RANGE in $(_getIp)
do
echo "${_START_RULE} ${_IP_RANGE} ${_ACCEPT_END_RULE}"
done
}

function _getRejectRules()
{
unset _IP_RANGE
for _IP_RANGE in $( _getRejectList )
do
echo "${_START_RULE} ${_IP_RANGE} ${_REJECT_END_RULE}"
done
}

function _execute()
{
_getAcceptRules > ${_RULES}
_getRejectRules >> ${_RULES}
echo -e "\n $0 \n The rules list from \n ${_RULES}\n"
cat ${_RULES}
}

function _main()
{
if [ -e ${_INPUT_ARQ} ]
then
_execute
else
echo -e "$0::Input error \nThe file ${_INPUT_ARQ} not exists"
exit 1
fi
}

_main &&
exit 0



16. Re: Ajuda formatar saída. [RESOLVIDO]

Luis Eduardo Vilella
luivilella

(usa Debian)

Enviado em 28/06/2012 - 11:56h

Testei aqui porem a parte do rejectList esta errada;
Fiz uma alteração para colocar ip/mask lado a lado mais achei que ficou meio feio heheh.. to estou procurando aqui se eu consigo colocar a _getMaskSubnet direto em um array sem ser linha a linha..

_INDICE=0
for _CONTEUDO in $(_getMaskSubnet)
do
_MASK[${_INDICE}]=${_CONTEUDO}
_INDICE=`echo "(${_INDICE} + 1)" | bc`
done
unset _CONTEUDO

_INDICE=0
for _CONTEUDO in $(_getSubnet)
do
_SUBNET[${_INDICE}]=${_CONTEUDO}
_INDICE=`echo "(${_INDICE} + 1)" | bc`
done
unset _CONTEUDO

for ((i=0; i < ${_INDICE} ; i++))
do
echo -e "\n${_SUBNET[${i}]}/${_MASK[${i}]}"
# echo -e "\n${_SUBNET[${i}]}/${_MASK[${i}]}" >> teste
done
unset _INDICE
unset i







17. Re: Ajuda formatar saída. [RESOLVIDO]

Luis Eduardo Vilella
luivilella

(usa Debian)

Enviado em 28/06/2012 - 13:10h

Outra coisa ainda naquela ideia de converter a mascara fiz o seguinte:


function _changeMask()
{
case "`echo ${_MASK[${_INDICE}]} | sed 's/ //g' | sed 's/.//g'`" in
"`echo "128.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='1';;
"`echo "192.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='2';;
"`echo "224.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='3';;
"`echo "240.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='4';;
"`echo "248.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='5';;
"`echo "252.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='6';;
"`echo "254.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='7';;
"`echo "255.0.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='8';;
"`echo "255.128.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='9';;
"`echo "255.192.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='10';;
"`echo "255.224.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='11';;
"`echo "255.240.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='12';;
"`echo "255.248.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='13';;
"`echo "255.252.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='14';;
"`echo "255.254.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='15';;
"`echo "255.255.0.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='16';;
"`echo "255.255.128.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='17';;
"`echo "255.255.192.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='18';;
"`echo "255.255.224.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='19';;
"`echo "255.255.240.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='20';;
"`echo "255.255.248.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='21';;
"`echo "255.255.252.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='22';;
"`echo "255.255.254.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='23';;
"`echo "255.255.255.0" | sed 's/.//g'`" )
_MASK[${_INDICE}]='24';;
"`echo "255.255.255.128" | sed 's/.//g'`" )
_MASK[${_INDICE}]='25';;
"`echo "255.255.255.192" | sed 's/.//g'`" )
_MASK[${_INDICE}]='26';;
"`echo "255.255.255.224" | sed 's/.//g'`" )
_MASK[${_INDICE}]='27';;
"`echo "255.255.255.240" | sed 's/.//g'`" )
_MASK[${_INDICE}]='28';;
"`echo "255.255.255.248" | sed 's/.//g'`" )
_MASK[${_INDICE}]='29';;
"`echo "255.255.255.252" | sed 's/.//g'`" )
_MASK[${_INDICE}]='30';;
"`echo "255.255.255.254" | sed 's/.//g'`" )
_MASK[${_INDICE}]='31';;
* );;
esac


hahah claro que não é a melhor maneira de converter mais funcione hehe, melhor devia funcionar porem não sei porque ele sempre cai no primeiro case sendo que estou testando com a mask 255.255.255.0.

Não sei oque estou errando.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts