static void dissector_init_ether_types(void) { FILE *fp; char buff[512], *ptr; struct ether_type *et; void **pos; fp = fopen("/etc/netsniff-ng/ether.conf", "r"); if (!fp) panic("No /etc/netsniff-ng/ether.conf found!\n"); memset(buff, 0, sizeof(buff)); while (fgets(buff, sizeof(buff), fp) != NULL) { buff[sizeof(buff) - 1] = 0; et = xmalloc(sizeof(*et)); ptr = buff; ptr = skips(ptr); ptr = getuint(ptr, &et->id); ptr = skips(ptr); ptr = skipchar(ptr, ','); ptr = skips(ptr); ptr = strtrim_right(ptr, '\n'); ptr = strtrim_right(ptr, ' '); et->type = xstrdup(ptr); et->next = NULL; pos = insert_hash(et->id, et, ð_ether_types); if (pos) { et->next = *pos; *pos = et; } memset(buff, 0, sizeof(buff)); } fclose(fp); }
static void dissector_init_oui(void) { FILE *fp; char buff[512], *ptr; struct vendor_id *ven; void **pos; fp = fopen("/etc/netsniff-ng/oui.conf", "r"); if (!fp) panic("No /etc/netsniff-ng/oui.conf found!\n"); memset(buff, 0, sizeof(buff)); while (fgets(buff, sizeof(buff), fp) != NULL) { buff[sizeof(buff) - 1] = 0; ven = xmalloc(sizeof(*ven)); ptr = buff; ptr = skips(ptr); ptr = getuint(ptr, &ven->id); ptr = skips(ptr); ptr = skipchar(ptr, ','); ptr = skips(ptr); ptr = strtrim_right(ptr, '\n'); ptr = strtrim_right(ptr, ' '); ven->vendor = xstrdup(ptr); ven->next = NULL; pos = insert_hash(ven->id, ven, ð_oui); if (pos) { ven->next = *pos; *pos = ven; } memset(buff, 0, sizeof(buff)); } fclose(fp); }
static void dissector_init_ports_tcp(void) { FILE *fp; char buff[512], *ptr; struct port_tcp *ptcp; void **pos; fp = fopen("/etc/netsniff-ng/tcp.conf", "r"); if (!fp) panic("No /etc/netsniff-ng/tcp.conf found!\n"); memset(buff, 0, sizeof(buff)); while (fgets(buff, sizeof(buff), fp) != NULL) { buff[sizeof(buff) - 1] = 0; ptcp = xmalloc(sizeof(*ptcp)); ptr = buff; ptr = skips(ptr); ptr = getuint(ptr, &ptcp->id); ptr = skips(ptr); ptr = skipchar(ptr, ','); ptr = skips(ptr); ptr = strtrim_right(ptr, '\n'); ptr = strtrim_right(ptr, ' '); ptcp->port = xstrdup(ptr); ptcp->next = NULL; pos = insert_hash(ptcp->id, ptcp, ð_ports_tcp); if (pos) { ptcp->next = *pos; *pos = ptcp; } memset(buff, 0, sizeof(buff)); } fclose(fp); }
int system_getgateway(char* gateway, int len) { FILE* fp; char buffer[512]; const char* p; fp = popen("ip route", "r"); if(!fp) return -(int)errno; while(fgets(buffer, sizeof(buffer), fp)) { p = skips(buffer, " \r\n"); if(strneq("default ", p, 8)) { sscanf(p, "%*s %*s %s", gateway); break; } } pclose(fp); return 0; }
void Stage::execute(StreamPointTable& table, std::list<Stage *>& stages) { std::vector<bool> skips(table.capacity()); std::list<Stage *> filters; SpatialReference srs; // Separate out the first stage. Stage *reader = stages.front(); // Build a list of all stages except the first. We may have a writer in // this list in addition to filters, but we treat them in the same way. auto begin = stages.begin(); begin++; std::copy(begin, stages.end(), std::back_inserter(filters)); for (Stage *s : stages) { s->ready(table); srs = s->getSpatialReference(); if (!srs.empty()) table.setSpatialReference(srs); } // Loop until we're finished. We handle the number of points up to // the capacity of the StreamPointTable that we've been provided. bool finished = false; while (!finished) { // Clear the spatial reference when processing starts. table.clearSpatialReferences(); PointId idx = 0; PointRef point(table, idx); point_count_t pointLimit = table.capacity(); // When we get false back from a reader, we're done, so set // the point limit to the number of points processed in this loop // of the table. for (PointId idx = 0; idx < pointLimit; idx++) { point.setPointId(idx); finished = !reader->processOne(point); if (finished) pointLimit = idx; } srs = reader->getSpatialReference(); if (!srs.empty()) table.setSpatialReference(srs); // When we get a false back from a filter, we're filtering out a // point, so add it to the list of skips so that it doesn't get // processed by subsequent filters. for (Stage *s : filters) { for (PointId idx = 0; idx < pointLimit; idx++) { if (skips[idx]) continue; point.setPointId(idx); if (!s->processOne(point)) skips[idx] = true; } srs = s->getSpatialReference(); if (!srs.empty()) table.setSpatialReference(srs); } // Yes, vector<bool> is terrible. Can do something better later. for (size_t i = 0; i < skips.size(); ++i) skips[i] = false; table.reset(); } for (Stage *s : stages) s->done(table); }