int main(int argc, char** argv) { bool daemon = true; char *ip = 0, *dest = 0; int opt, port = 0; while((opt = getopt(argc, argv, "hi:p:d:f")) != -1) { switch(opt) { case 'i': ip = strdup(optarg); break; case 'p': port = atoi(optarg); break; case 'd': dest = strdup(optarg); break; case 'h': showUsage(); return 0; break; case 'f': daemon = false; break; case '?': showUsage(); return 0; break; } } if((! port) || (! dest)) { showUsage(); return 1; } syslog(LOG_INFO, "Routing: %s:%d to: %s", (ip ? ip : "ALL"), port, dest); try { IpAddress ipAddr(ip, port); IpAddress destAddr(dest); SnmpRouted server(ipAddr, destAddr, daemon); syslog(LOG_INFO, "Started"); server.run(); } catch(NetErr& e) { syslog(LOG_ERR, "Exception %s", e.errm); } return 0; }
int NetworkHelperImplWindows::queryRoutingTable() { MIB_IPFORWARD_TABLE2 *table = NULL; NETIO_STATUS status; status = GetIpForwardTable2(AF_INET, &table); if (!NETIO_SUCCESS(status)) { qDebug() << "GetIpForwardTable2 failed:" << status; return 1; } for (ULONG i = 0; i < table->NumEntries; i++) { MIB_IPFORWARD_ROW2 *row = table->Table + i; IP_ADDRESS_PREFIX *prefix = &row->DestinationPrefix; QHostAddress destAddr(ntohl(prefix->Prefix.Ipv4.sin_addr.S_un.S_addr)); QHostAddress nextHop(ntohl(row->NextHop.Ipv4.sin_addr.S_un.S_addr)); #ifdef _DEBUG const QString debugLineFormat("%1/%2 via %3 metric %4 dev %5 # %6proto=%7, origin=%8"); QString debugLine = debugLineFormat.arg( destAddr.toString(), QString::number(prefix->PrefixLength), nextHop.toString(), QString::number(row->Metric), (row->Loopback ? "lo" : QString::number(row->InterfaceIndex)), (row->Immortal ? "immortal, " : ""), QString::number(row->Protocol), QString::number(row->Origin) ); qDebug() << debugLine; #endif } FreeMibTable(table); return 0; }