domingo, 7 de abril de 2013

Usar el mouse con C/C++ en linux

La forma más fácil para usar las funcionalidades del mouse es usando xdotool (necesita tenerlo instalado).

Ejemplo 1:
Mover el cursor a la coordenada 1,1
system("xdotool mousemove 1 1");



Ejemplo 2:
Este es otro ejemplo de una clase "Mouse" que hice para probar 



#include <inttypes.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
using namespace std;

#define SIZE_OF_SCRIPT_CLICK 20 // Size script that will run the click

class Mouse{
public:

 /** Mouse buttons **/
 enum MouseButton{
  Left=1,
  Middle=2,
  Right=3
 };

 /** Perform click's
  *
  * @param nClicks Number of clicks to perform
  * @param button Button of the click
  * @param delay Delay time in microseconds
  *
  */
 void click(int nClicks=1, MouseButton button=Left,int delay=0){
  static char script[SIZE_OF_SCRIPT_CLICK];
  memset(script,0,sizeof(char)*SIZE_OF_SCRIPT_CLICK);

  sprintf (script,"xdotool click %d",int(button));

  while (nClicks--){
   system(script);
   if (nClicks)
    usleep(delay);
  }
 }

 /** Type of mouse move **/
 enum TypeOfMove{
  Relative, // Move the cursor with respect to the current position
  Absolute  // Places the cursor at a given position
 };

 /** Change the cursor position
  *
  * @param x Abscissa
  * @param y Ordinate
  * @param typeOfMove Type of move
  */
 void move(int x,int y,TypeOfMove typeOfMove=Absolute){
  static char script[SIZE_OF_SCRIPT_CLICK];
  memset(script,0,sizeof(char)*SIZE_OF_SCRIPT_CLICK);
  sprintf (script,"xdotool mousemove%s %d %d",
    typeOfMove==Relative?"_relative":"",x,y);
  system(script);
 }
};


int main() {
 Mouse m;
 usleep(500000);
 m.click(1,Mouse::Right);
 usleep(500000);
 m.move(0,200,Mouse::Relative);
 m.click(1,Mouse::Left);
 m.move(0,200,Mouse::Absolute);
 m.click(1,Mouse::Left);
 return 0;
}


viernes, 29 de marzo de 2013

Sacar clave de un router teniendo acceso físico (reaver)

Si tienes acceso físico a un router pero no sabes la clave y tampoco quieres resetearlo entonces puedes usar reaver para descubrirla.
En la parte de atras del router (o en su caja) por lo general hay una etiqueta que indica el PIN del WPS. Este número es el que vamos a usar para conseguir la clave.





Esta prueba fue hecha usando backtrack. Pero puedes usar cualquier distro.

1- Primero debes poner tu tarjeta en modo monitor

airmon-ng start wlan0

2- Busca el bssid y el canal del router victima:
airodump-ng mon0


3- Por ultimo ejecuta reaver, el pin es el que viste en el reverso del router

reaver -i mon0 -b BSSID -c CANAL -p PIN –vv

Ejemplo (BSSID=F8:E1:21:35:26:0C ; CANAL=4 ; PIN=17057414):

reaver -i mon0 -b F8:E1:21:35:26:0C -c 4 -p 17057414 –vv


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

Estas son capturas de las dos únicas pruebas que he realizado (ambas exitosas):



Se puede notar que sacaron la clave en solo 3 segundos!

Prueba Alfa AWUS036NHR + splitter

Esta es una prueba de un Alfa AWUS036NHR (2W). Veremos la variación de la señal con la antena de serie vs la señal de dos antenas colocadas con un splitter.


Caso 1: Alfa + Antena por defecto:



Caso 2: Alfa + Splitter ( Antena por defecto + Antenna TP-Link 8db)




Podemos ver que el aumento fue significativo pero nada del otro mundo. 

martes, 12 de febrero de 2013

Ordenar un vector con std::sort() en c++


Este es un ejemplo rapido:


#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <stdio.h>
using std::vector;

struct Ovni{
 Ovni(int ci){
  this->ci=ci;
 }
 int ci;
};

// Función que indicará si un ovni es menor que otro (modificar a su gusto)
bool menorque(const Ovni& o1,const Ovni& o2){
 return o1.ci<o2.ci;
}
int main (int argc, char *argv[]){
 vector<Ovni> vectorDeOvnis;
 vectorDeOvnis.push_back(Ovni(1));
 vectorDeOvnis.push_back(Ovni(3));
 vectorDeOvnis.push_back(Ovni(2));
 vectorDeOvnis.push_back(Ovni(0));

 printf("Antes\n");

 for (uint i = 0; i < vectorDeOvnis.size(); ++i) {
  printf("[ %d ]",vectorDeOvnis[i].ci);
 }
 // Ordena según la regla "menorque"
 std::sort(vectorDeOvnis.begin(),vectorDeOvnis.end(), &menorque);

 printf("\nDespues\n");
 for (uint i = 0; i < vectorDeOvnis.size(); ++i) {
  printf("[ %d ]",vectorDeOvnis[i].ci);
 }
}

Instalar pencil animation en Fedora / Suse x86_64

Intenté compilar el source de pencil y yum me indicaba que fataba "libming.so.1". Tras mucho buscar he conseguido una solución bastante lammer pero que más da :·/

Te puedes descargar el RPM de esta pag:

ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/davjam79/openSUSE_Tumbleweed/x86_64/pencil-0.4.4b-22.3.x86_64.rpm


Luego instalan normalmente: yum install ./pencil-0.4.4b-22.3.x86_64.rpm


y listo


Aquí una captura de pantalla del programa corriendo en mi Fedora 18 x86_64 bajo KDE




jueves, 31 de enero de 2013

Probando el TL-R470T+ con balanceo de carga

Esta es la configuración que le he dado:


Haciendo la prueba con balanceo de carga 1/1 con dos conexiones (aba cantv)  de 1,5 mb/s me dio este resultado:

Se puede apreciar que la velocidad de descarga llega hasta 370 kbps.

Pasos para lograr esto:

1-) Configurar las wan's

2-) Este router usa balanceo de carga basado en ancho de banda ("Bandwidth Based Balance Routing" ). Es decir, la cantidad de carga que circule por las wans dependerá de el ancho de banda que usted le asigne en la configuración. La siguiente configuración es de dos wans: una de 1900 kbps y otra de 2400


3-) Configurar las wans que participaran en el balanceo de carga.


sábado, 26 de enero de 2013

Resaltado en Eclipse con con tema oscuro

Cuando instalas un tema oscuro en Eclipse es normal que ocurra esto:


Puedes notar como el texto es resaltado por un color que hace imposible leer dicho texto.

Para evitar esto ve a General -> Editors -> Test Editors -> Annotations

"C/C++ occurrences" es el valor que hay que modificar.



Yo le coloqué un color rojo y quedó así


Lo posteo porque me costó bastante conseguir la opción.