예제 #1
0
void client_event_log_csv(client_event * e) {
  switch (e->type) {
  case CLIENT_EVENT_TO_AP:
    printf("to_ap");
    break;
  case CLIENT_EVENT_FROM_AP:
    printf("from_ap");
    break;
  case CLIENT_EVENT_INTER_HOST:
    printf("inter_host");
    break;
  default:
    printf("unknown_type");
    break;
  }
  printf(",%llu,%d,%d,", (unsigned long long)e->timestamp.tv_sec, e->rssi, (int)e->data_size);
  print_hardware_address(e->client);
  putc(',', stdout);
  print_hardware_address(e->accessPoint);
  if (e->request_info != NULL) {
    putc(',', stdout);
    print_csv_escaped(e->request_info->path);
    putc(',', stdout);
    print_csv_escaped(e->request_info->host);
    putc(',', stdout);
    print_csv_escaped(e->request_info->user_agent);
  } else {
    printf(",,,");
  }
  if (e->response_info != NULL) {
    printf(",\"");
    int headerIdx;
    for (headerIdx = 0; headerIdx < e->response_info->header_count; ++headerIdx) {
      if (headerIdx != 0) {
        putc('\n', stdout);
      }
      print_quote_escaped(e->response_info->header_names[headerIdx]);
      printf(": ");
      print_quote_escaped(e->response_info->header_values[headerIdx]);
    }
    printf("\"\n");
  } else {
    printf(",\n");
  }
  fflush(stdout);
}
예제 #2
0
/* determines hardware address on client machine */
int get_hardware_address(int sock,char *interface_name){

#if defined(__linux__)
	struct ifreq ifr;

	strncpy((char *)&ifr.ifr_name,interface_name,sizeof(ifr.ifr_name)-1);
	ifr.ifr_name[sizeof(ifr.ifr_name)-1]='\0';

	/* try and grab hardware address of requested interface */
	if(ioctl(sock,SIOCGIFHWADDR,&ifr)<0){
                printf(_("Error: Could not get hardware address of interface '%s'\n"),interface_name);
		exit(STATE_UNKNOWN);
	        }

	memcpy(&client_hardware_address[0],&ifr.ifr_hwaddr.sa_data,6);

#elif defined(__bsd__)
						/* King 2004	see ACKNOWLEDGEMENTS */

        int                     mib[6], len;
        char                    *buf;
        unsigned char           *ptr;
        struct if_msghdr        *ifm;
        struct sockaddr_dl      *sdl;

        mib[0] = CTL_NET;
        mib[1] = AF_ROUTE;
        mib[2] = 0;
        mib[3] = AF_LINK;
        mib[4] = NET_RT_IFLIST;

        if((mib[5] = if_nametoindex(interface_name)) == 0){
                printf(_("Error: if_nametoindex error - %s.\n"), strerror(errno));
                exit(STATE_UNKNOWN);
		}

        if(sysctl(mib, 6, NULL, &len, NULL, 0) < 0){
                printf(_("Error: Couldn't get hardware address from %s. sysctl 1 error - %s.\n"), interface_name, strerror(errno));
                exit(STATE_UNKNOWN);
		}

        if((buf = malloc(len)) == NULL){
                printf(_("Error: Couldn't get hardware address from interface %s. malloc error - %s.\n"), interface_name, strerror(errno));
                exit(4);
		}

        if(sysctl(mib, 6, buf, &len, NULL, 0) < 0){
                printf(_("Error: Couldn't get hardware address from %s. sysctl 2 error - %s.\n"), interface_name, strerror(errno));
                exit(STATE_UNKNOWN);
		}

        ifm = (struct if_msghdr *)buf;
        sdl = (struct sockaddr_dl *)(ifm + 1);
        ptr = (unsigned char *)LLADDR(sdl);
        memcpy(&client_hardware_address[0], ptr, 6) ;
						/* King 2004 */

#elif defined(__sun__) || defined(__solaris__)

						/* Kompf 2000-2003	see ACKNOWLEDGEMENTS */
	long stat;
	char dev[20] = "/dev/";
	char *p;
	int unit;

    /* get last number from interfacename, eg lnc0, e1000g0*/
    int i;
    p = interface_name + strlen(interface_name) -1;
	for(i = strlen(interface_name) -1; i > 0; p--) {
		if(isalpha(*p))
            break;
    }
    p++;
	if( p != interface_name ){
		unit = atoi(p) ;
		strncat(dev, interface_name, 6) ;
		}
	else{
		printf(_("Error: can't find unit number in interface_name (%s) - expecting TypeNumber eg lnc0.\n"), interface_name);
		exit(STATE_UNKNOWN);
		}
	stat = mac_addr_dlpi(dev, unit, client_hardware_address);
	if(stat != 0){
		printf(_("Error: can't read MAC address from DLPI streams interface for device %s unit %d.\n"), dev, unit);
		exit(STATE_UNKNOWN);
		}

#elif defined(__hpux__)

	long stat;
	char dev[20] = "/dev/dlpi" ;
	int unit = 0;

	stat = mac_addr_dlpi(dev, unit, client_hardware_address);
	if(stat != 0){
		printf(_("Error: can't read MAC address from DLPI streams interface for device %s unit %d.\n"), dev, unit);
		exit(STATE_UNKNOWN);
		}
						/* Kompf 2000-2003 */

#else
	printf(_("Error: can't get MAC address for this architecture.  Use the --mac option.\n"));
	exit(STATE_UNKNOWN);
#endif

	if(verbose)
		print_hardware_address(client_hardware_address);

	return OK;
        }
