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 - franxi2953

#1
Dudas y pedidos generales / Re:code
Agosto 03, 2011, 12:20:28 PM
no lo mire entero pero hay un if mal, revisalo

" if (operacionx<5)" eso es si operacionx es menor que 5 no que 0
#2
con ponerla a 0 no basta, tengo que hacer un memset??

EDITO:sigue = con el memset u.u
#3
Dudas y pedidos generales / Re:Wumpus
Julio 11, 2011, 10:43:24 AM
encontre algunos ejemplos usando google, pero supongo que ya los habras visto. De todas formas me voy a poner ha hacer yo uno, que parece interesante, si lo consigo te lo paso =)


bueno esto me va a tardar asi que te voy contando...

para organizarte dibuja en un folo la cuadricula

1 2 3 4
2
3
4

yo lo estoy haciendo por POO (C++), he creado una clase que se llama objeto que contiene las filas y las columnas   (la situacion) del objeto, luego una subclase llamada jugador que contiene una variable int que compruba haci donde mira el jugador (0 abajo; 1 izq; 2 arriba; 3 der), despues he creado 4 objetos de la clase "objeto" (oro, salida, wunpus y pozo) y los colocas, despues creas funciones de movimiento (subir, bajar, mover izq, mover der) donde primero tendras que comprobar hacia donde mira el jugador, y si , por ejemplo, quiere girar a la derecha y no esta mirando hacia la derecha mostrar un error.

lo siguiente que tienes que hacer es hacer un while donde aparezcan los posibles movimientos y giros del jugador, y cuando el jugador elija su movimiento efectuar la funcion necesaria.Despues de que el jugador haya finalizado el turno tienes que avisar si hay cerca un pozo ,el wumpus o el oro (segun entendi en el reglamento), para dispara primero tienes que mirar hacia donde esta mirando, si mira abajo comprobar que el numero de fila del wumpus no sea menor que el del jugador ya que si no el wumpus estaria detras si miras hacia arriba al reves, y si miras hacia los lados es lo mismo pero con el numero de columnas.

declaras otra variable int llamada oro, la cual tomara valor 1 si encuentras el oro

despues has de declarar otra variable, final, inicializada a 0, si el jugador cae en un pozo o  encuentra con un wumpus vivo, esta toma 1, si encuentra la salida y la variable "encontrado" es 1 "final" toma valor 2.

por ultimo tienes que hacer que la condicion para el while se que si final es = a 0 el while se efectue.

alomejor me quedaron cabos sueltos y luego no funciona, pero creo que con esto te puedes hacer una buena idea, si tienes alguna duda pregunta ;)
#4
Bueno la cosa es que estoy haciendo un servidor/cliente en C, me han surgido bastantes errores pero los he ido arreglando hasta ahora, me pasa una cosa rarisima con el primer send que hago en el codigo, el fin de este send es enviar la longitud de la cadena que se mandara posteriormente, pero al iniciar ambos programas el servidor (donde esta el send) no envia nada y sale del programa sin haber ningun return.

Los dos programas los estoy corriendo en ubuntu, los dos, con la ip de mi red domestica (192.168.xxx.xxx)

el codigo:

CLIENTE

Código: c

#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>





int main (void)
{
    int sockfd,leido, longitud, total=0;
    struct addrinfo datos, *GuardarDatos;
    char *cadena;

    memset(&datos, '0', sizeof(struct addrinfo));

    datos.ai_family=AF_INET;
    datos.ai_socktype=SOCK_STREAM;
    datos.ai_protocol=0;
    datos.ai_flags=AI_PASSIVE;

    getaddrinfo("192.168.xxx.xxx","9000", &datos, &GuardarDatos);

    sockfd=socket(GuardarDatos->ai_family, GuardarDatos->ai_socktype,   GuardarDatos->ai_protocol);

    if(sockfd == -1)
    {
        printf("\nError al abrir el socket (funcion socket)\n");
        return -1;
    }

    if(connect(sockfd, GuardarDatos->ai_addr, GuardarDatos->ai_addrlen) == -1)
    {
        printf("\nConexion fallida (fallo en connect)\n");
        return -1;
    }

    leido=recv(sockfd, &longitud, sizeof(int), 0);

    if (leido == 0)
    {
        printf("\nError se ha hallado el socket cerrado\n al intentar obtener la longitud del mensaje\n");
        return -1;
    }

    cadena=(char *)malloc(longitud);

    while(longitud < total)
    {
        leido=recv(sockfd, &cadena[total], longitud-total, 0);
        total=total+leido;

        if (leido == 0)
        {
            printf("\nError se ha hallado el socket cerrado\n al intentar obtener el mensaje\n");
            return -1;
        }
    }

    printf("\nEl mensaje es: %s\n", cadena);

    free (cadena);
    freeaddrinfo(GuardarDatos);
    close(sockfd);

    printf("\nPulse una tecla para finalizar\n");
    fflush(stdin);
    getchar();
    return 0;
}     

     


