Script pega IP externo e atualiza arquivo parou de funcionar [RESOLVIDO]

1. Script pega IP externo e atualiza arquivo parou de funcionar [RESOLVIDO]

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 03/09/2018 - 23:46h

Boa noite pessoal.
Tenho um script que o Rai3mb aqui me deu, ele pega o ip externo e atualiza no arquivo vsftpd.conf, na linha pasv_address mas creio que o ifconfig.me mudou algum paramentro que o script parou de funcionar com wget, tentei faze-lo com curl mas não consegui. O que quero é que o script cheque meu ip externo e atualize a linha pasv_address do vsftpd.conf. Segue como ta o script e obrigado desde já quem puder ajudar.

#!/bin/bash
# arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$( egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=$(wget -q -O /tmp/ip ifconfig.me/ip; cat /tmp/ip)
wget -q -O /tmp/ip ifconfig.me/ip
if [ $? != "0" ]
then
export IP_NOVO="0.0.0.0"
else
IP_NOVO=$(cat /tmp/ip)
fi
# a troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/10/2018 - 21:30h

jorgessn escreveu:

Oliver, ve se é isso?

root@ciatec:/home/adm/scripts# bash -x scriptFTP2
+ ARQUIVO_ALVO=$'/etc/vsftpd.conf\r'
++ awk -F= '/pasv_address/ {print $2}' $'/etc/vsftpd.conf\r'
(No such file or directory).conf
+ IP_ANTIGO=$'\r'
++ wget -qO- 'http://ip-api.com/line/?fields=query'
+ IP_NOVO=$'179.222.147.137\r'
scriptFTP2: linha 9: erro de sintaxe: fim prematuro do arquivo
root@ciatec:/home/adm/scripts# ^C
root@ciatec:/home/adm/scripts#

Jorge, boa noite.
Isso mesmo, esse é o "debug".
Note que tem uma "\r" depois do nome do arquivo alvo....
Se não me engano, isso é um retorno de carro....
Por isso não encontra o arquivo.
Testado e Funcionando:

#!/bin/bash

