Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - proxy_lainux

#61
Dudas y pedidos generales / Re:¿Que tipo de hash es?
Febrero 11, 2016, 02:18:48 PM
ok gracias, entonces creo buscaré un rato con firebug, porque no tengo acceso a la pagina... a ver si encuentro como lo encriptan buscando en los códigos

salu2
#62
Dudas y pedidos generales / Re:¿Que tipo de hash es?
Febrero 11, 2016, 12:34:33 AM
ah lo siento, estaba de ocioso sin nada que hacer y encontré una pagina donde logre entrar mediante inyección sql blind (la forma tediosa y cansada de buscar tablas :( ), así que lo automatice y buscando en la base de datos, me encontré con las tablas donde se resguardan las contraseñas y usuarios... y me encontré con eso, busque en los hash online para tratar de identificar, pero no encontré alguna coincidencia y google no encuentra nada, es una pagina con mysql y php
#63
Hola

¿Alguien se ha encontrado con algún hash así?

9e5e82fa0f4da175d7822ba55a2a8?

no logro reconocer que tipo de encriptación es...
#64
Gracias, ya estoy comprendiendo... llevo poco tiempo en Java así que tendré que revisarlo para practicar, porque yo había hecho un cliente pero bastante desordenado jeje

Muchas gracias nuevamente, ya solo falta ver como lo integro en Android para hacer lo que mencionas, estuve googleando sobre los hilos y con tu ejemplo ya comprendí sobre Run, ya solo me falta leer bastante la documentación de oracle porque si me falta por aprender cosas de Java.

Ojala sigas subiendo más cosas, les entiendo mejor jeje

Saludos.
#65
pues la conexion ya la tengo, la hago mediante un socket en java en la consola de linux, y en android la aplicación ya se establece y puedo mantener el intercambio de datos, lo que no entiendo es como realizar eso de forma automatica, me imagino que es como dices con algun hilo, pero no entiendo como.

pondré un ejemplo en C sobre lo que busco

en código se utiliza un ciclo en este caso un while en el cliente y servidor

Código: c
whie(1){

send(socket, "frase", tamaño, 0);

recv(socket, buffer, espacio, 0);

printf("%s", buffer);

}


ahora uno del servidor

Código: c
while(1){

recv(socket, buffer, espacio, 0);

if(strcmp(buffer, "whoami"){

send(socket, "android", tamaño,0);
}

}



Esto que escribí es muy tonto, así que no lo traten de decifrar o arreglar jeje.

pero es un ejemplo de lo que quisiera hacer, decirle desde linux un comando o funcion a realizar, android al recibirlo haga lo que le pido, y mande el resultado de nuevo a linux.

Como pueden ver en el código de android, puedo hacerlo, siempre y cuando oprima un boton, y quisiera dejarlo sin eso... ¿como lo harían?
#66
hola

Estoy tratando de crear un cliente-servidor entre un celular android y linux en PC, ya logré hacer la conexión, puedo mandar y recibir datos o en este caso, "cadenas de texto", tal vez estoy muy acostumbrado a C, pero como recordaran, con una conexión ya realizada se puede empezar a comunicar los sockets.

Bueno, ya logre esa comunicación, pero no se si funcione de la misma manera con Java, hasta el momento hago la conexión y mando un "hola" de android a la PC, y después mando alguna frase de la PC a android, pero aquí viene mi problema.

Al principio había dejado un botón y un textview para ver si se estaba realizando la conexión y la información se mandaba correctamente, y todo va bien, oprimo el botón para mandar un string desde android a la PC y después puedo volver a recibir otra cadena de caracteres desde la compu hacia android, etc, el clásico recv y send.

Pero como mencioné, tengo que oprimir un botón para poder mandar datos constantemente desde android a la PC y asi lograr mandar datos desde la PC a android nuevamente, y me gustaría poder mandar y recibir datos sin tener que oprimir nada en el celular.

Por ejemplo, me gustaría que cuando la aplicación en andriod se inicie, me mande una frase de "conexion aceptada", después yo mandar un frase de "hola", y android me mande otra cosa y así continuamente hasta que se termine la conexión. Para eso necesito saber como mantener la conexión activa y android reciba y mande información sin oprimir algo.

Traté de quitar el listener del botón y poner el socket en onCreate directamente, pero se detiene la aplicación, lo que quiere decir que así no funciona, ¿alguien me podría decir como realizar esa función, mantener la conexión activa y poder interactuar automáticamente con android?

Les dejo el código que encontré, lo he estado estudiando y modificando varias cosas para entender las cosas. A ver si me pueden explicar como realizar lo que necesito o como podría hacerlo de otra manera

Código: java
package com.clint;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

EditText textOut;
TextView textIn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textOut = (EditText)findViewById(R.id.textout);
     Button buttonSend = (Button)findViewById(R.id.send);
     textIn = (TextView)findViewById(R.id.textin);
     buttonSend.setOnClickListener(buttonSendOnClickListener);
}

Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener(){

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;

try {
  socket = new Socket("192.168.0.17", 8888);
  dataOutputStream = new DataOutputStream(socket.getOutputStream());
  dataInputStream = new DataInputStream(socket.getInputStream());
  dataOutputStream.writeUTF("hola");
  textIn.setText(dataInputStream.readUTF());
} catch (UnknownHostException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
finally{
  if (socket != null){
   try {
    socket.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

  if (dataOutputStream != null){
   try {
    dataOutputStream.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

  if (dataInputStream != null){
   try {
    dataInputStream.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
}
}};
}
#67
Dudas y pedidos generales / Re:Entorno grafico en C
Enero 02, 2015, 04:15:16 PM
No, como linux esta más basado en lenguaje C, su programación base es C y no tanto C++, así que no hay problema en usarlo como deses; yo he usado GTK para C y python y es muy bueno, algo confuso por ser cajas verticales u horizontales, pero con el tiempo te acostumbras

Nunca he usado QT pero dicen que también es bueno si usas KDE
#69
hola

pues ya lo intente, incluso por un momento le di permisos con chmod -R 777 pero tampoco, si abro gedit puedo crear y guardar un texto normal, así que no creo que sea eso

¿que otra cosa podría ser?

EDITADO

creo haber encontrado el problema, selinux bloqueaba todo, pero ya crea el archivo
#70
hola

Gracias por el código, pero no es tanto pedir las cosas directamente a mysql, sino copiarlas del explorador, lo pondré con imágenes para que me puedan ayudar mejor.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

como pueden ver, en el navegador puedo mostrar el resultado y es mas sencillo porque lo hago desde mi computadora, pero me gustaría saber, ¿como puedo con PHP o C, tomar esto "["1","pavek","abfkg","jdndnf","588556"]" y guardarlo en un txt para verlo en el escritorio después?.

porque podría hacer una consulta del 1 al 1000 de id con algún ciclo como for(), pero en vez de verlo en el navegador o tomarlo directamente de mysql, quisiera hacer la petición con PHP o C, y en vez de que me aparezca ["1","pavek","abfkg","jdndnf","588556"] en el navegador, me gustaría que el programa tomara el resultado y lo guardara en un txt.

pero no directamente de php a mysql, sino recibir la información  de una petición de PHP a mysql y guardar la información o extraer la información del navegador como en la que aparece en la imagen y guardarlo en un txt.

En pocas palabras, me gustaría con PHP o C, hacer una consulta del link "mipaginaweb/consulta.php?id=1", esperar a que se haga la búsqueda en mysql y cuando imprima en el navegador la petición, yo tomarla y guardarla en un txt o hacer la petición y en vez de que aparezca en el navegador, guardar directamente el resultado  y me aparezca esto["1","pavek","abfkg","jdndnf","588556"]  o lo que haya escrito en las tablas de mysql en un txt

salu2

EDITADO

pues por ahora lo he logrado con file_get_contents, trim y fopen, a ver si alguien conoce otras formas más optimas de hacerlo

Al parecer tengo problemas con fopen, no me deja crear el archivo, la carpeta ya tiene los permisos con chmod, si puedo crear textos manualmente, pero fopen no crea el archivo, alguien sabe ¿porque?
#71
hola

Tengo una duda sobre como podría guardar información de una petición al navegador, tanto como el lenguaje de programación que más me serviría como la forma de hacerlo.

Lo que pasa es que quisiera hacer en C o PHP un código que haga una petición de consulta a un php vinculado con mysql, y lo que se imprima en el explorador, sea guardado en un txt, por ejemplo:

mipaginaweb/consulta.php?id=1

me gustaría ya sea en C o en php, que haga la petición a la pagina mipaginaweb/consulta.php?id=i <-- con una variable de un for para imprimir varias peticiones y el resultado guardarlo en un txt, entonces si las diferentes "id" tienen números, me gustaría que en el txt al abrirlo, me apareciera "1234......" o si en vez de id fuera otra variable como nombre, me apareciera en el txt "alan, martín, pancho, juan" o si pusiera los dos "id&nombre", apareciera "1alan 2 martín 3 pancho 4 juan...."

solo quiero hacer una petición en C o PHP a una dirección como la anterior, el resultado sea leído por el programa y que sea  guardado en un txt

Espero me haya dado a entender, espero me puedan dar una idea de como hacerlo y cual de los dos lenguajes sería mas eficaz .

saludos
#72
Hola

He estado viendo algunos programas para firefox como firebug, que modifican en tiempo real un HTML, puede cambiar fácilmente el código aunque no de manera permanente, eso no lo permite firebug porque no fue diseñado para esa razón, sin embargo, se me hizo interesante poder cambiar cosas de la web, aunque sea localmente y dejarlas así permanentemente como lo hacen los programas que te cambian el diseño desde un Addon de Firefox.

Quisiera intentar hacer lo mismo, pero necesito ayuda con algunas explicaciones, ya que mi conocimiento sobre la WEB es algo limitado. He estado leyendo y googleando un poco y he encontrado que lo que busco podría estar en los archivos DOM, busque en la documentación de firefox y encontré que DOM es un sqlite; estoy leyendo sobre DOM y su programación para entenderle.

Me gustaría saber si alguno de ustedes me podría confirmar, si al modificar DOM directamente, ¿podría hacer lo que firebug hace?, modificar los objectos de la web en tiempo real, por ejemplo, si la pagina tiene un fondo blanco, entonces con buscar Style en DOM, podría modificar el color de blanco a negro y en ese mismo instante se vería, o si encuentro los textos y los modifico, en ese momento en la pagina donde diga "Hola mundo", le modifico el "Hola" y coloco "Adiós", ¿entonces ahora diría, "Adiós Mundo"?.

Siento que estoy cerca de entenderlo, pero no quiero pasar horas buscando algo que posiblemente no tiene nada que ver con el tema, por eso recurro a ustedes y si es posible, ¿que documentación me recomendarían estudiar para conocer el tema?. En caso de que este en lo correcto sobre DOM, ojala tengan información sobre como modificar el sqlite y hacer que la pagina cambie.

Saludos.  ;D
#73
Off Topic / Solo una anecdota con una pregunta.
Agosto 10, 2014, 10:00:04 PM
Hola

Solo quería escribir una anécdota con una pregunta.

Hace unos días, un amigo escribió en su cuenta de Facebook, una pregunta a una pagina de un Software, no recuerdo el nombre pero les escribió preguntando sobre un error que había encontrado al abrir un archivo, al analizarlo descubrí que podría realizarse un exploit; se lo explique a mi amigo y me preguntó que si podría enseñarle, le mencione que no le iba a enseñar pero si le interesaba el tema podía explicarle de lo poco o mucho que aprendí.

Eso me llevo a revisar códigos de hace unos años, la verdad cuando los realizaba decía, "cuando vuelva a ver esto, me sentiré ridículo" y fue cierto, mientras los revisaba me di cuenta de cosas que podía optimizar, cosas innecesarias pero que en su momento era la única manera que conocía para realizarlo, también abrió viejas heridas sobre cosas que borre por error en algún formateo e incluso encontré códigos que no recordaba que los haya realizado; todo eso me hizo recordar viejos tiempos donde pasaba horas buscando información, intentando hacer algo sin darme por vencido, insultos que recibía por hacer preguntas tontas, una vez perdí la noción del tiempo, me levante a las 8 de la mañana, encendí mi computadora y empece a trabajar, quise descansar para supuestamente desayunar y me di cuenta que eran las 6 de la tarde  :P. También tuvo mis momentos de éxito, de eso no no me quejo.

Pero después cuando ya lograste algún objetivo o experimentaste lo que es el hacking como:  encontrar bugs y buscar como explotarlos, tener acceso a otra computadora, crear programas para no volver a usar nada de internet, lograr cosas que a lo mejor te emociono al verlo en alguna película o tutorial de internet; vaya, ya sean cosas pequeñas o enormes pero realizadas por uno mismo, son éxitos personales, porque tampoco les voy a mentir diciendo que soy un gran hacker buscado por la CIA y estoy aquí escribiéndoles  8) jaja.

Pero después de volver a ver recordar todo eso, me regreso la sensación de volver a intentar crear algún malware y que he dejado de hacer, ya sea porque en ese entonces era un niño que solo tenia que avanzar en la escuela y tenia más tiempo libre y ahora ya tengo otras actividades (novia, trabajo, no había terminado la universidad y acabo de regresar para terminar la escuela, amigos, paseos, etc), y porque ahora ya estoy enfocado en otras cosas, me interesé mucho por el tema forense, el software comercial, incluso la creación de un sistema operativo (codigo libre); sin embargo, cuando volví a ver todo eso, me regreso la sensación de volver a crear códigos malware, lanzarlos y darme cuenta que no funcionó y volver a intentarlo hasta que lo logre, volver a entrar a foros para que me regañen sobre mis preguntas tontas jaja  ;D, volver a pasar una buenas horas programando, para que al final, un día cualquiera, encender la computadora, darte cuenta que tu trabajo funciono y sentirte contento e incluso tu sólito auto-nombrarte "el mejor hacker del mundo"  :P ;D jajaja

¿Pero ustedes que opinan?, ¿creen que valdría la pena regresar a eso, sabiendo que ya están enfocados en otros temas ya sean personales o laborales?, porque bueno, no he perdido ese interés de encontrar un error y ver si puedo explotarlo o realizar algún programa con sockets, e incluso me mantengo informado lo más que puedo sobre temas nuevos sobre hacking, solo que como les menciono, ya casi no los practico. ¿O creen que debería darle punto y aparte a ese tema y enfocarme a lo que hago actualmente y dejar todo eso como un buen recuerdo?.

Bueno, espero alguna opinión, sino el tiempo dirá si podre volver a intentarlo o mejor no.  ;D

#74
gracias, lo hice con el operador shift "<<" y lo hare con un for para los demas
#75
me podria decir si BitConverter.getbytes es lo mismo que malloc?

por ejemplo en VB hacer esto...

Código: vbnet
Dim lowoffset() As Byte = BitConverter.GetBytes(curBig)


sera lo mismo que hacer....?

Código: c
BYTE *lowoffset = (BYTE*)malloc(sizeof(curBig))


curBig es un int64 = 322122547

o cual seria su equivalente en C?
#76
hola

tengo una duda, como podria analizar un array para ubicar hexadecimales, tomar esos hexadecimales, convertirlos en decimales y guardarlos en otro lado?

por ejemplo


BYTE *buffer = {0x00, 0x10, 0xAF, 0x03, 0xFF, 0x00, 0x02, 0x34, 0x03, 0x08, 0x13}

quisiera buscar en ese array por ejemplo el quinto hexadecimal, 0x00 buscandolo desde el inicio hasta el quito, eso imagino lo puedo hacer con un for()

pero al llegar a 0x00 quiero guardar en otro array ese hexadecimal y ademas el hexadecimal continuo, por ejemplo

0x00 y 0x02 y guardarlo para que quede asi 0x0002

podria decir que se veria asi buffer2 = {0x0002}

despues cambiarlo por ser endian para que quede al reves, 0x0200, y para finalizar cambiarlo a decimal que serian 512 y guardar eso en un integer

pero que la funcion for() no termine alli sino que ademas continue buscando for() otro hexadecimal en el mismo array, hacer los mismo pasos y asi continuamente si es que coloco mas hexadecimales

pero no se me ocurre como hacerlo, se que tendria que buscar con un for, al llegar al hexadecimal se que tengo que guardarlo

buffer2[n] = buffer[j]

despues tomar lo datos de buffer2 y voltearlos (0x00002 , 0x0200), convertirlo en decimal, 512

y guardarlos en un integer

podria decirse que tengo la idea pero no se me ocurre como hacerlo en codigo, me podrian ayudar porfavor
#77
necesito la ayuda de un programador de You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

estoy analizando un codigo y tratando de pasarlo a C pero hay unas funciones que no logro entender, primero podre el codigo y abajo el problema

Código: vbnet

ret = ReadFile(Hnd, Buffer, 1024, nRead, NO)

If ret = 0 Then
            ret = WaitForSingleObject(Hnd, INFINITE)
            Select Case ret
                Case WAIT_OBJECT_0
                Case WAIT_TIMEOUT
            End Select
        Else
            Return Nothing
        End If

BytesPerSect = LittleEndianHEXToDecimal(Buffer, &HD, 1)

Private Function LittleEndianHEXToDecimal(ByRef Buffer As Byte(), ByVal offset As Long, ByVal Length As Long) As Long
        If Length = 1 Then
            Return BitConverter.ToInt16(Buffer, offset)
        End If

End Function


Bueno, lo que tengo entendido es que ReadFile leera lo que haya en "Hnd"

despues se hara un if para saber si ReadFile termino, y si no ha terminado WaitForSingleObject hara una pausa hasta que termine, si aparece un WAIT_OBJECT_O o WAIT_TIMEOUT se terminara la espera

despues comienza una funcion, y es la parte que no he sabido bien como funciona y espero me puedan decir si logre entender lo anterior

la funcion maneja el buffer que ReadFile leyo, un hexadecimal, y la longitud del hexadecimal (buffer, 0x0D, 1) y en la funcion hay un if que dice que si la longitud es 1 entonces haceruna conversion a base 16 y el resultado mandarlo de regreso

podrian explicarme sobre BitConverter, en MSDN me quede con la misma duda espero me puedan explicar ustedes un poco mejor

segun yo, Bitconverter analiza los datos guardados en buffer, cuando encuentra el hexadecimal 0x0D lo convierte a decimal que seria 13 y return manda de regreso el numero 13

si es asi, entonces con que yo haga esto seria suficiente?

Código: c
long out;
if(lenght == 1){

out = strtol(offset,NULL, 16);
printf("%ld\n", out);
getchar();
}



o que es lo que hace realmente, espero me puedan explicar

salu2
#78
hola

Estoy intentando hacer un codigo para analizar redes locales basandome en el codigo "arptool" de Cristiano Lincoln Mattos, ya logre entender parte del codigo despues de estar  buscando en google algunas estructuras y funciones, y tambien ya logre hacer funcionar un codigo hecho por mi pero solo logro saber la ip, netmask y Mac address de mi computadora

viendo mas su codigo el manda peticiones arp para sacar la informacion de las demas computadoras conectadas como la ip, netmask y mac address... algo parecido a lo que hace nmap con el comando -sP que te dice que computadoras estan activas

pero aqui es donde tengo el problema...  recuerdo que hace un tiempo cuando encontre por primera ves arptool, lo compile y funcionaba bien, a veces tenia sus pequeños fallos pero me daba la informacion de las ip locales

ahora lo volvi a encontrar, lo compile pero ya no me muestra las demas ip's mas que la mia, asi que ya no se si todavia funcione

me gustaria saber si alguien de aqui me podria dar ideas para lograr scanear las redes locales y encontrar la misma infomacion  "ip, netmask y mac address", o si podrian ayudarme a analizar el codigo y que me puedan decir porque ya no funciona bien el codigo ó que me puedan explicar algunas funciones que no logre entender, seria de bastante ayuda

ya entendi la mayoria pero hay parte del codigo que ya no logre entender, por ejemplo, la funcion str_to_hwaddr, la funcion hexstr_to_int y ya casi le entiendo a la funcion add_to_list que sera casi lo ultimo, porque la funcion show_list es solo para mandar a la consola la informacion guardada en las estructuras y sendarp  es la funcion send y recv para mandar los paquetes y lo demas ya lo tengo entendido bien.

espero me puedan ayudar, dejo el codigo

Código: c
/* 
*      ARPTool v0.1, (c) Cristiano Lincoln Mattos, 1999 - <[email protected]>
*
*      - Compiled and tested on Linux 2.0.33, 2.0.35, 2.0.36, libc5 & glibc. 
*        Will port to Solaris 2.5.1 as soon as i have time.
*      - For usage, run it without arguments.
*      - If you dont know what this is for, or what you can do with it,
*        read yuri volobuev's excellent bugtraq post about ARP spoofing
*        (available from the bugtraq archives).
*      - The netmap results depend on the network latency.. try adjusting the
*        usleep() delay, if you think it's too small/big.
*      - The latest version will be always at
*              http://www.hotlink.com.br/users/lincoln/arptool
*      - Some code borrowed from neped (apostols.org), thanks.
*     
*      #include <stddisclaimer.h>
*
*      CHANGELOG:
*         09/12/98 - General code cleanup.
*         07/12/98 - Removed the option for hiding in the process list, and
*                    double mode: didn't work as expected, stupid oversight.
*         29/12/98 - Better display of MAC's with more than one IP (proxy
*                    arp or virtual interfaces).
*         28/12/98 - Added check for arp reply being to source ip (netmap).
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <linux/if.h>
#include <linux/sockios.h>
#include <linux/if_ether.h>
#include <unistd.h>
#include <fcntl.h>

#define ARP_ETHER       1
#define ARP_REQUEST     1
#define ARP_REPLY       2

/* Structures */
struct pkt_struct {
        unsigned char eth_dst[6];
        unsigned char eth_src[6];
        unsigned short eth_proto;
        unsigned short int arp_hw_type;
        unsigned short int arp_proto;
        unsigned char arp_hw_len;
        unsigned char arp_proto_len;                    // proto is IP.
        unsigned short arp_oper;
        unsigned char arp_hw_src[6];
        unsigned char arp_ip_src[4];
        unsigned char arp_hw_dst[6];
        unsigned char arp_ip_dst[4];
};

struct spoof_struct {
        unsigned char hw_src[6];
        unsigned char hw_dst[6];
        unsigned long int ip_src;
        unsigned long int ip_dst;
        unsigned short op;
};

/* List structures */
struct iplist_struct {
        unsigned long int ip;
        struct iplist_struct * next;
};

struct list_struct {
        unsigned char hw[ETH_ALEN];
        struct iplist_struct * iplist;
        struct iplist_struct * lastip;
        struct list_struct * next;
} * head = NULL, * tail = NULL;

/* Functions */
char * hwaddr_to_str (unsigned char * str);
unsigned char * str_to_hwaddr (char * str);
unsigned int hexstr_to_int (char *cptr);
void netmap (int fd, unsigned long int start_ip);
void usage (char * av, int mode);
void add_to_list (unsigned long int ip, unsigned char * hw);
void show_list ();

/* Global variables */
unsigned long netmask, broadcast;                       /* struct in_addr */
unsigned char hwaddr[ETH_ALEN];
struct sockaddr sock;
int verbose = 0;

void sendarp (int fd, unsigned char * h_source, unsigned char * h_dest, \
                      unsigned char * arp_src, unsigned char * arp_dst, \
                      unsigned long int ip_source, unsigned long int ip_dest, unsigned char op) {
        struct pkt_struct pkt;

        // Ethernet header.
        memcpy(&pkt.eth_dst,h_dest,ETH_ALEN);
        memcpy(&pkt.eth_src,h_source,ETH_ALEN);
        pkt.eth_proto = htons(ETH_P_ARP);
        // ARP header.
        pkt.arp_hw_type = htons(ARP_ETHER);
        pkt.arp_proto = htons(ETH_P_IP);
        pkt.arp_hw_len = ETH_ALEN;
        pkt.arp_proto_len = 4;
        pkt.arp_oper = htons(op);

        if (arp_src==0) bzero(&pkt.arp_hw_src,ETH_ALEN);
                else memcpy(&pkt.arp_hw_src,arp_src,ETH_ALEN);
        if (arp_dst==0) bzero(&pkt.arp_hw_dst,ETH_ALEN);
                else memcpy(&pkt.arp_hw_dst,arp_dst,ETH_ALEN);

        memcpy(&pkt.arp_ip_src,&ip_source,4);
        memcpy(&pkt.arp_ip_dst,&ip_dest,4);

        if ( (sendto(fd,&pkt,sizeof(pkt),0,&sock,sizeof(sock))) < 0) perror("Error sending ARP");

       

}

void netmap (int fd, unsigned long int start_ip) {
        unsigned long int ip, ip_s;
        struct pkt_struct * pkt;
        int i;

        ip_s = start_ip;
        ip = ip_s & netmask;

        i = fcntl(fd,F_GETFL);
        if ((fcntl(fd,F_SETFL, i | O_NONBLOCK))<0) {
                perror("FCNTL"); exit (1);
        }

        pkt = (struct pkt_struct *) malloc(sizeof(struct pkt_struct));
        bzero(pkt,sizeof(struct pkt_struct));

        printf(" - Mapping network... \n");
        while (ip < broadcast) {
                unsigned long int iptmp;
                unsigned char hwa[ETH_ALEN];
                ip = ntohl(ip);
                ip = htonl(++ip);

                sendarp(fd,hwaddr,str_to_hwaddr("FF:FF:FF:FF:FF:FF"),hwaddr,0,ip_s,ip,ARP_REQUEST);
                usleep(1000);

                i = sizeof(sock);
                bzero(pkt,sizeof(struct pkt_struct));
                if ((recvfrom(fd,pkt,sizeof(struct pkt_struct),0,&sock,&i)) < 0) continue;

                memcpy(&iptmp,pkt->arp_ip_dst,4);
                if ((iptmp!=ip_s) || (ntohs(pkt->arp_oper)!=ARP_REPLY)) continue;               
                memcpy(&iptmp,pkt->arp_ip_src,4);
                add_to_list(iptmp,pkt->eth_src);
        }
        show_list();
        free (pkt);
}
       

void main (int argc, char ** argv) {
        struct ifreq ifr;
        struct sockaddr_in sin;
        struct spoof_struct sp;
        unsigned long int ip;
        int fd, ret;
        int i = 0, map = 0, spoof = 0, interval = 0;
        char * dev;

        // Parsing the arguments.
        if (argc < 2) { usage(argv[0],0); exit(1); }
       
        usage(argv[0],1);
        dev = (char *) malloc(6); strncpy(dev,"wlan0",5);
        while ((i = getopt(argc, argv, "dc:vmi:s:")) != EOF) {
                switch (i) {
                        case 'm': map = 1; continue;
                        case 'v': verbose = 1; continue;
                        case 'i': dev = optarg; continue;
                        case 'c': interval = atoi(optarg); continue;
                        case 's': spoof = optind-1; continue;
                        case '?': exit(1);
                        default: usage(argv[0],0); exit;
                }
        }
        if ((map) && (spoof)) {
                printf(" Error: cannot run in map mode (-m) and spoof mode (-s) simultaneously.\n");
                exit(1);
        }
        if ((!map) && (!spoof)) {
                printf(" Error: map mode (-m) or spoof mode (-s) must be specified.\n");
                exit(1);
        }
        if (spoof) {
                unsigned long int ips;
                int origspoof = spoof;

                spoof = optind;
                if ((!argv[origspoof]) || (!argv[spoof]) || (!argv[spoof+1]) || (!argv[spoof+2]) || (!argv[spoof+3])) {
                        printf(" Error: spoof (-s) requires five arguments: \n");
                        exit(1);
                }

                ips = atoi(argv[spoof+3]);
                if ( (ips!=1) && (ips!=2) ) {
                        printf(" Erro: wrong arp operation.  Must be 1 for request or 2 for reply. \n");
                        exit(1);
                }
                memcpy(&sp.hw_src,str_to_hwaddr(argv[origspoof]),ETH_ALEN);
                memcpy(&sp.hw_dst,str_to_hwaddr(argv[spoof++]),ETH_ALEN);               
                ips= inet_addr(argv[spoof++]);
                memcpy(&sp.ip_src,&ips,4);
                ips = inet_addr(argv[spoof++]);
                memcpy(&sp.ip_dst,&ips,4);
                ips = atoi(argv[spoof]);
                memcpy(&sp.op,&ips,1);
        }


        // Setting up the sockets, interface, and getting data.
        strcpy(sock.sa_data,dev);
        sock.sa_family = AF_INET;
        fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ARP));
        if (fd==-1) {
                perror("Socket: "); exit (1);
        }

        // HW Addr.
        strcpy(ifr.ifr_name,dev);
        ret = ioctl(fd,SIOCGIFHWADDR,&ifr);
        if (ret==-1) {
                perror("Error getting HW Address"); exit (1);
        }
        memcpy(hwaddr,ifr.ifr_hwaddr.sa_data,ETH_ALEN);

        // IP.
        ret = ioctl(fd,SIOCGIFADDR,&ifr);
        if (ret==-1) {
                perror("Error getting IP Address"); exit (1);
        }
        memcpy(&sin,&ifr.ifr_addr,sizeof(struct sockaddr_in));
        ip = sin.sin_addr.s_addr;

        // Netmask.
        ret = ioctl(fd,SIOCGIFNETMASK,&ifr);
        if (ret==-1) {
                perror("Error getting netmask"); exit (1);
        }
        memcpy(&sin,&ifr.ifr_netmask,sizeof(struct sockaddr_in));
        netmask = sin.sin_addr.s_addr;
//      netmask = 16777215;             // 24 bit Netmask

        // Broadcast.
        ret = ioctl(fd,SIOCGIFBRDADDR,&ifr);
        if (ret==-1) {
                perror("Error getting broadcast"); exit (1);
        }
        memcpy(&sin,&ifr.ifr_broadaddr,sizeof(struct sockaddr_in));
        broadcast = sin.sin_addr.s_addr;

printf("- Hardware Address: %s\n", hwaddr_to_str(hwaddr));
    printf("- Interface IP: %s (%s)\n", inet_ntoa(*(struct in_addr*)&ip), dev);
printf("- Netmask: %s\n", inet_ntoa(*(struct in_addr*)&netmask));
printf("- Brodcast: %s\n\n", inet_ntoa(*(struct in_addr*)&broadcast));

        while (1) {
                if (map) netmap (fd,ip);
                if (spoof) {
                        sendarp(fd,sp.hw_src,sp.hw_dst,sp.hw_src,sp.hw_dst,sp.ip_src,sp.ip_dst,sp.op);
                }
                if (interval) sleep(interval);
                        else break;
        }
}


char * hwaddr_to_str (unsigned char * str) {
        static char tmp[20];
        sprintf(tmp,"%02X:%02X:%02X:%02X:%02X:%02X",str[0],str[1],str[2],str[3],str[4],str[5]);
        return tmp;
}

unsigned int hexstr_to_int(char *cptr) {
      unsigned int i, j = 0;
       
      while (cptr && *cptr && isxdigit(*cptr)) {
            i = *cptr++ - '0';
            if (9 < i) i -= 7;
            j <<= 4;
            j |= (i & 0x0f);
      }
      return(j);
}       

unsigned char * str_to_hwaddr (char * str) {
        unsigned char tmp[2], strbuf[17], t[2];
        static unsigned char * buf, * tt;
        int e, i;

        buf = (unsigned char *) malloc(6);
        bzero(t,2); bzero(tmp,2); bzero(strbuf,17); bzero(buf,6);
        strncpy(strbuf,str,17); strbuf[17]='\0';
        tt = buf;
       
        e = 0;
        for (i=0; i < strlen(strbuf); i++) {
                if ((strbuf[i]==':') && (e==0)) continue;
                tmp[e] = strbuf[i]; e++;
                if (e==2) {
                        unsigned int a;
                        a = hexstr_to_int(tmp);
                        memcpy(tt,&a,1); tt++;
                        bzero(tmp,2); e = 0;
                }
        }
        return buf;
}

void usage (char * av, int mode) {
        printf(" ARPTool v0.1, (c) Cristiano Lincoln Mattos, 1999.  <[email protected]> \n");
        if (!mode) {
                printf(" Sintax: %s [-i interface] [-m] [-c] [-s hwsrc hwdest ipsrc ipdst op]\n",av);
                printf("         -i interface: use this interface.  If ommited, default to eth0\n");
                printf("         -m: network map mode.  Will identify all hosts on the same \n                  cable segment. \n");
                printf("         -s src_hwaddress dst_hwaddress src_ipaddress dst_ipaddress operation:\n");
                printf("            send arbitrary ARP packets.  The hardware address must be \n                specified in the usual form, i.e. 00:00:FD:FF:1E:C1.\n                  Operation is 1 for ARP request, 2 for ARP reply. \n");
                printf("         -c interval: continuous mode.  Will keep sending the specified \n              packets every interval seconds (requires -s or -m).\n");
                exit(1);
        }
}       


void show_list () {
        struct list_struct * tmp, * tmp2;
        tmp = head;
        while (tmp!=NULL) {
                struct iplist_struct * iptmp;
                iptmp = tmp->iplist;
                printf(" -- HW Address: %s",hwaddr_to_str(tmp->hw));
                if (iptmp->next) printf(" - Several IP's: probably router with proxy arp, or virtual interfaces.\n");
                while (iptmp!=NULL) {
                        printf("            IP: %s\n",inet_ntoa(*(struct in_addr*)&iptmp->ip));
                        iptmp = iptmp->next;
                }
                free(iptmp); tmp2 = tmp->next;
                free(tmp); tmp = tmp2;
        }
        return;
}
             

void add_to_list (unsigned long int ip, unsigned char * hw) {
        struct list_struct * tmp;
        struct iplist_struct * iptmp;
        tmp = head;
        while (tmp) {
                if ((hw[0]==tmp->hw[0]) && (hw[1]==tmp->hw[1]) && (hw[2]==tmp->hw[2]) && (hw[3]==tmp->hw[3]) &&\
                        (hw[4]==tmp->hw[4]) && (hw[5]==tmp->hw[5])) break;
                tmp = tmp->next;
        }
        if (!tmp) {                     // If it's the first HW entry, or did not find HW in list, create
                if ((tmp = (struct list_struct *) malloc(sizeof(struct list_struct))) == NULL) {
                        printf("\n malloc error. \n"); exit (1);
                }
                if ((iptmp = (struct iplist_struct *) malloc(sizeof(struct iplist_struct))) == NULL) {
                        printf("\n malloc error. \n"); exit (1);
                }
                iptmp->ip = ip;
                iptmp->next = NULL;
                tmp->iplist = iptmp;           
                tmp->lastip = iptmp;
                tmp->next = NULL;
                memcpy(tmp->hw,hw,ETH_ALEN);
                if (tail) {
                        tail->next = tmp;
                        tail = tmp;
                }
        } else {                        // Found the HW entry in the list, just add the IP.
                if ((iptmp = (struct iplist_struct *) malloc(sizeof(struct iplist_struct))) == NULL) {
                        printf("\n malloc error. \n"); exit (1);
                }
                iptmp->ip = ip;
                iptmp->next = NULL;
                tmp->lastip->next = iptmp;
                tmp->lastip = iptmp;
        }
        if (!head) head = tail = tmp;
}


#79
perdon por responder hasta ahora, es que por lo general trabajo en fedora y  estaba haciendo esto en kali linux y se me paso, pero ya funciono, al principio no queria pero cuando reinicie el sistema, lo volvi a intentar y encontro la contraseña

gracias
salu2
#80
hola

tengo una duda, estaba haciendo una prueba con mi router para ver  que tan sencilla es mi contraseña, las unicas opciones que me da el router es wep y wpa, asi que le puse un clave para wpa

cuando capturo la contraseña en un handshake con aircrack, intento descubrir mi contraseña pero aircrack nunca la encuentra, al principio lo intente con un wordlist que descargue y despues hice un archivo de texto con varias palabras y entre ellas mi contraseña pero aircrack tampoco la encontro

Y alli esta mi duda, sera que estoy haciendo algo mal? o porque razon aircrack no encuentra la contraseña aunque la haya incluido en el wordlist que hice de prueba?

lo hago de esta manera

aircrack-ng -w /root/Desktop/pass.lst -b 00:14:A5:48:87:12  /root/wpa/mio-01.cap

y todo el tiempo me aparece

Aircrack-ng 1.2 beta2
Passphrase not in dictionary


alguna idea?