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ú

Temas - r1ghtz0

#1
Buenas gente, les cuento que cifre la particion boot de window 7 por error, he logrado decifrarla con una herramienta llamada dislocker para decifrar dispositivos con el cifrado bitlocker de windows, el problema es que al decifrarla logro montarla y ver el contenido pero cuando reinicio el pc no aparece la particion en el grub y luego entro a linux y veo que la particion no esta montada, entonces tengo que volverla a  decifrar y montarla para poder ver el contenido.
#2
Hola gente, me disculpan si estoy preguntando algo tonto pero es que de verdad no entiendo que quieren decir todos esos números de la tabla de valores normalizados de resistencias. Estoy estudiando electrónica porque me urge reparar tarjetas madres y fuentes de alimentación. Les diré que entiendo el porcentaje de tolerancia, código de colores, etc pero a la hora de ver la tabla no entiendo nada.
#3
Aquí está el servidor, lo que hago es ingresar los datos del servidor pero me gustaría ver cual es la ip que se le asigna al servidor con INADDR_ANY, ¿Como puedo hacer para ver la ip del server?

Servidor:
Código: c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(void)
{
/* Abriendo socket */
int sockfd, new_sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in cliente_addr;
int addrlen;

sockfd= socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
printf("Error abriendo el socket...");
}

/* Asociación de parámetros al socket */
server_addr.sin_family= AF_INET;
server_addr.sin_port= htons(1234);
server_addr.sin_addr.s_addr= htonl(INADDR_ANY);

if(bind(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr))==-1){
printf("\nError en bind()...");
}

/* Habilitamos el socket para recibir peticiones y establecer conexiones */
listen(sockfd, 5);
addrlen= sizeof(struct sockaddr);

/* Recibimos peticiones con accept() */
new_sockfd= accept(sockfd, (struct sockaddr *) &cliente_addr, &addrlen);
if(new_sockfd == -1){
printf("Error, no se pudo recibir petición correctamente");
}

return 0;
}



Ahora lo que no entiendo en el cliente es cómo se le asignan los datos, es decir, cómo o de donde el cliente optiene su puerto de origen  y su direción ip, porque no se especifican en ningun lado, solo estan los datos del servidor, es todo.

Cliente:
Código: c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(void)
{
struct sockaddr_in server;
char ip[16];
int fd, puerto;
int addrlen;

printf("Ingrese la ip del servidor\n");
scanf("%s", ip);

printf("Ingrese el puerto de conexión\n");
scanf("%d", &puerto);

/* Abrimos el socket */
fd= socket(AF_INET, SOCK_STREAM, 0);
if(fd==-1){
printf("Error abriendo el socket");
return -1;
}

/* Definimos los datos del servidor */
server.sin_family= AF_INET;
server.sin_port= htons(1234);
server.sin_addr.s_addr= inet_addr(ip);

addrlen= sizeof(struct sockaddr);

if(connect(fd, (struct sockaddr *)&server, addrlen) == -1){
printf("\nHa ocurrido un error al conectarce al server");
}


return 0;
}

#4
Buenas, en primer lugar les digo que no tengo bien claro lo que hacen o para qué sirven estas estructuras, he leído e investigado pero no consigo una explicación que me convenza y me aclare para que sirven o que hacen. Lo primero que les voy transmitir es lo que he entendido acerca de cada una de estas dos estructuras.

Vamos con la primera estructura, la struct sockaddr, esta es una estructura genérica y supuestamente define el dominio del socket, es decir, si el dominio va a ser AF_INET o AF_UNIX. Ahora lo que no entiendo es para qué son esos dos campos que tienen o que valor se les da a esos campos.
Código: c

struct sockaddr
{
   unsigned short sa_family;  /* familia de la dirección */
   char sa_data[14];          /* 14 bytes de la dirección del protocolo */ 
};

Vamos con la segunda estructura, la struct sockaddr_in, esta si la entiendo un poco más ya que especifica los parámetros del socket, la estructura TCP/IP es la estructura struct sockaddr_in, hasta aquí es todo lo que entiendo.
Código: c

struct sockaddr_in {
   short int sin_family;        /* 1.-Familia de la Dirección               */
   unsigned short int sin_port; /* 2.- Puerto                               */
   struct in_addr sin_addr;     
   unsigned char sin_zero[8];   /* 4.- Del mismo tamaño que struct sockaddr */
};


Ahora vamos el siguiente código:
Código: c

struct sockaddr_in Direccion;
Direccion.sin_family = AF_INET;
Direccion.sin_port = Puerto->s_port;
Direccion.sin_addr.s_addr =INADDR_ANY;

if (bind (Descriptor, (struct sockaddr *)&Direccion, sizeof (Direccion)) == -1)
{
    printf ("Error\n");
}


Como es posible que el puntero &Dirección de tipo struct sockaddr_in se convierta a uno de struct sockaddr *, si struct sockaddr_in tiene 4 campos y struct sockaddr solo tiene 2 campos. Entonces ve lo que sucede? Un puntero de tipo estructura de 4 campos se convierte a un puntero de tipo estructura de 2 campos.