ARQUIVO_ALVO='/etc/vsftpd.conf'
IP_ANTIGO=$(awk -F"=" '/pasv_address/ {print $2}' $ARQUIVO_ALVO)
IP_NOVO=$(wget -qO- http://ip-api.com/line/?fields=query)

mensagem () {
echo -e "IP ${stt} em $ARQUIVO_ALVO\n$(egrep 'pasv_address=([0-9]{1,3}\.){3}[0-9]{1,3}' $ARQUIVO_ALVO)\n"
}

#Se IPNOVO É DIFERENTE do IP_ANTIGO E a var IP_NOVO não é VAZIA, altera o arquivo e reinicia o server.
if [[ $IP_ANTIGO != $IP_NOVO && $IP_NOVO ]];then
sed -i "s/$IP_ANTIGO/$IP_NOVO/" $ARQUIVO_ALVO
wait
stt="Alterado"
mensagem
/etc/init.d/vsftpd restart
else
stt="Não Alterado"
mensagem
fi


Quando resolver, marque o tópico como RESOLVIDO e a MiNHA resposta como a MELHOR....
Assim ganho uns pontinhos . . . Rsrsrsr
Abç.:
Marcelo Oliver

3. Re: Script pega IP externo e atualiza arquivo parou de funcionar [RESOLVIDO]

Bruno Dias
BRVN01

(usa Debian)

Enviado em 04/09/2018 - 08:03h

Amigo bom dia,

Verifiquei que o comando que está utilizando não esta pegando IP exteno, no seu caso o novo IP, entao fiz o seguinte comando usando curl:

curl ifconfig.me/all | grep -Eo '([0-9]+)(.[0-9]+){3}'

Você pode jogar a saida numa variável tambem, com o comando abaixo:
IP_EXTERNO=$(curl ifconfig.me/all | grep -Eo '([0-9]+)(.[0-9]+){3}')

Nesse caso o IP, só vai pegar se for IPv4, caso seja IPv6, tem que mudar a expressão regular, eu não olhei todo o script, mas como não estava pegando ip pelo wget e voce relatou um problema ai, espero que essa solução te ajude.



4. Re: Script pega IP externo e atualiza arquivo parou de funcionar

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 04/09/2018 - 09:41h

Fiz alguns testes aqui e percebi q o site ifconfig.me não está aceitando o User-Agent do wget (403 Forbidden). Nesse caso, basta acrescentar um User-Agent válido (no exemplo abaixo, usei o Firefox do Linux):


$ wget -q -U "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" -O - http://ifconfig.me/ip
200.200.200.200 <= IP Fictício

--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


5. Re: Script pega IP externo e atualiza arquivo parou de funcionar [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/09/2018 - 16:33h

jorgessn escreveu:

Boa noite pessoal.
Tenho um script que o Rai3mb aqui me deu, ele pega o ip externo e atualiza no arquivo vsftpd.conf, na linha pasv_address mas creio que o ifconfig.me mudou algum paramentro que o script parou de funcionar com wget, tentei faze-lo com curl mas não consegui. O que quero é que o script cheque meu ip externo e atualize a linha pasv_address do vsftpd.conf. Segue como ta o script e obrigado desde já quem puder ajudar.

#!/bin/bash
# arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$( egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=$(wget -q -O /tmp/ip ifconfig.me/ip; cat /tmp/ip)
wget -q -O /tmp/ip ifconfig.me/ip
if [ $? != "0" ]
then
export IP_NOVO="0.0.0.0"
else
IP_NOVO=$(cat /tmp/ip)
fi
# a troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart


Boa tarde.
Seguem sugestões:
IP_NOVO=$(wget -qO- http://ip-api.com/line/?fields=query) # Mais Rápido!
Ou
IP_NOVO=IP=$(curl -s ifconfig.me/)




6. Comando curl funcionando, porem, nao esta funcionando o sed pra trocar o ip na linha pasv_address do

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 04/09/2018 - 18:59h

Amigos, obrigado a ajuda de todos. Achei a explicação de MSoliver mais fácil pra mim. O comando curl esta funfando, porem, o comando sed não esta trocando o ip no arquivo vsftpd.conf, segue como esta o script:

#!/bin/bash
# arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$( egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=IP=$(curl -s ifconfig.me/)
if [ $IP_NOVO='[]' ];
then
set $IP_NOVO='7.7.7.0'
fi
# a troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart

Agradeço a todos a ajuda e vão desculpando a burrice que irrita até a mim, rs...




7. Re: Script pega IP externo e atualiza arquivo parou de funcionar

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/09/2018 - 22:27h

jorgessn escreveu:

Amigos, obrigado a ajuda de todos. Achei a explicação de MSoliver mais fácil pra mim. O comando curl esta funfando, porem, o comando sed não esta trocando o ip no arquivo vsftpd.conf, segue como esta o script:

#!/bin/bash
# arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$( egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=IP=$(curl -s ifconfig.me/)
if [ $IP_NOVO='[]' ];
then
set $IP_NOVO='7.7.7.0'
fi
# a troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart

Agradeço a todos a ajuda e vão desculpando a burrice que irrita até a mim, rs...


Boa noite Jorge.
Posta a linha do ARQUIVO_ALVO='/etc/vsftpd.conf', que está o IP_ANTIGO.

Atribuição da variável está errada:
IP_NOVO=IP=$(curl -s ifconfig.me/)

Correção:
IP_NOVO=$(curl -s ifconfig.me/)

Teste corrigido:
if [ $IP_NOVO = '' ];
then
set $IP_NOVO='7.7.7.0'
fi

Melhorado:
[ ! $IP_NOVO ] && IP_NOVO='7.7.7.0'

Melhorado:
IP_ANTIGO=$(awk -F"=" '/pasv_address/ {print $2}' $ARQUIVO_ALVO)

marcelo



8. Script quase funcionando mas sed não ta trocando dentro do arquivo vsftpd

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 09/09/2018 - 22:26h

Marcelo, obrigado pela ajuda, o script ta quase funcionando porem ainda não troca a linha pasv_address do arquivo /etc/vsftpd, segue como ficou :

#!/bin/bash
# arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$( egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=$(curl -s ifconfig.me > /tmp/ip)
curl -s ifconfig.me
if [ $? != "0" ]
then
export IP_NOVO="7.7.7.0"
else
IP_NOVO=$(cat /tmp/ip)
fi
# a troca do ip antigo pelo novo
#até aqui tudo funciona, porém a linha de baixo, a mais importante, que coloca o ip no arquivo vsftpd não funciona
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO

Obrigado a todos a ajuda!



9. Re: Script pega IP externo e atualiza arquivo parou de funcionar

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/09/2018 - 23:13h

Execute o script em "modo debug" e verifique o erro....
é só colocar "set -x" sem as aspas na segunda linha do script.
Te passei varias melhorias para o script na postagem anterior . . . .
Tem ERROS no seu SCRIPT!
Marcelo



10. Quase certo só mais alguma coisinha MSOLIVER

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 26/09/2018 - 22:58h

MSOLIVER, suas dicas foram de grande valia, segue a depuração do script:

# bash -x scriptFTP2


#!/bin/bash
#Arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$(egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=$(wget -qO /tmp/ip - http://ip-api.com/line/?fields=query)">http://ip-api.com/line/?fields=query)
wget -qO- http://ip-api.com/line/?fields=query
if [ $? != "0" ]
then
export IP_NOVO="0.0.0.0"
else
IP_NOVO=$(cat /tmp/ip)
fi
# A troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart

Agradeco mais uma vez a ajuda!


11. Re: Script pega IP externo e atualiza arquivo parou de funcionar

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/09/2018 - 18:36h

jorgessn escreveu:

MSOLIVER, suas dicas foram de grande valia, segue a depuração do script:

# bash -x scriptFTP2


#!/bin/bash
#Arquivo de configuração a ser alterado
ARQUIVO_ALVO='/etc/vsftpd.conf'
# estou buscando o ip antigo baseado na linha que inicia com 'pasv_address'
IP_ANTIGO=$(egrep -i 'pasv_address' $ARQUIVO_ALVO | egrep -o '[0-9].*[0-9]' )
# o novo ip (seu ip externo/ usado pelo no-ip):
IP_NOVO=$(wget -qO /tmp/ip - http://ip-api.com/line/?fields=query)">http://ip-api.com/line/?fields=query)
wget -qO- http://ip-api.com/line/?fields=query
if [ $? != "0" ]
then
export IP_NOVO="0.0.0.0"
else
IP_NOVO=$(cat /tmp/ip)
fi
# A troca do ip antigo pelo novo
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart

Agradeco mais uma vez a ajuda!


Boa noite Jorge.
Primeiramente, o que voce postou não é o debug....
E,
Nós|K|Nós
Seu Script está muito estranho....
Não é necessário gravar o IP_NOVO em um arquivo, salve-o na variável....
wget -qO- http://ip-api.com/line/?fields=query # Não entendi a repetição do comando....

Seguem alterações....
#!/bin/bash 
ARQUIVO_ALVO='/etc/vsftpd.conf'
IP_ANTIGO=$(awk -F"=" '/pasv_address/ {print $2}' $ARQUIVO_ALVO)
IP_NOVO=$(wget -qO- http://ip-api.com/line/?fields=query)">http://ip-api.com/line/?fields=query)
[ ! $IP_NOVO ] && IP_NOVO="0.0.0.0"
sed -i "s/$IP_ANTIGO/$IP_NOVO/g" $ARQUIVO_ALVO
/etc/init.d/vsftpd restart

Marcelo oliver


12. Retorno de Carro, arquivo não encontrado (resolvido com a ajuda do MSOLIVER)

Jorge Santos
jorgessn

(usa Ubuntu)

Enviado em 14/10/2018 - 21:05h

Oliver, obrigado pela informação amigo. Desculpe a demora, só vim entrar no pc hoje desde o ultimo post. Verao chegando, o Suco 24h esta uma loucura. Eu nunca estudei programação, ainda mais em Shell, sou burro mesmo no assunto, mas vc disse que funcionava, então pesquisei sobre esse retorno de carro que falou do cursor e tal, porque o script continuou com o mesmo erro, ai decidi estudar já que vc disse que funcionava, descobri que foi um erro de codificação de tabela de caracteres entre sistemas linux e Windows, resolvi com o dos2unix e realmente você estava certo, você conseguiu resolver o meu problema. Gratidão eterna amigo!

Amigo, muito obrigado! Vou rezar hoje pra voce, pedir que Jesus te ilumine pra que continue nesse caminho de luz ensinando os outros aqui no Forum.

Obrigado mais uma vez, Jesus te ilumine!



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts