Example #1
0
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;
}
Example #2
0
int main(int argc, char** argv)
{
    struct parameters params;
    parse_args(argc, argv, &params);

    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,
                                        &params.sourceaddr, 1,
                                        params.max_resp_time);

        break;
    }

    return EXIT_SUCCESS;
}
Example #3
0
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;
	}

}
Example #4
0
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);

}
Example #5
0
File: netray.c Project: mw99/netray
/*
 * 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;
}
Example #6
0
File: main.c Project: huap/pig
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;
}