#  > Desenvolvimento >  > Linguagens de Programação >  >  Script para Pegar IP, Enviar e-mail e escrever no pptp.conf

## Skill

Pessoal,

Mandei uma mensagem a um tempo atras e consegui com a juda do marcos amorim um comando para pegar ip
ifconfig ethX |grep inet| cut -d : -f 2 | cut -d B -f 1
ifconfig pppX |grep inet| cut -d : -f 2 | cut -d B -f 1
ele me retorna o IP, isso jah foi um gande avanço, como eu faço agora para que jah de posse deste IP , inserir a informaçaão do IP no corpo de um email para que seja enviado para mim.
Outra Dúvida é tenho uma VPN com PPTP, como fazer tb com que este script que pega o ip e envia ele para mim, escreva também no arquivo pptp.conf , nos itens remote ip e no listen.

Isso é possivel ?

[]s
Skill

----------


## Benzatti

var=`ifconfig ethX | cut -d : -f2 | cut -d B -f1 `
echo $var >> tmp
mail [email protected] < tmp

No arquivo tmp, vc pode deixar outras coisas escritas e no final sera adicionado o ip encontrado. Esse arquivo texto sera enviado por mail pra vc.

----------------------------------------------------------------------------------

A segunda duvida, pra eu responder ao certo, preciso saber como eh esse arquivo certinho...manda a parte onde vc tem q inserir o ip que ai eu resolvo certinho pra vc

falows

----------


## Benzatti

Se o arquivo pptp.conf for do tipo:

cat pptp.conf

dados
remote ip
dados
listen 
...

Ai vc pode fazer assim:

sed s/"remote ip"/"remote ip $var"/ pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf
sed s/"listen"/"listen $var"/ pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf 

...lembrando q esse script eh continuacao do anterior.

----------


## demiurgo

ooopa!!! essa dica éh boa!!!!


benzatti, dependendo da posicao no arquivo q vc vai colocar o ip o script muda?

como seria p/ colocar no meio d uma sintaxe no /etc/rc.local por exemplo:

/usr/sbin/ciped-cb device=cipcb0 me=<<aqui vai o script com o ip>> peer=xxxxx e por ae vai...

espero q seja possivel, pois tbm vai me quebrar um galhao tbm

valeu!

----------


## Benzatti

Entao demiurgo...

...o comando sed ali no seu caso tem q fazer o seguinte...
...sed s/"substitui isso"/"por isso"/ rc.local ......nas linhas onde tiver "substitui isso"...
...so que esse comando apenas joga na tela a saida...pra alterar o arquivo
vc precisa redirecionar essa saida pra um arquivo temporario e depois gravar por
cima do arquivo original...eu faço assim pelo menos.
Espero que seja isso que vc tenha perguntado...
...qq coisa pergunta de novo exatamente o que vc quer fazer q ai fica mais facil ...

[ ] &acute;s

----------


## demiurgo

blz...

o q eu quero fazer eh substituir aquela parte q eu postei antes no rc.local

/usr/sbin/ciped-cb device=cipcb0 me=<<aqui vai o script com o ip>> peer...
||
aqui vai ficar o IP

blz, éh no meio d uma linha no rc.local

valeu pela ajuda kra

t+

----------


## Benzatti

Acho que é isso cara...

var=`ifconfig ethX | grep inet | cut -d : -f2 | cut -d B -f1` 
sed s/"/usr/sbin/ciped-cb device=cipcb0 me= peer=xxx ..."/"/usr/sbin/ciped-cb device=cipcb0 me=$var per=xxx..."/ rc.local > tmp
cat tmp > rc.local

Onde eu coloquei tres pontos vc substitui pelo que falta pra completar o que ta escrito na linha.

[ ] &acute;s

----------

fiz este script da forma recomendada mais recebo umas mensagens quando executo o script

