void DummyInterface::forgeFlow(u_int iteration) {
  char payload[256];
  u_int32_t srcIp = 0xC0A80000;
  u_int32_t dstIp = 0x0A000000;
  u_int id, mval = 1+(ntop->getPrefs()->get_max_num_hosts()/ntop->getPrefs()->get_max_num_flows());
  time_t now = time(NULL);

  id = iteration % ntop->getPrefs()->get_max_num_hosts();
  srcIp += id, dstIp += id;
  
  for(u_int i=0; i<mval; i++) {
    char a[32], b[32];
    u_int16_t sport = 1234+i, dport = 80;

    snprintf(payload, sizeof(payload), 
	     "{\"8\":\"%s\",\"12\":\"%s\",\"10\":0,\"14\":0,\"2\":%u,\"1\":%u,\"22\":%lu,\"21\":%lu,\"7\":%u,\"11\":%u,\"6\":0,\"4\":17,\"5\":0,\"16\":0,\"17\":0,\"9\":0,\"13\":0,\"42\":297}",
	     Utils::intoaV4(srcIp, a, sizeof(a)),
	     Utils::intoaV4(dstIp, b, sizeof(b)),
	     iteration, iteration*1500,
	     now-60, now, sport, dport);

    parse_flows(payload, sizeof(payload), 1 /* source_id */, this /* iface */);
  }

  if(id == 0) sleep(1);
}
int HistoricalInterface::sqlite_callback(void *data, int argc,
           char **argv, char **azColName) {
  for(int i=0; i<argc; i++) {
    // Inject only the json information
    if ( (strcmp( (const char*)azColName[i], "json") == 0 ) &&
         (char*)(argv[i]) ) {

      parse_flows( (char*)(argv[i]) , sizeof((char*)(argv[i])) , 0, data);
    }
  }
  return(0);
}
Exemple #3
0
void CollectorInterface::collect_flows() {
  struct zmq_msg_hdr h;
  char payload[8192];
  u_int payload_len = sizeof(payload)-1;
  zmq_pollitem_t items[CONST_MAX_NUM_ZMQ_SUBSCRIBERS];
  int rc, size;

  ntop->getTrace()->traceEvent(TRACE_NORMAL, "Collecting flows on %s", ifname);

  while(isRunning()) {
    while(idle()) {
      purgeIdle(time(NULL));
      sleep(1);
      if(ntop->getGlobals()->isShutdown()) return;
    }

    for(int i=0; i<num_subscribers; i++)
      items[i].socket = subscriber[i].socket, items[i].fd = 0, items[i].events = ZMQ_POLLIN, items[i].revents = 0;

    do {
      rc = zmq_poll(items, num_subscribers, 1000 /* 1 sec */);
      if((rc < 0) || (!isRunning())) return;
      if(rc == 0) purgeIdle(time(NULL));
    } while(rc == 0);

    for(int source_id=0; source_id<num_subscribers; source_id++) {
      if(items[source_id].revents & ZMQ_POLLIN) {
	size = zmq_recv(items[source_id].socket, &h, sizeof(h), 0);

	if((size != sizeof(h)) || (h.version != MSG_VERSION)) {
	  ntop->getTrace()->traceEvent(TRACE_WARNING,
				       "Unsupported publisher version [%d]: your nProbe sender is outdated?",
				       h.version);
	  continue;
	}

	size = zmq_recv(items[source_id].socket, payload, payload_len, 0);

	if(size > 0) {
	  payload[size] = '\0';

	  parse_flows(payload, sizeof(payload) , source_id, this);

	  ntop->getTrace()->traceEvent(TRACE_INFO, "[%u] %s", h.size, payload);
	}
      }
    } /* for */
  }

  ntop->getTrace()->traceEvent(TRACE_NORMAL, "Flow collection is over.");
}