alexmontoanelli

a little fun!

Linux: deauthenticating from by local choice (reason=3)

Having problem with unstable wireless connections after kernel upgrade from 2.6.31 ?

If are you using a Intel card, the solution is simple, just load the module iwlagn, with this paramenters,

or put it on /boot/grub.conf on kernel line:

11n_disable=1 11n_disable50=1

Bye
Update  16/07/2010:  If this not solve, try to change from WPA TKIP to WPA2 PSK AES, the wireless security settings.
July 15th, 2010 by alexm
Posted in linux | 2 Comments »

Interceptando funções internas no PHP

Olá pessoal, dica rápida de como proceder para interceptar funções build-in no php.

Precisei usar para interceptar as chamadas da função mail, em um servidor em produção,
para gerar log, de abusos.

Para isso precisaremos instalar o modulo runkit, disponível em github.com/padraic/runkit.

O procedimento consiste em baixar o pacote via git, com o comando
git clonse git://github.com/padraic/runkit.git, executar um phpize no diretório, depois
o trio ./configure &&  make && make install

Feito isso basta configurar o php.ini para subir o modulo com as seguintes linhas:

extension=runkit.so
runkit.internal_override=1

A primeira linha carrega o módulo e a segunda, diz que vamos sobre-escrever funções internas no php.

Depois basta reiniciar o apache.

O script para interceptar fica mais ou menos assim:

//copiamos a funcao interna mail para o nome de intmail
@runkit_function_copy("mail", "intmail");

//removemos a funcao original mail
@runkit_function_remove("mail");
//atribuimos a funcao umail para o nome mail
@runkit_function_copy("umail", "mail"); 

//criamos a assinatura da funcao identica a original do mail
function umail($to,
               $subject,
               $message,
               $additional_headers = null,
               $additional_parameters = null) {
      //executamos aqui nossas rotinas
      //como por exemplo criar logs

      //chamaos a funcao mail original com os paramentros passados
      if (ini_get('safe_mode') === false){
        $x =  intmail($to,
                      $subject,
                      $message,
                      $additional_headers,
                      $additional_parameters);
      } else {
        $x =  intmail($to,
                      $subject,
                      $message,
                      $additional_headers);
      }

      return $x;
}

Para esse scritpt ter um funcionamento global, é preciso adiciona-lo na configuração auto_prepend_file  para
carrega-lo automaticamente em toda página.

Por hora é isso.

Abraços

May 17th, 2010 by alexm
Posted in php | 1 Comment »

Gerando relatórios com Jasper no PHP – mini how-to

Para quem tem a necessidade de gerar relatórios, o php não possui nenhuma ferramenta a nível da já  consagrada
Jasper, disponível no Java.

A solução então é usar o projeto phpJavaBridge para criar uma ponte entre o mundo Java e PHP e assim conseguir conversar
com o Jasper.

Vamos lá para a receita, lembre-se que vocẽ precisar ter um certo conhecimento para fazer isso e saber oque está acontencedo,
ter uma certa intimidade com Java e Tomcat e outros.

Primeiro você vai precisar de um servidor web  tomcat rodando -  vários how-to podem ser encontrados no google;

Depois disso baixe o  phpjavabridge (binário), disponível em http://php-java-bridge.sourceforge.net/pjb/download.php,e
baixe tambŕm o Java.inc, disponível na mesma página.

Copie o .war do phpjavabridge (JavaBridge.war) para a pasta webapps do tomcat para fazer o deploy da aplicação.

Acesse então: http://localhost:8080/JavaBridge e se tudo der certo você verá a tela de boas vindas do phpjavabridge.

Feito isso baixe o jasper aqui e após descompactar copie os  *.jar para a basta WEB-INF/lib dentro da pasta do JavaBridge
que esta no webapps do tomcat.

Aqui estão uns scripts para testar a a aplicação no console (linux), já com um modelo básico de relatório feito no iReport
usando csv para backend de dados.

Você pode usar xml e até conexão direta com o banco de dados como origem dos dados.

Nota: todos os paths são relativos ao tomcat e não ao php.

Aconselho a ler e reler muito a documentação que se encontra no site.

Mais uma vez digo, essa tarefa não é para iniciantes, então tenha muita paciência.

Abraços

April 13th, 2010 by alexm
Posted in php | No Comments »

Configurando VLANS no Gentoo

How-to rápido de como configurar uma placa de rede com vlans no Gentoo:

Instale o pacote vconfig com um ‘emerge vconfig’;