sed: -e expression #1, char 36: Unterminated `s&acute; command
sed: -e expression #1, char 32: Unterminated `s&acute; command

o Script ta assim

var=`ifconfig eth0 | grep inet | cut -d : -f2 | cut -d B -f1` 
echo $var >> tmp 
mail [email protected] < tmp 
sed s/"remoteip"/"remoteip $var"/ pptpd.conf > pptpd.conf~ 
cat pptpd.conf~ > pptpd.conf 
sed s/"listen"/"listen $var"/ pptpd.conf > pptpd.conf~ 
cat pptpd.conf~ > pptpd.conf


o meu pptpd esta assim

remoteip 200.x.x.x
listen 200.x.x.x

e quando executo o script ele fica em branco.
outra coisa e que na primeira linha deste script 
var=`ifconfig eth0 | grep inet | cut -d : -f2 | cut -d B -f1` 

me devolve o ip 200.x.x.x fe80 (tem como tirar este fe80 ? porque se ele entrar no pptpd.conf acho que vai dar errado.

[]´s
Skill

----------


## mistymst

Eh acontece isso ai mesmo <IMG SRC="images/forum/icons/icon_frown.gif"> uma vez eu fui usar o sed eh picas... me ferrei hehe deu esse problema <IMG SRC="images/forum/icons/icon_smile.gif"> eu entao eu usei o vi para ajeitar isso usando

:s/substuir/peloque/g

mas como eh script tem que usar o sed e nada <IMG SRC="images/forum/icons/icon_frown.gif"> se alguem resolver isso blza

----------


## Benzatti

Quando eu uso por exemplo, o comando que vc colocou lá no seu script:

sed s/"listen"/"listen $var"/ pptp.conf > pptp.conf~

funciona certinho, dá uma olhada se vc nao tá colocando espaço em algum lugar errado.

Se aparecer sempre fe80, isso aqui resolve o problema pra tirar ele
var=`ifconfig eth0 | grep inet | cut -d : -f2 | cut -d B -f1 | tr fe80 " "`

----------

Bom vamos lá.


chequei linha por linha, nao tem espaço a mais, nenhuma virgula for do lugar

nesta nova linha, com a parte do fe80, e o que occore agora e que o IP vem sem o fe80 o que é otimo, so que o ip agora vem assim

2.253.142.16 -> e seria 200.243.122.16

var=`ifconfig eth0 | grep inet | cut -d : -f2 | cut -d B -f1 | tr fe80 " "`
echo $var >> tmp 
mail [email protected] < tmp
até aqui funciona

quando entra aqui

sed s/"remoteip"/"remoteip $var"/ pptpd.conf > pptpd.conf~ 
cat pptpd.conf~ > pptpd.conf
sed: -e expression #1, char 36: Unterminated `s&acute; command
sed s/"listen"/"listen $var"/ pptpd.conf > pptpd.conf~
sed: -e expression #1, char 32: Unterminated `s&acute; command

se fosse possivel entrar em contato comigo pelo msn ou pelo icq eu agradeceria icq 104363444 / 33841225 - > msn: [email protected]


[]´s
Skill

----------


## Benzatti

O lance do sed é o seguinte, dependendo da versao pode ser que nao funcione. No seu caso acho que a seguinte maneira vai funcionar:

sed "s/listen/listen $ip/" pptp.conf > pptp.conf~ 

ou

sed "s/\"listen\"/\"listen $ip\"/" pptp.conf > pptp.conf~

Agora a parte de pegar o ip, eu precisaria ver a saida exata do comando ifconfig, para que eu pudesse isolar a saida que vc precisa.

----------

ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:04:75:CD:ED:FE
inet addr:200.xxx.xxx.x50 Bcast:200.xxx.xx.x51 Mask:255.255.255.252
inet6 addr: fe80::204:75ff:fecd:edfe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:254507 errors:0 dropped:0 overruns:0 frame:0
TX packets:235986 errors:0 dropped:0 overruns:0 carrier:4
collisions:18 txqueuelen:100
RX bytes:194955935 (185.9 Mb) TX bytes:35263604 (33.6 Mb)
Interrupt:10 Base address:0xde00

eu preciso apenas no inet addr " 200.xxx.xxx.x50 " só o ip mesmo

e isnserir nnos campos marcados com # comentário #

no pptpd.conf fica assim


speed 115000
option /etc/ppp/options.ptpd
debug
localip 200.xxx.xxx.xxx # precisco mudar o ip aqui #
remoteip 192.168.100-120
listen 200.xxx.xxx.xxx # precisco mudar o ip aqui #

[]´s
Fabio

----------


## Benzatti

#aqui vc pega o ip
var_ip=`ifconfig eth0 | grep Mask | awk &acute;{print $2}&acute; | cut -f2 -d":" `

#aqui vc modifica o arquivo
sed "s/listen/listen $var_ip/" pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf
sed "s/localip/localip $var_ip/" pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf

#ou pode tentar modificar assim, caso o metodo anterior tb nao funcione
sed "s/\"listen\"/\"listen $var_ip\"/" pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf
sed "s/\"localip\"/\"localip $var_ip\"/" pptp.conf > pptp.conf~
cat pptp.conf~ > pptp.conf

[ ] &acute;s

----------

Ola pessoal, bom estou com um problema tentei fazer uns testes com este script mas quando eu uso echo $var ao inves dele mostrar o ip ele mostra exatamente o que ta escrito no var= 

e agora ?
uso Slack 9 <IMG SRC="images/forum/icons/icon_eek.gif">

----------


## RafaelMonteiro

Bom essa mensagem ai em riba eh minha.

----------


## marcosmamorim

tente colocar ´$var´ para ver se vai funcionar...



Marcos Amorim

----------


## Benzatti

O que acontece Rafalel, é que quando vc executa um script, automaticamente ele é executado em um shell a parte. Logo, apos a execução do script, se vc tentar ver o conteudo de uma variavel, vc verá o conteudo dessa variavel no shell atual. 
Para testar o valor contido nela, coloque no proprio script um comando para sair o valor da variavel. Ex: echo $var (dentro do script)

Obs: Para executar o script do shell atual, vc pode usar o comando "source"
[ ] &acute; s

----------

Ae valeu pela força que ta me dando, ta fucionando quase 100%

o meu problema agora e o seguinte como o arquivo fica assim

localip 200.xxx.xxx.xx1

quando ele roda o scrip ele ta ficando 
localip 200.xxx.xxx.xx1 200.xxx.xxx.xx2

ai se eu rodar novamente o script ele fica
localip 200.xxx.xxx.xx1 200.xxx.xxx.xx2 200.xxx.xxx.xx3

eu precisaria que ele apagasse o que vem depois do espaço antes de inserir o outro ou sobscrever o que jah existe tem como fazer??


[]´s
Fabio

----------

Opan uma errata em uma colocação minha ele está inserindo certo 

localip ipnovo ipantigo ele tá apenas empurrando de lado o ip antigo

localip 200.xxx.xxx.xx2 200.xxx.xxx.xx1(este ip que e o que tem sair)

[]´s
Fabio Sena

----------


## Benzatti

Bom, acho que isso resolve:

#modelo anterior modificado
sed "s/listen/listen $var_ip/" pptp.conf | awk &acute; {print $1, $2}&acute; > pptp.conf~
cat pptp.conf~ > pptp.conf
sed "s/localip/localip $var_ip/" pptp.conf | awk &acute;{print $1, $2}&acute; > pptp.conf~
cat pptp.conf~ > pptp.conf

[ ] &acute; s

----------

Agradeçer os esforços de voces na resolução deste problema e pouco, para tamanha dedicação desta comunidade chamada linux!

Benzatti, e a todos muito obrigado

[]´s
Fabio

----------

