image1 image2 image3 image4 image5 image6 image7 image8 image9 image10
Data de criação:
Data de publicado:
Acessos: 3905


Como alguém já disse antes: nem todo restart é bom.

Mas infelizmente isso é necessário em alguns momentos.  E meu roteador wireless Netgear WGR614 v7 chegou nesse ponto.  Diariamente ele exige um leve "restart" pra poder funcionar direito na parte wireless, do contrário nada consegue se conectar nele: notebook, netbook, xbox360, celulares... 

Deve ser alguma feature chinesa pois todos os produtos de lá padecem do mesmo mal, que sempre começa a aparecer depois de mais de 1 ano de uso.  Deve ser uma estratégia de marketing pra nos forçar a fazer um upgrade.  Igual ao Windows.

Mas voltando ao problema e sua solução, resolvi partir pra um restart automático (restart do bom, pra deixar claro).  Então primeiramente descobri que o roteador faz um restart ao salvar as configurações de wireless.  Em seguinda utilizei o Add-on do firefox, Live HTTP Headers, que ajudou a capturar os dados enviados ao equipamento:

POST /wlg_adv.cgi HTTP/1.1
Host: 192.168.34.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://192.168.34.1/WLG_adv.htm
Authorization: Basic ZnVjazp5b3U=
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
enable_ap=enable_ap&ssid_bc=ssid_bc&enable_wmm=0&Apply=Apply

O router exige autenticação, o que pode ser visto pela entrada "Authorization: Basic ZnVjazp5b3U=", que não usa criptografia mas um encode de base 64.

Então criei um script pra fazer o trabalho sujo e enviar os mesmos dados ao roteador, mas em Python.

#! /usr/bin/env python
# Script to restart daily my wireless router
# by Helio Loureiro

import httplib
import base64
import urllib
from time import ctime
 
user = "admin"
passw = "password"
host = "192.168.0.1"
 
def GetAuth(user = "user", passw = "passwd"):
        auth = user + ":" + passw
        return base64.encodestring(auth)[:-1]
 
headers = { 
        "Host" : host , 
        "User-Agent" : "Mozilla/5.0  (Python)",
        "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" , 
        "Accept-Language" : "pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3",
        "Accept-Encoding" : "gzip,deflate", 
        "Accept-Charset" : "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
        "Referer" : "http://192.168.34.1/WLG_adv.htm" ,
        "Authorization" : "Basic " +  GetAuth(user, passw),
        "Content-Type" : "application/x-www-form-urlencoded"
        }
 
post_params = {
        "enable_ap" : "enable_ap" ,
        "ssid_bc" : "ssid_bc",
        "enable_wmm" : "0",
        "Apply" : "Apply"
        }
 
params = urllib.urlencode(post_params)
 
web = httplib.HTTPConnection(host)
web.request("POST", "/wlg_adv.cgi", params, headers)
response = web.getresponse()
 
if (response.status == 200):
        print "[" + ctime() + "] Wireless router restarted successfully"
else:
        print "[" + ctime() + "] Restart FAILED"
 
data = response.read()
web.close()

Os dados necessários são usuário, senha e IP do roteador wireless (user, passw e host).  Adicionando o script à crontab, o roteador será reiniciado diariamente, aumentando um pouco mais a longevidade de tal produto Chinês.

Data de criação:
Data de publicado:
Acessos: 7306

Pode ser preciosismo meu, mas resolvi criar uma chamada em alguns programas para limpar a tela, ao estilo do comando clear.

Não imaginava por quais veredas inóspitas eu iria entrar...

Primeiramente devo dizer que é fácil fazer uma chamada pra um subshell e utilizar o próprio aplicativo clear.

#! /usr/bin/python
from os import system

system("clear")

Funciona,  mas é tosco.  E eu queria uma solução "unix like", daquelas que a gente tem orgulho de contar na mesa do bar, no encontro com amigos nerds (afinal serão os únicos que entenderão o que você estava dizendo, o que não significa que vão compartilhar o mesmo sentimento de orgulho que você estava sentindo).

Então mergulhei na biblioteca ncurses.  Tentei algumas linhas simples, chamando um método curses.clear().