예제 #3
0
int call_getopt(int argc, char **argv){
	int c=0;
	int i=0;

	int option_index = 0;
	static struct option long_options[] =
	{
		{"serverip",       required_argument,0,'s'},
		{"requestedip",    required_argument,0,'r'},
		{"timeout",        required_argument,0,'t'},
		{"interface",      required_argument,0,'i'},
		{"mac",            required_argument,0,'m'},
		{"unicast",        no_argument,      0,'u'},
		{"verbose",        no_argument,      0,'v'},
		{"version",        no_argument,      0,'V'},
		{"help",           no_argument,      0,'h'},
		{0,0,0,0}
	};

	while(1){
		c=getopt_long(argc,argv,"+hVvt:s:r:t:i:m:u",long_options,&option_index);

		i++;

		if(c==-1||c==EOF||c==1)
			break;

		switch(c){
		case 'w':
		case 'r':
		case 't':
		case 'i':
			i++;
			break;
		default:
			break;
		        }

		switch(c){

		case 's': /* DHCP server address */
			resolve_host(optarg,&dhcp_ip);
			add_requested_server(dhcp_ip);
			break;

		case 'r': /* address we are requested from DHCP servers */
			resolve_host(optarg,&requested_address);
			request_specific_address=TRUE;
			break;

		case 't': /* timeout */

			/*
			if(is_intnonneg(optarg))
			*/
			if(atoi(optarg)>0)
				dhcpoffer_timeout=atoi(optarg);
			/*
			else
				usage("Time interval must be a nonnegative integer\n");
			*/
			break;

		case 'm': /* MAC address */

			if((user_specified_mac=mac_aton(optarg)) == NULL)
				usage("Cannot parse MAC address.\n");
			if(verbose)
				print_hardware_address(user_specified_mac);

			break;

		case 'i': /* interface name */

			strncpy(network_interface_name,optarg,sizeof(network_interface_name)-1);
			network_interface_name[sizeof(network_interface_name)-1]='\x0';

			break;

		case 'u': /* unicast testing */
			unicast=1;
			break;

		case 'V': /* version */
			print_revision(progname, NP_VERSION);
			exit(STATE_OK);

		case 'h': /* help */
			print_help();
			exit(STATE_OK);

		case 'v': /* verbose */
			verbose=1;
			break;

		case '?': /* help */
			usage5 ();
			break;

		default:
			break;
		        }
	        }

	return i;
        }