Helio Loureiro

Bem-vindo ao código fonte

  • Increase font size
  • Default font size
  • Decrease font size

Fotos, blog, vídeos, receitas e ouras coisas inúteis. Esse é o conteúdo do meu outro site http://hloureiro.multiply.com .

Programação e desenvolvimento

Telnet via script

Em várias ocasiões, preciso de alguma automação via script que utilize um comando telnet. Existem vários problemas de segurança em relação ao uso do telnet, mas vários equipamentos de rede, entre switches e roteadores, fazem uso dele (se bem que é possível substituir por ssh).


Para usar em scripts, uma das formas mais fáceis de fazer isso é concatenando comandos. É possível fazer login, entrar com a senha, e enviar os comandos necessários.

Como exemplo, uma conexão telnet normalmente seria da seguinte forma:

  • Nome do servidor destino: server
  • Login: user
  • Senha: user

[helio@linux ~]$ telnet server
Trying 10.10.7.4...
Connected to server.
Escape character is '^]'.
login: user
Password: 
user@server> exit
logout
Connection to server closed by foreign host.

Agora no formato para scripts, utilizando o pipe:

[helio@linux ~]$ (echo "user"; sleep 1; echo "user"; sleep 1;echo "date"; sleep 1) | telnet server
Trying 10.10.7.4...
Connected to server.
Escape character is '^]'.
login: Password: 
user@server>date
Thursday, July 29, 2010 8:11:52 PM BRT
user@server>Connection to server closed by foreign host.


Cada comando echo envia para o telnet os comandos que seriam digitados. Utilizei um comando date como exemplo, mas é possível enviar outros comandos e até mesmo ler a saída do comando, redirecionando para um arquivo.

 
Bookmark and Share

Script para gerar MAC randômico

Image Por motivos bizarros e nada claros para ninguém, resolveram fazer alguma "regra de segurança" na empresa para bloquear as máquina que não estejam rodando Windows Vista. Não que eu seja o único fora do padrão, mas existem os consultores externos que, assim como eu, são lembrados dessa limitação de tempos em tempos.

Como resolvi não perder mais tempo com isso, ou ficar bloqueado durante horário de trabalho sem aviso, e não migrar pro "Vista", resolvi fazer um script que altera meu MAC address da placa de rede a cada boot.

Fiz uma função em shell para poder ser utilizado em qualquer Unix, mas estou rodando em bash e não testei seu funcionamento em /bin/sh e /bin/ksh.


make_mac() {

   mac=""
   for blk in 0 1 2 3 4 5
      do
      for id in 0 1
         do
         macid=`jot -r 1 0 15`
         case $macid in
            10) macid="a";;
            11) macid="b";;
            12) macid="c";;
            13) macid="d";;
            14) macid="e";;
            15) macid="f";;
         esac
         mac="$mac$macid"
      done
      mac="$mac:"
   done

   mac=`echo $mac | sed 's/:$//'`

   if [ ! $mac ]; then
     echo "Failed to generate MAC"
     exit 1
   else
     echo "$mac"
   fi

}

Para utilizar, basta fazer uma chamada como no código abaixo (já adaptado pra Linux e FreeBSD):

mymac=`make_mac`
echo "Using MAC ADDR: $mymac"
case `uname -s` in
   FreeBSD) INTF="bge0"
            ifconfig $INTF lladdr  $mymac 
            ;;
   Linux) INTF="eth0"
          ifconfig $INTF hw ether  $mymac
          ;;
   *) echo "Operating System not supported"
      exit 1
esac
 
Bookmark and Share

Começando 2009 com SMS

Ano novo, vida nova. Mudanças no trabalho (de área) e um pouco de férias. Até dia 18, estarei aproveitando meus dias em ócio, um pouco produtivo, espero eu, uma vez que vendi minha prancha de surf e estou esperando uma outra (maior)ficar pronta.

Durante o natal e ano novo, recebi vários SMSs desejando felicidades, etc. Com meu ócio criativo à 1000, resolvi voltar um pouco aos velhos códigos de Python, com Tkinter. Criei uma interface para envio de SMSs em massa, tipo SPAM.

Image

Terrível tentação aos SPAMMERs e melancólico sofrimento para nossos celulares. Mas felizmente utilizei uma interface interna da Ericsson para isso, então somente funcionários poderão utilizar. Fora isso, não pretendo liberar o código externamente. Talvez dentro da empresa, onde já ganhei um relógio com frequencímetro cardíaco devido às minhas contribuições em 2008.

Falando do código, muito simples, utilizando Entry(), Text(), Label() e Button(). Na verdade a facilidade é graças ao Tk mesmo. As fontes das letras anteriormente eram bem *toscas*, assim como o widget, que era todo cinza. Consegui melhorar a aparência do mesmo com o código abaixo:

root = Tk()
root.option_add("*Font", "arial")
root.option_add("*Label.Font", "helvetica 9 bold")
root.option_add("*Background", "gray")
root.option_add("*selectBackground", "light gray")
root.option_add("*selectForeground", "black")
root.config(background="gray")

Estou tentando melhorar o código adicionando um splash screen no início, e outra tela durante o envio, uma vez que ao apertar o botão para enviar, a tela "congela" e só volta ao final. Infelizmente já notei que o Tk é limitado nesse ponto... vamos ver onde chego.

Também depois de *lançamento*, descobri que somente 154 caractéres são enviados. Preciso ver se coloco algum contador pra evitar cortes. Se você recebeu uma mensagem truncada, já sabe: fui eu :-)

E feliz 2009!

 
Bookmark and Share

Python fun!

Image
 
Bookmark and Share

Conversão de caracteres em Perl

Image Faz tempo que não me deparo com esse tipo de problema, mas acabei vendo novamente depois que um colega de trabalho pediu ajuda nisso.

A primeira vez que trabalhei com conversão de caracteres foi em português mesmo, de ISO-8859-1 para UTF-8. Não guardei lembranças boas. Dessa vez o desafio era para converter supostos caracteres no mesmo formato para UTF-8, mas não da nossa língua pátria.

Para quem nunca viu isso, o código em Perl que faz a conversão está no pacote Encode , disponível no CPAN, da seguinte forma:

use Encode;
...

...
foreach $line () {
   next if ($line =~ m/^$/);
   chomp($line);
   $i = Encode::decode("iso-8859-1", $line);
   $line = Encode::encode("utf8", $i);
   print $line."\n";
}
...

Dessa vez tive um problema com a palavra "ΑστέριαΑστέρια". Juro que não sei o que significa, mas a droga da palavra, escrita em grego (CP1253) estava junto ao restante do texto codificado em ISO-8859-1.

Apanhei pra achar o formato certo... ainda falta fazer um conversor inteligente o suficiente para usar o formato certo antes de processar, mas já é alguma coisa...

 
Bookmark and Share
  • «
  •  Start 
  •  Prev 
  •  1 
  •  2 
  •  Next 
  •  End 
  • »


Page 1 of 2