Configure o arquivo /etc/conf.d/net da seguinte maneira:

vlans_eth0="10 20"
config_eth0="null"
config_eth0_10=("10.100.5.1 netmask 255.255.255.0" )
config_eth0_20=("192.168.2.243 netmask 255.255.255.0")

Nas linhas acima configuramos 2 vlans com as tags 10 e 20, na interface eth0, atribuindo a cada vlan um endereço IP.

Para iniciar a vlan, basta chamar o script default, /etc/init.d/net.eth0 start

Abraços

March 18th, 2010 by alexm

Trick: listando todos os comandos de uma IOS Cisco

Dica básica pra saber todos os comandos de uma IOS Cisco, útil quando sabemos oque queremos mas não sabemos onde encontrar, dá pra combinar com pipes para filtrar.

Exemplos:

#lista todas as configurações do opção router-map
Router#show parser dump route-map
#lista todas as opcoes do menu interface filtrando por ospf
show parser dump interface | include ospf

Abraços

January 25th, 2010 by alexm

Mapeando e usando as teclas múltimidias no linux

Tento instalado os utilitários xev e xmodmap, execute o comando abaixo no console, e aperte as teclas múltimida do seu teclado em sequência.

A saída do comando abaixo será o código da tecla.

xev | sed -n 's/^.*keycode *\([0-9]\+\).*$/keycode \1 = /p'

Após pressionar as teclas, temos seus respectivos códigos e então podemos mapea-las no linux criando um arquivo com a seguinte estrutura:

keycode 144 = F13
keycode 145 = F14

lembre-se de trocar o keycode, no caso 144, pelo resultado obtido ao pressionar as suas teclas múltimidia. Note que o f13, f14 é simbólico.

Após isso salve o arquivo em um local de fácil acesso por exemplo: ~/.xmodmap e execute:

xmodmap ~/.xmodmap

Agora no kde, abra o útilitário ‘keyboard and mouse’ no System Settings, e em Standard e Global Keyboard Shortcuts, você pode definir as ações para suas novas teclas mapeadas.

Abraço

January 16th, 2010 by alexm

Configurando o ‘scroll’ no touchpad com Linux

Abaixo a configuração do xorg.conf para que o touchpad funcione com o recurso de scroll no linux.

Para utilizar, espera-se que touchpad já esta funcionando e paara rolar as páginas, basta deslizar
o dedo na vertical, no lado direito do touch!

Depois de alterado o /etc/X11/xorg.conf, basta reiniciar o X.

Section "InputDevice"
                Identifier "touchpad"
                Driver "synaptics"
                Option "SHMConfig" "true"
                Option         "SendCoreEvents"
                Option         "Protocol" "auto-dev"
                Option      "Device" "/dev/input/mouse2"
                Option  "TouchpadOff" "0"
                Option  "RTCornerButton" "3"
                Option  "LTCornerButton" "2"
                Option  "TapButton1"    "1"
EndSection

Até!

December 17th, 2009 by alexm

Laboratório Cisco Online

Que tal usar equipamentos Cisco de ponta e de verdade, para simular algumas situações de rede, sem ter
que apelar para um emulador?

É oque propõe a equipe do Packetlife. Um lab como  o da foto abaixo é disponibilizado após você agendar um horário,
onde terá acesso a todos os equipamentos por ssh ou telnet durante o período escolhido.

A parceira é a Netgear que fornece um ‘Console Server’ para acessos aos equipamentos.

A proposta é bastante interessante e vale a pena conferir.

Marquei meu horário na sexta as 12h, depois posto os resultados.

Abraços e bons estudos.

lab_topology_ethernet

December 8th, 2009 by alexm

Configurando redes WPA no Linux

Abaixo segue roteiro básico para você conseguir autenticar em uma rede usando criptografia WPA/WPA2.
Os passos são baseados na distribuição Gentoo, e espera-se que você já tenha sua placa wifi instalada e operacional.

1: instale o pacote wpa_supplicant:  emerge wpa_supplicant
2: edite/crie o arquivo de configuração /etc/wpa_supplicant/wpa_supplicant.conf, com a seguite configuração:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
update_config=1

network={
 ssid="SSID_DA_REDE"
 psk="CHAVE_PSK_DA_REDE"
 pairwise=TKIP
}

3: edite o arquivo /etc/conf.d/net e adicione o seguinte:

modules=( "wpa_supplicant" )
wpa_supplicant_wlan0="-Dwext" # For generic wireless
config_wlan0=( "null" )

