I supposed that passing "80"/"host" as service parameter to getaddrinfo
will return web-socket on host. But instead of that (after passing
"www.google.com" as host) i obtained structure with filled ai_addr substructure (as sockaddr_in *) with port=20480. Full code:
Program was executed as a.out google.com 80Code:#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <errno.h> #include <string.h> #include <netinet/in.h> extern int errno; extern int h_errno; #define arrsize(x) sizeof(x)/sizeof(x[0]) static struct addrinfo *pp=NULL; static struct addrinfo **ServerSocketAddresses=&pp;//&pp; static void print_error(const char *file, const int line, const char *func, const char *lib_fn, const char *err_msg) { fprintf(stderr, "Program fails in %s:%s:%d:\n after calling of %s: %s\n", file, func, line, lib_fn, err_msg); exit(1); } #define wrap_print_error(fn, err_msg) print_error(__FILE__, __LINE__, __FUNCTION__ , fn, err_msg) #define wrap_print_sys_error(fn) wrap_print_error(fn, strerror(errno)) #define wrap_print_net_error(fn, errc) wrap_print_error(fn, gai_strerror(errc)) static struct addrinfo *get_server_info(const char *host, const char *port) { int l_error; struct addrinfo *OneSocketAddr; /* struct addrinfo hint; // hint.ai_family=AF_UNSPEC; hint.ai_socktype=SOCK_STREAM; hint.ai_flags=(AI_V4MAPPED | AI_ADDRCONFIG); */ l_error=getaddrinfo(host, port, NULL, ServerSocketAddresses); if (l_error<0) { if (l_error==EAI_SYSTEM) wrap_print_sys_error("getaddrinfo: system error: "); else wrap_print_net_error("getaddrinfo: ", l_error); return NULL; } OneSocketAddr=*ServerSocketAddresses; while(OneSocketAddr) { if ((OneSocketAddr->ai_family==AF_INET)&&(OneSocketAddr->ai_socktype==SOCK_STREAM)&& (OneSocketAddr->ai_addr)) break; OneSocketAddr=OneSocketAddr->ai_next; } if (!OneSocketAddr) { fprintf(stderr, "No appropriate sockets on server available\n"); return NULL; } return OneSocketAddr; } int main (const int argc, const char **argv) { int fd_socket=0, res=1; struct addrinfo *server_addr; struct sockaddr_in *dummy;//=(struct sockaddr_in *)server_addr; // if (argc!=3) { fprintf(stderr, "Usage: %s <host> <port>\n", argv[0]); goto l_err; } server_addr=get_server_info(argv[1], argv[2]); if (server_addr) { fprintf(stderr, "found socket with options %d\n", server_addr->ai_flags); } else goto l_err; // errors already are handled dummy=(struct sockaddr_in *)server_addr->ai_addr; fd_socket=socket(AF_INET, SOCK_STREAM, server_addr->ai_protocol); if (fd_socket<0) wrap_print_sys_error("socket"); //connect if (connect(fd_socket, server_addr->ai_addr, server_addr->ai_addrlen)) { wrap_print_sys_error("connect"); goto l_err; } { const char *data="GET www.google.com/ HTTP/1.0\n\n";//"Hello, server!"; int rc; // rc = write(fd_socket, data, arrsize(data)*sizeof(char)); if (rc<0) { wrap_print_sys_error("write"); goto l_err; } } // respond while (1) { char buf[32]; int rc; // rc=read(fd_socket, buf, arrsize(buf)-1); if (rc<0) { wrap_print_sys_error("read"); goto l_err; } else if (rc==0) // read EOF break; else { buf[rc]='\0'; fprintf(stdout, "%s", buf); } } fprintf(stdout, "\n"); res=0; l_err: if (fd_socket) close(fd_socket); if (ServerSocketAddresses) freeaddrinfo(*ServerSocketAddresses); return res; }
But others seem to not have such problems.
After bit googling found that, a scary one
Should i think i have trojan on my kubuntu or everything is much simpler as it use to be?



LinkBack URL
About LinkBacks


