Leer el output de una instrución de consola con Bennu ?

Started by FreeYourMind, June 17, 2011, 05:15:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

puff no lo sabia! voy a probar de nuevo (así ya no me mola  :()

SplinterGU

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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Krammer

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".

SplinterGU

#18
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.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Krammer

Oki doki.
Sip, puse el > al revés sorry.
Respecto al sistema de seguridad, no leí bien.