void be_client(char *ip, int port) { t_socket sock; fd_set rdfs; char *ask; char *prompt; sock = init_connection(ip, port); while (1) { init_socks(sock, &rdfs); if (FD_ISSET(STDIN_FILENO, &rdfs)) client_in(sock); else if (FD_ISSET(sock, &rdfs)) { client_out(sock); ask = ft_strdup("/gp\n"); ft_send(sock, ask); free(ask); prompt = get_message(sock); ft_putstr("\n"); ft_putstr(prompt); free(prompt); } } }
int main(int argc, char **argv){ /* using device name */ char *device_name; /* pcap error message buffer */ char ebuf[PCAP_ERRBUF_SIZE]; /* pcap_compile */ char *cmdbuf; int Oflag = 1; struct bpf_program fcode; bpf_u_int32 localnet, netmask; int timeout = 1000; if(set_sighdl() < 0){ perror("set signal handler(SIGINT):"); exit(1); } if(!get_option(argc, argv)){ printf("Syntax Error...\n"); printf("Usage:goblin [-i interface] [-c \"condition\"] [-m rst/tail] [-t n(msec)]\n"); exit(1); } sum_packet = 0; sum_ack = 0; sum_syn = 0; if((mode = set_mode(argv)) == 0){ printf("Undefined Mode (\"rst\" or \"tail\")\n"); exit(1); } if((timeout = set_timeout(mode,argv)) == 0){ printf("Illigal Time < 0\n"); exit(1); } init_socks(); if(option.i != 0){ device_name = (char*)malloc( (strlen(argv[option.i]) + 1) * sizeof(char) ); strcpy(device_name,argv[option.i]); } else{ if((device_name = pcap_lookupdev(ebuf)) == NULL){ fprintf(stderr,"%s\n",ebuf); exit(1); } } printf("PROMISC DEV: %s\n",device_name); // pd = pcap_open_live(device_name, DEFAULT_LEN, 1, 1000, ebuf); pd = pcap_open_live(device_name, ETHER_MAX_LEN, 1, timeout, ebuf); if(option.i != 0) free(device_name); if(pd == NULL){ fprintf(stderr,"%s\n",ebuf); exit(1); } if (pcap_lookupnet(device_name, &localnet, &netmask, ebuf) < 0) { localnet = 0; netmask = 0; fprintf(stderr,"%s", ebuf); exit(1); } if(option.c != 0){ cmdbuf = argv[option.c]; if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0){ fprintf(stderr,"%s", pcap_geterr(pd)); exit(1); } if (pcap_setfilter(pd, &fcode) < 0){ fprintf(stderr,"%s", pcap_geterr(pd)); exit(1); } } switch(mode){ case 't': if( pcap_loop(pd, -1, capture_packet, NULL) < 0 ){ fprintf(stdout,"pcap_loop:%s\n",pcap_geterr(pd)); exit(1); } break; case 'r': if( pcap_loop(pd, -1, discriminate_packet, NULL) < 0 ){ fprintf(stdout,"pcap_loop:%s\n",pcap_geterr(pd)); exit(1); } break; } return 0; }
/* client Spad server sockets. Two sockets are created: server[0] is the internet server socket, and server[1] is a local domain socket. */ int open_server(char *server_name) { char *s, name[256]; init_socks(); #ifndef HAVE_MSG_NOSIGNAL #ifdef SIGPIPE bsdSignal(SIGPIPE, sigpipe_handler,RestartSystemCalls); #endif #endif if (make_server_name(name, server_name) == -1) return -2; /* create the socket internet socket */ server[0].socket = 0; /* server[0].socket = fricas_communication_link(AF_INET); if (is_invalid_socket(&server[0])) { server[0].socket = 0; } else { server[0].addr.i_addr.sin_family = AF_INET; server[0].addr.i_addr.sin_addr.s_addr = INADDR_ANY; server[0].addr.i_addr.sin_port = 0; if (bind(server[0].socket, &server[0].addr.i_addr, sizeof(server[0].addr.i_addr))) { perror("binding INET stream socket"); server[0].socket = 0; return -1; } length = sizeof(server[0].addr.i_addr); if (getsockname(server[0].socket, &server[0].addr.i_addr, &length)) { perror("getting INET server socket name"); server[0].socket = 0; return -1; } server_port = ntohs(server[0].addr.i_addr.sin_port); FD_SET(server[0].socket, &socket_mask); FD_SET(server[0].socket, &server_mask); listen(server[0].socket,5); } */ /* Next create the local domain socket */ server[1].socket = fricas_communication_link(FRICAS_AF_LOCAL); if (is_invalid_socket(&server[1])) { perror("opening local server socket"); server[1].socket = 0; return -2; } else { server[1].addr.u_addr.sa_family = FRICAS_AF_LOCAL; memset(server[1].addr.u_addr.sa_data, 0, sizeof(server[1].addr.u_addr.sa_data)); strcpy(server[1].addr.u_addr.sa_data, name); if (bind(server[1].socket, &server[1].addr.u_addr, sizeof(server[1].addr.u_addr))) { perror("binding local server socket"); server[1].socket = 0; return -2; } FD_SET(server[1].socket, &socket_mask); FD_SET(server[1].socket, &server_mask); listen(server[1].socket, 5); } s = getenv("SPADSERVER"); if (s == NULL) { /* fprintf(stderr, "Not a spad server system\n"); */ return -1; } return 0; }