4: agora crie o script de inicialização: ln -sf /etc/init.d/net.lo /etc/init.d/net.wlan05

5: inicie a rede com /etc/init.d/net.wlan0 start

Existe tambem uma interface gui, que pode ser chamada pelo comando wpa_gui.

Abraços

November 8th, 2009 by alexm
Posted in linux | 1 Comment »

ZendFramework – Usando parâmentros nas Actions

Para quem usa o ZendFramework, em modo MVC, sabe que o modo para pegar uma váriavel  passada por GET/POST/COOKIE, deve ser realizada através dos métodos: getRequest()->getParam(‘nome_da_variavel’), do objeto Zend_Coontroller_Action.

Abaixo mostro uma implementação, que extende a classe Zend_Action para que seja usado os parâmentros no corpo da função.

Hoje você utiliza da seguinte forma:

<?php
class IndexController extends Zend_Controller_Action {

public function indexAction(){

//obterá o parâmentro GET/POST teste
 echo $this->getRequest()->getParam('teste');

}

}

A nova forma será:

<?php
class IndexController extends My_Action {

public function indexAction(string $teste){

//obterá o parâmentro GET/POST teste
 echo $teste;

}

}

Abaixo a classe My_Action.

Abraços

—————

<?php                                                                                                                                  
/**                                                                                                                                    
 * Map request parameters to action method                                                                                             
 * @author Albert Varaksin                                                                                                             
 * @licence public domain                                                                                                              
 */                                                                                                                                    
class My_Action extends Zend_Controller_Action                                                                           
{                                                                                                                                      
 /**                                                                                                                                
 * Dispatch the requested action                                                                                                   
 *                                                                                                                                 
 * @param string $action Method name of action                                                                                     
 * @return void                                                                                                                    
 */                                                                                                                                
 public function dispatch($action)                                                                                                  
 {                                                                                                                                  
 // Notify helpers of action preDispatch state                                                                                  
 $this->_helper->notifyPreDispatch();                                                                                           

 $this->preDispatch();
 if ($this->getRequest()->isDispatched()) {
 if (null === $this->_classMethods) {  
 $this->_classMethods = get_class_methods($this);
 }                                                   

 // preDispatch() didn't change the action, so we can continue
 if ($this->getInvokeArg('useCaseSensitiveActions')
|| in_array($action, $this->_classMethods)) {
 if ($this->getInvokeArg('useCaseSensitiveActions')) {                                       
 trigger_error('Using case sensitive actions without word separators is deprecated;
please do not rely on this "feature"');
 }                                                                                                                             

 $reflMethod = new Zend_Reflection_Method($this, $action);                                                                     
 $actionParams = $reflMethod->getParameters();                                                                                 
 $requestParams = $this->_request->getParams();                                                                                
 $args = array ();                                                                                                             
 foreach ($actionParams as $param)
 {
 // get parameter type
 if (($reflClass = $param->getClass()) instanceof Zend_Reflection_Class) {
 $type = $reflClass->getName();
 } else if ($param->isArray()) {
 $type = 'array';
 } else {
 $type = $param->getType();
 }

 // get passed parameter
 $name = $param->getName();
 if (isset($requestParams[$name])) {
 $value = $requestParams[$name];
 } else if ($param->isDefaultValueAvailable()) {
 $value = $param->getDefaultValue();
 $type = '';
 } else {
 $docBlock = $reflMethod->getDocblock();
 if (($tagRefl = $docBlock->getTag("require_$name"))
instanceof Zend_Reflection_Docblock_Tag) {
 $tryClass = trim($tagRefl->getDescription());
 if (class_exists($tryClass, true))
 throw new $tryClass("Missing value for argument $name");
 else
 throw new Zend_Controller_Action_Exception("Missing value for argument $name");
 }
 $value = null;
 }

 // fix value type
 $basicTypes = array(
 'int', 'integer', 'bool', 'boolean',
 'string', 'array', 'object',
 'double', 'float'
 );
 if (in_array($type, $basicTypes)) settype($value, $type);
 else if (strlen($type) && class_exists($type, true)) $value = new $type($value);

 $args[] = $value;
 }
 // dispatch the action
 call_user_func_array(array($this, $action), $args);
 } else {
 $this->__call($action, array());
 }
 $this->postDispatch();
 }

 // whats actually important here is that this action controller is
 // shutting down, regardless of dispatching; notify the helpers of this
 // state
 $this->_helper->notifyPostDispatch();
 }
}
October 17th, 2009 by alexm