⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个Windows下的Linux专用虚拟机
💻 C
📖 第 1 页 / 共 2 页
字号:
                exit_code = -1;                goto pcap_out_close;	}	device = found_device;	/* Open the first adapter. */	if ((adhandle = pcap_open_live(device->name,	// name of the device				       65536,	// captures entire packet.				       daemon_parameters->promisc,	// promiscuous mode				       1,	// read timeout				       errbuf	// error buffer	     )) == NULL) {		co_terminal_print("conet-bridged-daemon: unable to open the adapter.\n");		exit_code = -1;		goto pcap_out_close;	}	/* Check the link layer. We support only Ethernet because coLinux	 * only talks 802.3 so far.	 */	if (pcap_datalink(adhandle) != DLT_EN10MB) {		co_terminal_print("conet-bridged-daemon: this program works only on 802.3 Ethernet networks.\n");		exit_code = -1;		goto pcap_out_close;	}	if (device->addresses != NULL) {		/* Retrieve the mask of the first address of the interface */		netmask =		    ((struct sockaddr_in *) (device->addresses->netmask))->sin_addr.		    S_un.S_addr;	} else {		/* If the interface is without addresses we suppose to be in a C		 * class network		 */		netmask = 0xffffff;	}	//compile the filter	if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) < 0) {		co_terminal_print("conet-bridged-daemon: unable to compile the packet filter. Check the syntax.\n");		exit_code = -1;		goto pcap_out_close;	}	//set the filter	if (pcap_setfilter(adhandle, &fcode) < 0) {		co_terminal_print("conet-bridged-daemon: error setting the filter.\n");		exit_code = -1;		goto pcap_out_close;	}	co_terminal_print("conet-bridged-daemon: listening on: %s...\n", device->description);	co_terminal_print("conet-bridged-daemon: listening for: %s\n", packet_filter);	if (daemon_parameters->promisc == 0)	// promiscuous mode?		co_terminal_print("conet-bridged-daemon: Promiscuous mode disabled\n");	pcap_packet.adhandle = adhandle;      pcap_out_close:	// At this point, we don't need any more the device list. Free it	pcap_freealldevs(alldevs);      pcap_out:	return exit_code;}/******************************************************************************** * parameters */void co_net_syntax(){	co_terminal_print("Cooperative Linux Bridged Network Daemon\n");	co_terminal_print("Alejandro R. Sedeno, 2004 (c)\n");	co_terminal_print("Dan Aloni, 2003-2004 (c)\n");	co_terminal_print("\n");	co_terminal_print("syntax: \n");	co_terminal_print("\n");	co_terminal_print("  colinux-bridged-net-daemon -i pid -u unit [-h] [-n 'adapter name'] [-mac xx:xx:xx:xx:xx:xx] [-p promiscuous]\n");	co_terminal_print("\n");	co_terminal_print("    -h                      Show this help text\n");	co_terminal_print("    -i pid                  coLinux instance ID to connect to\n");	co_terminal_print("    -u unit                 Network device index number (0 for eth0, 1 for\n");	co_terminal_print("                            eth1, etc.)\n");	co_terminal_print("    -n 'adapter name'       The name of the network adapter to attach to\n");	co_terminal_print("                            Without this option, the daemon tries to\n");	co_terminal_print("                            guess which interface to use\n");	co_terminal_print("    -mac xx:xx:xx:xx:xx:xx  MAC address for the bridged interface\n");	co_terminal_print("    -p mode                 Promiscuous mode can disable with mode 0, if\n");	co_terminal_print("                            have problems. It's 1 (enabled) by default\n");}static co_rc_t handle_parameters(start_parameters_t *start_parameters, int argc, char *argv[]){	char **param_scan = argv;	const char *option;	/* Default settings */	start_parameters->index = -1;	start_parameters->instance = -1;	start_parameters->show_help = PFALSE;	start_parameters->mac_specified = PFALSE;	start_parameters->name_specified = PFALSE;	start_parameters->promisc = 1;	/* Parse command line */	while (*param_scan) {		option = "-mac";		if (strcmp(*param_scan, option) == 0) {			param_scan++;			if (!(*param_scan)) {				co_terminal_print("conet-bridged-daemon: parameter of command line option %s not specified\n", option);				return CO_RC(ERROR);			}			co_snprintf(start_parameters->mac_address, 				    sizeof(start_parameters->mac_address), 				    "%s", *param_scan);			start_parameters->mac_specified = PTRUE;			param_scan++;			continue;		}		option = "-u";		if (strcmp(*param_scan, option) == 0) {			param_scan++;			if (!(*param_scan)) {				co_terminal_print("conet-bridged-daemon: parameter of command line option %s not specified\n", option);				return CO_RC(ERROR);			}			start_parameters->index = atoi(*param_scan);			param_scan++;			continue;		}		option = "-i";		if (strcmp(*param_scan, option) == 0) {			param_scan++;			if (!(*param_scan)) {				co_terminal_print("conet-bridged-daemon: parameter of command line option %s not specified\n", option);				return CO_RC(ERROR);			}			start_parameters->instance = (co_id_t) atoi(*param_scan);			param_scan++;			continue;		}		option = "-n";		if (strcmp(*param_scan, option) == 0) {			param_scan++;			if (!(*param_scan)) {				co_terminal_print("conet-bridged-daemon: parameter of command line option %s not specified\n", option);				return CO_RC(ERROR);			}			co_snprintf(start_parameters->interface_name, 				    sizeof(start_parameters->interface_name), 				    "%s", *param_scan);			start_parameters->name_specified = PTRUE;			param_scan++;			continue;		}		option = "-p";		if (strcmp(*param_scan, option) == 0) {			param_scan++;			if (!(*param_scan)) {				co_terminal_print("conet-bridged-daemon: parameter of command line option %s not specified\n", option);				return CO_RC(ERROR);			}			start_parameters->promisc = atoi(*param_scan);			param_scan++;			continue;		}		option = "-h";		if (strcmp(*param_scan, option) == 0) {			start_parameters->show_help = PTRUE;			return CO_RC(OK);		}		param_scan++;	}	if (start_parameters->index == -1) {		co_terminal_print("conet-bridged-daemon: device index not specified\n");		return CO_RC(ERROR);	}	if ((start_parameters->index < 0) ||	    (start_parameters->index >= CO_MODULE_MAX_CONET)) 	{		co_terminal_print("conet-bridged-daemon: invalid index: %d\n", start_parameters->index);		return CO_RC(ERROR);	}	if (start_parameters->instance == -1) {		co_terminal_print("conet-bridged-daemon: coLinux instance not specificed\n");		return CO_RC(ERROR);	}	if (!start_parameters->mac_specified) {		co_terminal_print("conet-bridged-daemon: error, MAC address not specified\n");		return CO_RC(ERROR);	}	return CO_RC(OK);	}intconet_bridged_main(int argc, char *argv[]){	HANDLE pcap_thread;	co_rc_t rc;	start_parameters_t start_parameters;	co_module_t modules[] = {CO_MODULE_CONET0, };	int exit_code = 0;	rc = handle_parameters(&start_parameters, argc, argv);	if (!CO_OK(rc)) 		return -1;	if (start_parameters.show_help) {		co_net_syntax();		return 0;	}	daemon_parameters = &start_parameters;	exit_code = pcap_init();	if (exit_code) {		co_terminal_print("conet-bridged-daemon: error initializing winPCap\n");		goto out;	}	rc = co_reactor_create(&g_reactor);	if (!CO_OK(rc)) {		exit_code = -1;		goto out;	}	modules[0] += start_parameters.index;	rc = co_user_monitor_open(g_reactor, monitor_receive,				  start_parameters.instance, modules, 				  sizeof(modules)/sizeof(co_module_t),				  &g_monitor_handle);	if (!CO_OK(rc)) {		exit_code = -1;		goto out;	}	pcap_thread = CreateThread(NULL, 0, pcap2Daemon, NULL, 0, NULL);	if (pcap_thread == NULL) {		co_terminal_print("conet-bridged-daemon: failed to spawn pcap_thread\n");		goto out;	}	while (1) {		rc = co_reactor_select(g_reactor, -1);		if (!CO_OK(rc))			break;	}out:	ExitProcess(exit_code);	return exit_code;}/******************************************************************************** * main... */intmain(int argc, char *argv[]){	int ret;	co_debug_start();	co_process_high_priority_set();        	ret = conet_bridged_main(argc, argv);	co_debug_end();    	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -