Autor
|
Tema: Ayuda con un stream de fichero en linux. (Leído 3,534 veces)
|
0xDani
Desconectado
Mensajes: 1.077
|
Hola! Estaba trasteando por mi sistema, un Ubuntu, cuando me encontre el siguiente encabezado: poll.h. Me dio curiosidad, y decidi buscar documentacion acerca de esta libreria(si, estaba aburrido ). Encontre y lei esto: http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.h.html. Entonces he pensado que podia hacer un keylogger simple, y he armado este codigo: #include <unistd.h> #include <sys/poll.h> #include <stdio.h> int main(int argc, char* argv[]) { struct pollfd input[1]; input[0].fd = 1; input[0].events = POLLIN; int event; char chevent; while(1) { event = poll(input, 1, 1); if(event>=0){ chevent = event; } return 0; }
El problema es que escribo cuatro o cinco letras, cierro la terminal y el fichero "log.txt" ocupa entre 10 y 15 KBs, y al abrirlo se me queda pillado el editor de texto. Cuando simplemente imprimo las letras por pantalla funciona perfectamente. Saludos.
|
|
« Última modificación: 24 Agosto 2012, 00:31 am por daniyo »
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
Foxy Rider
Desconectado
Mensajes: 2.407
Deprecated
|
La verdad es que no conozco poll(), báh, lo he visto, pero no lo he usado ... revisando la manpage veo que sirve para trabajar con descriptores de ficheros. Puede llegar a funcionar sobre STDIN, pero tené en cuenta que stdin en entorno gráfico no sirve (sólo con terminales y emuladores de terminales) http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.htmlSi vas a referenciar descriptores de ficheros bajo *nix, incluí unistd.h y usá las macros STDIN_FILENO, STDOUT_FILENO y STDERR_FILENO por motivos de limpieza visual y estilo. En este caso, lo que hace poll() es algo parecido a lo que hice acá, fijate: http://foro.elhacker.net/programacion_cc/como_hacer_que_un_bucle_se_ejecute_durante_x_milisegundos_en_linux-t369295.0.html;msg1775072#msg1775072En principio sí ... podría servir para un keylogger mal hecho, pero sirve. En entorno gráfico tendrías que usar otro método (creo que hemos visto en otros posts como pedir las teclas bajo X), por lo que ya tenés varios métodos para keylog, en diferentes entornos (consola y X), jugá con ellos y fijate qué limitaciones tienen y qué se ajusta más a lo que querés, pero sobretodo, nunca recaigas sobre un sólo método, siempre tené un fallback Saludos.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Ah claro, cierto, stdin no sirve para entorno grafico... No habia caido en eso! La verdad es que le puse 1 como descriptor de fichero porque sabia que en entornos *nix stdin esta definido como 1, pero usare las macros, es cierto que queda mas limpio. Tambien es cierto que ya hemos visto como pedir las teclas bajo X, yo mismo trate de hacer un keylogger usando la Xlib, pero tenia demasiada poca experiencia y costumbre de leer en ingles xD. Entonces si consigo pedir las teclas usando la Xlib, el problema estaria en como saber si se esta escribiendo en la terminal o en el entorno grafico. Bueno, supongo que siempre se pueden usar threads o hacer un fork. De todas formas tengo el mismo problema, que viene a ser que el fichero ocupa entre 10 y 15 KB (aunque despues de varias pruebas he visto 120 KB) y no es accesible, me cuelga el gedit. Saludos. PD: Hace un rato he visto tu blog, no sabia que tenias uno. La proxima vez avisame, siempre es enriquecedor leer escritos tuyos
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
Foxy Rider
Desconectado
Mensajes: 2.407
Deprecated
|
Tambien es cierto que ya hemos visto como pedir las teclas bajo X, yo mismo trate de hacer un keylogger usando la Xlib, pero tenia demasiada poca experiencia y costumbre de leer en ingles xD. Entonces si consigo pedir las teclas usando la Xlib, el problema estaria en como saber si se esta escribiendo en la terminal o en el entorno grafico. Bueno, supongo que siempre se pueden usar threads o hacer un fork. De todas formas tengo el mismo problema, que viene a ser que el fichero ocupa entre 10 y 15 KB (aunque despues de varias pruebas he visto 120 KB) y no es accesible, me cuelga el gedit.
Por que poll() no bloquea, está escribiendo a matar en ese bucle ... cambiá el fprintf por un printf, y fijate que sucede Si no pongo un if revisando el char, me bombardea la salida de la terminal. Si estás en entorno gráfico, los emuladores de terminales están corriendo bajo X, así que podría decirse que ahí no vas a tener problemas, por que podés usar el método de X (ejemplo? xterm y konsole son emuladores, pero usando el keylogger de X puede leerse lo que se les escribe, por que corren sobre X) Pensalo así: Te instalás en el .rc del usuario que te interesa, y en base a eso, vas monitoreando si se arranca X ... si no se arranca, hacés un keylogging estándar, y si se arranca, hacés un fork() y te ponés a hacerlo con la manera de X también. *En principio* Saludos. P.S → Mi blog es rrré político y hace poquito lo armé ... pero no lo ando publicitando, es decir, se lo pasé a pocas personas ... fuera de eso, lo referencio cuando necesito abordar un punto (como lo de GNU/Linux). Ahora ando escribiendo una entrada llamada "Un acercamiento al derecho de autor y licenciamientos copyleft", aunque quiero escribir algo de programación !!
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Si, es cierto que poll() no bloquea, pero le pongo un if para comprobar que el valor de retorno sea mayor o igual a 0, entonces si no escribo en la terminal no deberia escribir en el archivo no? Voy a cambiar el ">=" por un ">"y probare asi. En cuanto a lo del blog, por favor escribe sobre programacion !! Me encantara leerlo. Saludos. Edit: Pues parece ser que no, ahora no coge las teclas. Ahora que le he cambiado el operador de comparacion, crea el archivo pero se queda a cero bytes.
|
|
« Última modificación: 26 Agosto 2012, 03:34 am por 0xDani »
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
Foxy Rider
Desconectado
Mensajes: 2.407
Deprecated
|
Edit: Pues parece ser que no, ahora no coge las teclas. Ahora que le he cambiado el operador de comparacion, crea el archivo pero se queda a cero bytes. Antes las leía? a mi nunca me las leyó ... si querés ver un fichero de texto sin sobrecargar la compu con ficheros grandes, usá el comando head (tantas líneas desde el comienzo del fichero) o tail (tantas líneas del final del fichero) ... sino less less /var/log/Xorg.0.log
Dejalo como estaba antes, y revisá así el fichero de texto ... pero me parece que el código en sí no funciona, la diferencia entre > y >= a 0 es que si chevent vale 0, eso dá verdadero y escribe al fichero ... y no es válido (significa EOF) Saludos. P.S → Es la única manera cuando el fichero es monstruoso ... no hay editor que aguante cuando un fichero pesa MBs
|
|
« Última modificación: 26 Agosto 2012, 03:52 am por Alex Mtx »
|
En línea
|
|
|
|
fabianjsm
|
El valor de STDIN_FILENO (definido en <unistd.h>) suele ser cero, no uno ¿Realmente conoces algún sistema donde esto sea diferente? … Por otra parte stdin difícilmente valdra 0 porque es un puntero (FILE *stdin). STDIN_FILENO y stdin son cosas distintas. #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("STDIN_FILENO: %d\n", STDIN_FILENO); printf("stdin: %p\n", (unsigned long)stdin); return 0; }
Talvez la función no se bloquee porque estas leyendo una salida (sinceramente nunca utilicé esta función). Podrías cambiar esta linea: input[0].fd = STDIN_FILENO;
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Ya he cambiado 1 por STDIN_FILENO, y sigue sin funcionar
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con Ocultacion de Ficheros Metodo Stream-S.O Win Vista
Dudas Generales
|
awer17
|
2
|
4,559
|
12 Agosto 2011, 17:45 pm
por SuperDraco
|
|
|
Cuda Vs Stream?? STREAM!!
Programación General
|
APOKLIPTICO
|
2
|
8,965
|
2 Octubre 2010, 16:59 pm
por APOKLIPTICO
|
|
|
Ayuda con plugin social Live stream de facebook
Desarrollo Web
|
4rkn63l
|
2
|
3,873
|
20 Agosto 2011, 03:41 am
por 4rkn63l
|
|
|
Informacion sobre fichero Linux
Programación C/C++
|
Leber
|
0
|
1,441
|
21 Diciembre 2011, 14:01 pm
por Leber
|
|
|
Reproductor stream o peliculas en servidor local linux
GNU/Linux
|
dato000
|
5
|
4,588
|
13 Diciembre 2013, 07:15 am
por dato000
|
|