int main(int argc, char *argv[]) { char buf[80]; pthread_attr_t attr; char *in_dev, *out_dev; int status; if (argc != 3) { fprintf(stderr, "usage: vrouter <in_dev> <out_dev>\n"); return 1; } in_dev = argv[1]; out_dev = argv[2]; inet_aton(next_router_s, &next_router); debug_printf("NextRouter=%s\n", _inet_ntoa_r(&next_router, buf, sizeof(buf))); if (get_device_info(in_dev, device[0].hwaddr, &device[0].addr, &device[0].subnet, &device[0].netmask) == -1) { debug_printf("GetDeviceInfo:error:%s\n", in_dev); return -1; } if ((device[0].soc = init_raw_socket(in_dev, 1, 0)) == -1) { debug_printf("InitRawSocket:error:%s\n",in_dev); return -1; } if (get_device_info(out_dev, device[1].hwaddr, &device[1].addr, &device[1].subnet, &device[1].netmask) == -1) { debug_printf("GetDeviceInfo:error:%s\n", out_dev); return -1; } if ((device[1].soc = init_raw_socket(out_dev, 1, 0)) == -1) { debug_printf("InitRawSocket:error:%s\n",out_dev); return -1; } disable_ip_forward(); pthread_attr_init(&attr); if ((status = pthread_create(&buf_tid, &attr, buffer_thread, NULL)) != 0) { debug_printf("pthread_create:%s\n", strerror(status)); } signal(SIGPIPE, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); IP2MAC *ip2mac = ip_2_mac(get_opposite_dev(0), next_router.s_addr, NULL); debug_printf("router start\n"); router(); debug_printf("router end\n"); close(device[0].soc); close(device[1].soc); return 0; }
int main(int argc, char** argv) { struct parameters params; parse_args(argc, argv, ¶ms); int sockfd = init_raw_socket(params.interface); switch(params.query_type) { case IGMP_GENERAL_QUERY: general_query(sockfd, params.interface); break; case IGMP_GROUP_SPECIFIC_QUERY: group_specific_query(sockfd, params.interface, params.destaddr, params.multiaddr, params.max_resp_time); break; case IGMP_GROUP_AND_SOURCE_SPECIFIC_QUERY: group_and_source_specific_query(sockfd,params.interface, params.destaddr, params.multiaddr, ¶ms.sourceaddr, 1, params.max_resp_time); break; } return EXIT_SUCCESS; }
static int init_tcp_copy() { select_sever_set_callback(dispose_event); raw_sock=init_raw_socket(); if(raw_sock!=-1) { select_sever_add(raw_sock); /*init sending info*/ send_init(); #if (MULTI_THREADS) pthread_t thread; pthread_mutex_init(&mutex,NULL); pthread_cond_init(&full,NULL); pthread_cond_init(&empty,NULL); pthread_create(&thread,NULL,dispose,NULL); #endif //add a connection to the tested server for exchanging infomation add_msg_connetion(local_port,remote_ip,remote_port); logInfo(LOG_NOTICE,"add a tunnel for exchanging information:%u", ntohs(remote_port)); return SUCCESS; }else { return FAILURE; } }
int main() { int sockfd; int size; u_char buf[65535]; if((sockfd=init_raw_socket("eth1")) == -1) return(-1); /* get_ether_info() { }*/ while (1) { if((size=read(sockfd, buf, sizeof(buf))) <= 0) perror("read()"); analyze_packet(buf, size); } close(sockfd); return(0); }
/* * C entry point */ int main (int argc, char *argv[]) { char* interface = NULL; signal( SIGINT, ctrl_c_exit ); pinfo( "%s running, Version: %s (Stop with CTRL-C SIGINT)", TARGET, VERSION); if( argc > 1 && (!strcmp( argv[1], "--help") || !strcmp( argv[1], "-h")) ) { pinfo("USAGE: %s [interface (like eth0)]", TARGET ); } else if( argc > 1 ) { interface = argv[1]; pinfo("Capture only on interface: %s", interface); } init_raw_socket( interface ); // never reached return 0; }
static int run_pig_run(const char *signatures, const char *targets, const char *timeout, const char *single_test, const char *gw_addr, const char *nt_mask, const char *loiface) { int timeo = 10000; pigsty_entry_ctx *pigsty = NULL; size_t signatures_count = 0, addr_count = 0; pigsty_entry_ctx *signature = NULL, *sp = NULL; pig_target_addr_ctx *addr = NULL, *addr_p = NULL; pig_hwaddr_ctx *hwaddr = NULL; int sockfd = -1; int retval = 0; unsigned int nt_mask_addr[4] = { 0, 0, 0, 0 }; unsigned char *gw_hwaddr = NULL, *temp = NULL; in_addr_t gw_in_addr = 0; if (timeout != NULL) { timeo = atoi(timeout); } timeo = timeo * 1000; if (!should_be_quiet) { printf("pig INFO: starting up pig engine...\n\n"); } sockfd = init_raw_socket(loiface); if (sockfd == -1) { printf("pig PANIC: unable to create the socket.\npig ERROR: aborted.\n"); return 1; } pigsty = load_signatures(signatures); if (pigsty == NULL) { printf("pig ERROR: aborted.\n"); deinit_raw_socket(sockfd); return 1; } if (targets != NULL) { if (!should_be_quiet) { printf("\npig INFO: parsing the supplied targets...\n"); printf("pig INFO: all targets were parsed.\n"); } addr = parse_targets(targets); } if (is_targets_option_required(pigsty) && addr == NULL) { printf("pig PANIC: --targets option is required by some loaded signatures.\n"); deinit_raw_socket(sockfd); del_pigsty_entry(pigsty); return 1; } signatures_count = get_pigsty_entry_count(pigsty); if (!should_be_quiet) { printf("\npig INFO: done (%d signature(s) read).\n\n", signatures_count); } if (nt_mask == NULL) { printf("\npig PANIC: --net-mask option is required.\n"); deinit_raw_socket(sockfd); del_pigsty_entry(pigsty); return 1; } // WARN(Santiago): by now IPv4 only. if (verify_ipv4_addr(nt_mask) == 0) { printf("pig PANIC: --net-mask has an invalid ip address.\n"); deinit_raw_socket(sockfd); del_pigsty_entry(pigsty); return 1; } nt_mask_addr[0] = htonl(inet_addr(nt_mask)); if (gw_addr != NULL && loiface != NULL) { gw_in_addr = inet_addr(gw_addr); temp = get_mac_by_addr(gw_in_addr, loiface, 2); if (!should_be_quiet && temp != NULL) { gw_hwaddr = mac2byte(temp, strlen(temp)); printf("pig INFO: the gateway's physical address is \"%s\"...\n" "pig INFO: the local interface is \"%s\"...\n" "pig INFO: the network mask is \"%s\"...\n\n", temp, loiface, nt_mask); free(temp); } } if (gw_hwaddr != NULL) { signature = get_pigsty_entry_by_index(rand() % signatures_count, pigsty); if (single_test == NULL) { while (!should_exit) { if (signature == NULL) { continue; // WARN(Santiago): It should never happen. However... Sometimes... The World tends to be a rather weird place. } if (oink(signature, &hwaddr, addr, sockfd, gw_hwaddr, nt_mask_addr, loiface) != -1) { if (!should_be_quiet) { printf("pig INFO: a packet based on signature \"%s\" was sent.\n", signature->signature_name); } usleep(timeo); } signature = get_pigsty_entry_by_index(rand() % signatures_count, pigsty); } } else { retval = (oink(signature, &hwaddr, addr, sockfd, gw_hwaddr, nt_mask_addr, loiface) != -1 ? 0 : 1); if (retval == 0) { if (!should_be_quiet) { printf("pig INFO: a packet based on signature \"%s\" was sent.\n", signature->signature_name); } } } free(gw_hwaddr); } else { printf("\npig PANIC: unable to get the gateway's physical address.\n"); } del_pigsty_entry(pigsty); del_pig_target_addr(addr); del_pig_hwaddr(hwaddr); deinit_raw_socket(sockfd); return retval; }