Pues eso, ¿Qué opinan de FreeBSD (y de *BSD en general), lo han usado alguna vez? ¿Es más recomendable que GNU/Linux?
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úCita de: engel lex en 18 Agosto 2016, 01:19 AM
los mensajes ACK tienen un numero de secuencia, la cosa es que es un ataque quirúrgico con mucho conocimiento de ambas partes sobre redes no cifradas... si mandas el numero de secuencia correcto, desincronizas a los conectados, quedando tu sincronizado por lo que veo... este no será el hearth bleed de este año, por lo dificil que es
Cita de: engel lex en 17 Agosto 2016, 18:40 PM
como afecta, no se, ya que no se a cual vulnerabilidad te refieres
el ack (acknowdelege o "entendido" en español) es un mensaje de respuesta en apertura de comunicacion... la comunicacion tcp requiere de respuesta por cada mensaje para asegurar que la información llega entera, aqui entra el ack avisando que la información llego en cada caso, pero por lo que veo te refieres específicamente al del "saludo"
un pc quiere abrir una comunicación, envia syn (sincronización) al servidor, el servidor responde esto confirmando el syn, con syn-ack, pero aun requiere que el cliente confirme que sabe que la comunicación se abrió (espera el ack)
que vulnerabilidad es?
Cita de: engel lex en 19 Mayo 2016, 19:47 PM
no tenías un proyecto ya con sockets?
Cita de: ivancea96 en 19 Mayo 2016, 16:07 PM
Una variable extern significa que existe, pero está en otro lugar. Si declaras una variable extern y luego no la declaras de forma normal, verás que te da una "undefined reference" al enlazar. Es porque no encuentra su declaración.
Cita de: ivancea96 en 19 Mayo 2016, 15:38 PM
Como detalle:while(1) send(fd_client, "hola", 100, 0);
El tercer argumento es el tamaño de la cadena. En este caso, debería ser 4, o 5 si quieres enviar el caracter nulo.
A parte de eso: en el header declaras fd, fd_client y fs_server, como extern. En los main, debes usar esas variables. No tienes que declararlas de nuevo: ya están declaradas en ss.c. Quita las declaraciones de esas variables en los main, y prueba de nuevo.
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <strings.h>
#include "ss.h"
/* El número máximo de datos en bytes */
int fd, fd_client, fd_server;
int client(char ip[25], int port)
{
/* ficheros descriptores */
char buf[MAXDATASIZE];
/* en donde es almacenará el texto recibido */
struct hostent *he;
/* estructura que recibirá información sobre el nodo remoto */
struct sockaddr_in server;
/* información sobre la dirección del servidor */
if ((he=gethostbyname(ip))==NULL){
/* llamada a gethostbyname() */
printf("gethostbyname() error\n");
return(1);
}
if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){
/* llamada a socket() */
printf("socket() error\n");
return(1);
}
server.sin_family = AF_INET;
server.sin_port = htons(port);
/* htons() es necesaria nuevamente ;-o */
server.sin_addr = *((struct in_addr *)he->h_addr);
/*he->h_addr pasa la información de ``*he'' a "h_addr" */
bzero(&(server.sin_zero),8);
if(connect(fd, (struct sockaddr *)&server,
sizeof(struct sockaddr))==-1){
/* llamada a connect() */
printf("connect() error\n");
return(1);
}
return(0);
}
int server(int port) {
struct sockaddr_in server;
/* para la información de la dirección del servidor */
struct sockaddr_in client;
/* para la información de la dirección del cliente */
int sin_size;
/* A continuación la llamada a socket() */
if ((fd_server=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n");
return(1);
}
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = INADDR_ANY;
/* INADDR_ANY coloca nuestra dirección IP automáticamente */
bzero(&(server.sin_zero),8);
/* escribimos ceros en el reto de la estructura */
/* A continuación la llamada a bind() */
if(bind(fd_server,(struct sockaddr*)&server,
sizeof(struct sockaddr))==-1) {
printf("error en bind() \n");
return(1);
}
if(listen(fd_server,2) == -1) { /* llamada a listen() */
printf("error en listen()\n");
return(1);
}
sin_size=sizeof(struct sockaddr_in);
/* A continuación la llamada a accept() */
if ((fd_client = accept(fd_server,(struct sockaddr *)&client,
&sin_size))==-1) {
printf("error en accept()\n");
return(1);
}
return(0);
}
#define MAXDATASIZE 100
extern int fd;
extern int fd_client;
extern int fd_server;
int client(char[], int);
int server(int);
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <strings.h>
#include "ss.h"
int fd_client;
int fd_server;
void main() {
if((server(3550))==1) printf("hubo un fallo abriendo el socket");
while(1) send(fd_client, "hola", 100, 0);
close(fd_client);
}
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <strings.h>
#include "ss.h"
void main() {
int fd;
char buf[100];
int numbytes;
if((client("localhost", 3550))==1) printf("hubo un fallo abriendo el socket");
while(1){
if((numbytes=recv(fd,buf,100,0))==-1) printf("error recv");
buf[numbytes]='\0';
printf("%s", buf);
}
close(fd);
}
Cita de: ivancea96 en 19 Mayo 2016, 13:47 PM
Coloca paréntesis:if((numbytes=recv(fd,buf,100,0))==-1)