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); }
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."); }