1 - Es posible llamar un programa externo linux con Bennu (esto si se puede) y despues leer (o capturar) lo que este programa ha escrito en la consola ?
O de forma más detallada:
Es posible abrir la consola de linux, hacer la operación de llamar un programa en la misma con su script de ejecución, leer lo que este devuelve o escribe en la misma y por fin cerrar la consola sin salir de nuestro programa Bennu ?
podes ejecutar un script que redireccione la salida estandard a un archivo y leer el archivo.
en serio, deberia leerte un manual basico de operacion unix/linux, hay muchisimas cosas interesantes en linux que con la practica sola no las vas a conocer nunca.
Ya, pero es que hubo un tiempo que si sabia algo, hace muchos años :(
No podrias hacerme el ejemplillo ?
Si pongo este script en mi juego este se guardaria tambien en la mochila ?
no, no puede estar en la mochila.
Pues no me sirve, este no podria estar acesible...
Bueno ahora que lo pienso, la dirección de MAC es unico y nunca se puede cambiar en un dispositivo cierto ? Si así es podria estar fuera.
Era para leer la dirección de MAC, hay otra forma de hacerlo por bennu ? Los modulos no oficiales de red permiten esto ? Aunque lo ideal es que la funcionalidad este en los oficiales...
Lo que dice splinter, creo, es redireccion al salida de la funcion say a un archivo...
Y luego leer eso desde el programa...
para eso haria un fsave, que no es eso, es que el programa externo te pase los datos al de bennu no al reves :D
Quote from: FreeYourMind on June 17, 2011, 09:39:07 PM
Pues no me sirve, este no podria estar acesible...
Bueno ahora que lo pienso, la dirección de MAC es unico y nunca se puede cambiar en un dispositivo cierto ? Si así es podria estar fuera.
Era para leer la dirección de MAC, hay otra forma de hacerlo por bennu ? Los modulos no oficiales de red permiten esto ? Aunque lo ideal es que la funcionalidad este en los oficiales...
si piensas obtener la direccion MAC por medio de la ejecucion de un programa externo, y con eso queres hacer una proteccion, entonces vamos muy, pero muy mal...
Quote from: Rein (K´)ah Al-Ghul on June 17, 2011, 09:49:59 PM
Lo que dice splinter, creo, es redireccion al salida de la funcion say a un archivo...
Y luego leer eso desde el programa...
claro, eso mismo, pero por lo que cuenta creo que seria un horror hacerlo.
Quote from: FreeYourMind on June 17, 2011, 09:53:33 PM
para eso haria un fsave, que no es eso, es que el programa externo te pase los datos al de bennu no al reves :D
como seria al revez? lo que digo es para que el programa externo pase datos a bennugd... pero si lo quieres para obtener la ip, vete olvidado, eso es horrible.
Jolin, dame soluciones no problemas :)
Quote from: FreeYourMind on June 18, 2011, 12:16:00 AM
Jolin, dame soluciones no problemas :)
jejeje, muy buena...
ah, otra cosa, el MAC se puede cambiar...
aca tenes un codigo para obtener la mac desde C, si bien no es 100% efecfivo, porque podes tener mas de 1 placa de red, y este codigo solo te devuelve la primera que encuentra, podes tranquilamente modificarlo para que obtengas mas de 1 mac si es que existen.
http://adywicaksono.wordpress.com/2007/11/08/detecting-mac-address-using-c-application/
Gracias, solo espero que no me salgan dependencias en falta :)
lo tendrias que adaptar a un modulo bennugd o agregarlo a algun modulo de red existente.
Lo acabo de probar en la Pandora, y me dice 'can't get MAC address' :(
Voy a preguntar en los foros de Pandora como obtenerlo a ver que me dicen....
obviamente tenes que tener la conexion de red establecida para obtener la MAC address.
puff no lo sabia! voy a probar de nuevo (así ya no me mola :()
me lo imagine por eso lo mencione.
para verlo mas claro
mac.c
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef Linux
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <linux/if.h>
#endif
long mac_addr_sys ()
{
/* implementation for Linux */
struct ifreq ifr;
struct ifreq *IFR;
struct ifconf ifc;
char buf[1024];
int s, i, ii;
int ok = 0;
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s==-1) {
return -1;
}
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
ioctl(s, SIOCGIFCONF, &ifc);
IFR = ifc.ifc_req;
for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++) {
strcpy(ifr.ifr_name, IFR->ifr_name);
if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) {
if (! (ifr.ifr_flags & IFF_LOOPBACK)) {
printf( "%s ", IFR->ifr_name );
if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) {
ok = 1;
printf( "MAC address = ");
for (ii=0; ii<6; ++ii) {
printf("%2.2x", (unsigned char)ifr.ifr_hwaddr.sa_data[ii]);
if ( ii < 5 ) printf( ":" );
}
printf( "\n");
}
}
}
}
close(s);
return 0;
}
int main( int argc, char **argv)
{
mac_addr_sys();
return 0;
}
para compilarlo
gcc -O2 -DLinux mac.c -o mac
las interfaces activas/con conexion a red, son las que se ven.
No te lies tanto Geca..
En windows llamarias al EXE externo así:
ComoseaenBennuGDparaejecutaruncomandodeconsola("comando_externo.exe < datos.txt");
Eso para crear un file donde se va a guardar el contenido de la respuesta de consola del comando.. si existia será sobreescrito.
ComoseaenBennuGDparaejecutaruncomandodeconsola("comando_externo.exe << datos.txt");
Eso para crear un file donde se va a guardar el contenido de la respuesta de consola del comando.. si existia se anexa al contenido..
Este tipo de redirección de consola es una plagiada del sistema Unix original.. así que en linux lo tienes idéntico o muy parecido.. siento no poder ayudarte mas y darte el comando exacto para linux, pero investiga esto por google:
"Re dirección de consola a un file".
Krammer, la redireccion de output es >, la que vos pones < es la de input, cuando pones >> (no <<) es output pero sin sobreescribir sino adicionando/agregando.
sin embargo lo que decis no aplica, primero porque eso solo sirve para comandos tipo system, donde lo que se ejecuta es el shell del operativo, en bennugd no se usa eso, sino que se usa algo similar a exec o spawn (segun el operativo), y para hacer lo que decis (desde bennugd) necesita ejecutar el shell y pasarle por parametros el externo + la redireccion, etc.
agregando mas peros, para lo que el necesita no sirve usar comandos externos, porque el esta buscando la MAC para su sistema DRM, y usar un comando externo para obtener datos que alimentan a un sistema de proteccion es una aberracion a la progracion y al diseño, que es lo que quise explicarle a Free, y que creo entendio perfectamente, por otro lado hackear un sistema asi (con comandos externos que alimentan al sistema de proteccion) es ridiculamente sencillo.
Oki doki.
Sip, puse el > al revés sorry.
Respecto al sistema de seguridad, no leí bien.