SERVIDOR

Código: c
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<errno.h>



int main(void)
{
    int sockfd, acceptfd, total=0, escrito;
    struct addrinfo datos, *GuardarDatos;
    struct sockaddr_in cliente;
    socklen_t TamanoCliente=sizeof(struct sockaddr_in);
    char *cadena=(char *)malloc(12);
    ssize_t lcadena;

    memset(&datos, 0, sizeof(struct addrinfo));
    memset(GuardarDatos, 0, sizeof(struct addrinfo));

    printf("\nPor favor intoduzca la cadena a enviar:");
    fgets(cadena,12*sizeof(char),stdin);
    printf("\n");

    lcadena=strlen(cadena);

    datos.ai_socktype=SOCK_STREAM;
    datos.ai_family=AF_INET;
    datos.ai_protocol=0;
    datos.ai_flags=AI_PASSIVE;

    getaddrinfo("192.168.xxx.xxx","9000",&datos,&GuardarDatos);

    sockfd=socket(datos.ai_family, datos.ai_socktype, datos.ai_protocol);
    if (sockfd == -1)
    { 
        printf("\nerror en socket\n");
        return -1;
    }

    if(bind(sockfd, GuardarDatos->ai_addr, GuardarDatos->ai_addrlen)==-1)
    {
        printf("\nerror en bind\n");
        return -1;
    }

    printf("\nPoniendo socket a la escucha...\n");

    if(listen(sockfd, 1)==-1)
    {
        printf("\nerror en listen\n");
        return -1;
    }

    acceptfd=accept(sockfd, (struct sockaddr*)&cliente, &TamanoCliente);

    if(acceptfd==-1)
    {
        printf("\nerror en accept\n");
        return -1;
    }

    escrito=send(sockfd, &lcadena, 1, 0); 

    if (escrito == 0)
    {
        printf("\nError, no se ha podido mandar el mensaje\n");
        return -1;
    }

    while(total<leido)
    {
        escrito=send(sockfd, &cadena[total], lcadena-total, 0);
        total=total + escrito;
    }
    printf("\ndespues del while\n");

        if(leido > lcadena)
    {
        printf("\nError, no se ha podido enviar la cadena completa\n");
        return -1;
    }

    close(sockfd);     

    printf("\nSe ha enviado su caracter correctamente\nPulse una tecla para finalizar\n");
    fflush(stdin);
    getchar();
   
    return 0;
}
#5
Dudas y pedidos generales / Re:duda memset =)
Junio 22, 2011, 06:01:21 AM
Citaren caso de que el tamaño de la memoria reservada (malloc no inicializa a nada) sea igual al largo de la cadena si...

amm entiendo; es decir que para llenar toda la cadena de 0 tendria que poner como 2º parametro el tamaño reservado por malloc no strlen(cadena) porque si no solo me mira caracteres hasta \0 no?


Citarla respuesta es claramente obvia ... haz ese printf y adios duda ;) .
;D la cosa es si se me llena la cadena entera de 0 poniendo strlen mas que lo del printf, eso se me ocurrio preguntarlo ya de paso  :)
#6
bueno los que suelen meterse a irc estaran ya artos de mis dudas de c   :)

la cosa es que esta vez no habia nadie que supiera de c conectado y ANTRAX me recomendo preguntar aqui asi que:

si yo tengo una cadena char *cadena, a la que he reservado memoria con malloc y le hago un memset(cadena, 0, strlen(cadena)), se llena toda la cadena de 0 no?,  si yo luego lleno la mitad de la cadena, la otra mitad sigue con 0 como quedaria? asi ([h][una o][l][a][m][una u][n][d][una o][\0][0][0])? si le hago un printf por ejemplo, aparecen estos 0 o solo hasta \0?? y si le hago un fwrite??
#7
buf pues en la maquina virtual me aparece el proceso iexplorer sin tener abierto el internet explorer y cuando lo elimino me reaparece 0.0"
#8
una cosa, si lo inyectas, por ejemplo en internet explorer, el proceso toma el nombre del programa en el que se ha inyectado no? (en este caso IEXPLORER.exe)

y luego, no se puede hacer que se conecte el server de una maquina virtual al cliente en el mismo ordenador pero fuera de la maquina virtual??

grax
#9
vale todo entendido gracias por la respuesta :)
#10
hola q tal estoy con el poison ivy y tengo una preguntas;
¿que hace la opcion de persistance?
¿el hklm/run name es el nombre del proceso verdad? entonces si yo lo que quiero es inyectarlo en otro proceso no me deberia ser necesario poner esto no?
¿porque si pongo cualquier otro nombre aparte de windll32 me pide extension y si pongo ese no; es un archivo ya existente en el sistema?
"El troyano deberá instalarse en la carpeta system con el
nombre de directorio "Winrun"" esto significa que lo tengo que instalar en una carpeta dentro de la del sistema con el nombre de Winrun, no?, donde configuro esto?

grax y perdonad por mi estupidez =)