Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: FreeYourMind on June 17, 2011, 05:15:19 PM

Title: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 17, 2011, 05:15:19 PM
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 ?
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 17, 2011, 07:23:26 PM
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.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 17, 2011, 08:22:46 PM
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 ?
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 17, 2011, 09:11:45 PM
no, no puede estar en la mochila.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: 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...
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: 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...
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: 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
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 17, 2011, 11:26:26 PM
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.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 18, 2011, 12:16:00 AM
Jolin, dame soluciones no problemas :)
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 18, 2011, 12:43:53 AM
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...
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 18, 2011, 12:50:55 AM
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/
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 18, 2011, 01:07:21 AM
Gracias, solo espero que no me salgan dependencias en falta :)
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 18, 2011, 01:26:49 AM
lo tendrias que adaptar a un modulo bennugd o agregarlo a algun modulo de red existente.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 19, 2011, 02:20:42 PM
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....
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 19, 2011, 03:25:52 PM
obviamente tenes que tener la conexion de red establecida para obtener la MAC address.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: FreeYourMind on June 19, 2011, 03:30:17 PM
puff no lo sabia! voy a probar de nuevo (así ya no me mola  :()
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 19, 2011, 03:46:16 PM
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.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: Krammer on June 21, 2011, 04:44:45 AM
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".
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: SplinterGU on June 21, 2011, 05:09:01 AM
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.
Title: Re: Leer el output de una instrución de consola con Bennu ?
Post by: Krammer on June 21, 2011, 06:25:15 AM
Oki doki.
Sip, puse el > al revés sorry.
Respecto al sistema de seguridad, no leí bien.