#! /usr/bin/python
import curses

scrn = curses.initscr()
scrn.clear()
curses.endwin()

Realmente funcionou, mas de uma forma indesejada, não restaurando as propriedades do terminal (você perde a alimentação do cursor, que só é restaurada após utililizar o comando reset).

Então resolvi utilizar o módulo termios para salvar o estado do terminal, e recuperar o mesmo após o método curses.clear().  Ficou um pouco maior do que eu imaginava, mas funcionou muito bem.  Agora posso fazer meus scripts Python limparem a tela de uma forma muito elegante.

#! /usr/bin/python
import curses
import termios
from sys import stdin

fd = stdin.fileno()
scr = termios.tcgetattr(fd)

scrn = curses.initscr()
scrn.clear()

termios.tcsetattr(fd, termios.TCSADRAIN, scr)


Python fun!

Autor:
Data de criação:
Data de publicado:
Acessos: 2218
{mosimage}
Data de criação:
Data de publicado:
Acessos: 2058
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.

{mosimage}

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:

{CODE} 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") {/CODE}

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!

Data de criação:
Data de publicado:
Acessos: 11387

 Esse é o script usado para autenticar automaticamente no Speedy da Telefonica (região de São Paulo). Evita que usuários residenciais, como eu, precisem estar em frente à máquina, permitindo que a mesma volte à rede sem intervenção humana.

Instruções para Linux:
    Copie o arquivo com o nome "0speedy_auth" dentro de "/etc/ppp/ip-up.d/". Isso fará com que seja executada no início de cada inicialização ppp. Para tornar o pppoe também automática, inclua a seguinte entrada em "/etc/inittab":
S1:2345:respawn:/usr/sbin/pppd nodetach call speedy
    O nome "speedy" é relativo ao arquivo que deve existir em "/etc/ppp/peers/speedy" com o conteúdo semelhante à:

pty "pppoe -I eth0 -T 80 -m 1452"
noauth
defaultroute
user "Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo."
usepeerdns

Instruções para FreeBSD:
    Inclua o nome do arquivo (e o caminho) em "/etc/ppp/ppp.linkup".


 

 # $Id: speedy_auth.py,v 1.1 2003/09/12 02:57:40 helio Exp $
# COPYRIGHT
#
#    Copyright © 2003 Helio Loureiro
#
#    Permission to use, copy, modify, distribute, and sell this software
#    for any purpose is hereby granted without fee, provided that the above
#    copyright notice appear in all copies and that both that copyright
#    notice and this permission notice appear in supporting documentation.
#    No representations are made about the suitability of this software for
#    any purpose. It is provided "as is" without express or implied
#    warranty.


import os, sys, time
from socket import *

print "Autenticador para speedy $Revision: 1.1 $ - versão super alfa \
\nEscrito em Python (multiplataforma :-) \
\nEnvie suas sugestões e críticas para \"helio AT loureiro DT eng DT br\""

hostfake="www.google.com.br"
web=80
host='200.171.222.97'
port=86

adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((hostfake, web))
adsl.send("""GET /intl/pt/ HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Keep-Alive: 300
Connection: keep-alive\n\n
""")

adsl.recv(1024)
adsl.close()

adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((host, port))
adsl.send("""GET /speedywebapp/html/redirect.html?CPURL=http://www.google.com/intl/pt/ HTTP/1.1
Host: 200.171.222.97:86
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/pla
in;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: pt-br
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 08 Sep 2003 12:21:49 GMT
If-None-Match: "12bc10-4d1-7e901140"\n\n
""")
adsl.recv(1024)
adsl.close()

adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((host, port))
adsl.send("""GET /speedywebapp/servlet/logon?CPURL=http://www.google.com/intl/pt/&opcion=internet HTTP/1.1
Host: 200.171.222.97:86
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/pla
in;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: pt-br
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
Referer: http://200.171.222.97:86/speedywebapp/servlet/popupView?CPURL=http://www.google.com/intl/pt/\n\n
""")
adsl.recv(1024)
adsl.close()

print "Conexão estabelecida.  Divirta-se!!!"

2017  helio.loureiro.eng.br   globbersthemes joomla templates