|
|
|||||||||||||||||||||||||
|
SNMP Tools GPW log2sql SNMP query (C#) Sniffer (C#) PING / Trace (C#) |
|
Application Demo// Author: Toomas Kaljus
// http://www.digigrupp.com namespace DG { public class Application { private static string Title = "Simple SNMP Command Line Query Tool, Toomas Kaljus, January 2007"; private static string DefaultObjectID = "1.3.6.1.2.1.1"; // iso.org.dod.internet.mgmt.mib-2.system public static string TitleForMibs = "Simple SNMP Command Line Query Tool"; public static string Url = "http://www.digigrupp.com/ssnmpq/"; private static string RFCUrl = "http://www.ietf.org/rfc/rfc{n}.txt"; private static int RFCFirstNumber = 1; private static int RFCLastNumber = 5000; private static int Timeout = 5; public static void ShowHelp() { System.Console.WriteLine(Title); System.Console.WriteLine(); System.Console.WriteLine("Command Line Switches:"); System.Console.WriteLine(); System.Console.WriteLine(" /h:<Host> Host name or IP address (default is localhost)"); System.Console.WriteLine(" /c:<Community> community name (default is public)"); System.Console.WriteLine(" /o:<ObjectID> object ID (default is subkeys from " + DefaultObjectID + ")"); System.Console.WriteLine(" /v[+|-] display values only (hide type and OID information)"); System.Console.WriteLine(" /n[+|-] numeric form only (do not load any MIBs)"); System.Console.WriteLine(" /s[+|-] surf subkeys"); System.Console.WriteLine(" /w[+|-] load all Windows MIBs from ...\\system32\\*.mib"); System.Console.WriteLine(" /r[+|-] load all RFC MIBs from ...\\mib\\*.mib (slow)"); System.Console.WriteLine(" /m:<Path> Path to additional MIB-files (multiple allowed)"); System.Console.WriteLine(" /d[+|-] download all missing RFCs and extract MIBs from them"); System.Console.WriteLine(" /t:<Timeout> Socket timeout for SNMP queries (default is 5 seconds)"); System.Console.WriteLine(" /x:<File> Export results to CSV file (requires /s)"); System.Console.WriteLine(); } public static int Main(string[] args) { string ApplicationPath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath); string Host = "127.0.0.1"; string Community = "public"; string ObjectID = ""; string ObjectName = null; string CustomMibs = ""; string SaveCSV = ""; bool ValuesOnly = false; bool DontLoadMibs = false; bool Subkeys = false; bool WinMibs = false; bool RfcMibs = false; bool Download = false; try { if (args.Length == 0) { ShowHelp(); return 1; } else { for (int i=0; i<args.Length; i++) { if (args[i].StartsWith("/h:")) Host = args[i].Substring(3); else if (args[i].StartsWith("/c:")) Community = args[i].Substring(3); else if (args[i].StartsWith("/o:")) ObjectID = args[i].Substring(3); else if (args[i].StartsWith("/m:")) CustomMibs += args[i].Substring(3) + "|"; else if (args[i].StartsWith("/x:")) SaveCSV = args[i].Substring(3); else if (args[i].StartsWith("/t:")) try { Timeout = int.Parse(args[i].Substring(3)); } catch { System.Console.Error.WriteLine("Invalid timeout value"); return 1; } else if (args[i].StartsWith("/v")) switch (args[i].Substring(2)) { case "+": ValuesOnly = true; break; case "-": ValuesOnly = false; break; case "": ValuesOnly = !ValuesOnly; break; } else if (args[i].StartsWith("/n")) switch (args[i].Substring(2)) { case "+": DontLoadMibs = true; break; case "-": DontLoadMibs = false; break; case "": DontLoadMibs = !DontLoadMibs; break; } else if (args[i].StartsWith("/s")) switch (args[i].Substring(2)) { case "+": Subkeys = true; break; case "-": Subkeys = false; break; case "": Subkeys = !Subkeys; break; } else if (args[i].StartsWith("/w")) switch (args[i].Substring(2)) { case "+": WinMibs = true; break; case "-": WinMibs = false; break; case "": WinMibs = !WinMibs; break; } else if (args[i].StartsWith("/r")) switch (args[i].Substring(2)) { case "+": RfcMibs = true; break; case "-": RfcMibs = false; break; case "": RfcMibs = !RfcMibs; break; } else if (args[i].StartsWith("/d")) switch (args[i].Substring(2)) { case "+": Download = true; break; case "-": Download = false; break; case "": Download = !Download; break; } else { ShowHelp(); return 1; } } if (!ValuesOnly) { System.Console.WriteLine(Title); System.Console.WriteLine(); } } if (ObjectID == "") { ObjectID = DefaultObjectID; Subkeys = true; } if (Download) { Rfc2Mib Rfc2MibObject = new Rfc2Mib(); Rfc2MibObject.DownloadAndExtract( ApplicationPath + "\\rfc", ApplicationPath + "\\mib", RFCUrl, RFCFirstNumber, RFCLastNumber, false ); } MIB MibObject = new MIB(); if (!DontLoadMibs) if (!ValuesOnly) { bool MibsLoaded = false; MibObject.LoadMibCache(ApplicationPath + "\\mibcache.txt"); if (RfcMibs) MibsLoaded = MibObject.Load(ApplicationPath + "\\mib") | MibsLoaded; if (WinMibs) MibsLoaded = MibObject.Load(System.Environment.SystemDirectory) | MibsLoaded; MibsLoaded = MibObject.Load(ApplicationPath) | MibsLoaded; if (CustomMibs != "") { string[] A = CustomMibs.Split('|'); for (int i=0; i<A.Length-1; i++) MibsLoaded = MibObject.Load(A[i]) | MibsLoaded; } if (MibsLoaded) MibObject.SaveMibCache(ApplicationPath + "\\mibcache.txt"); } System.Console.Write(("").PadRight(79) + "\r"); SNMPSocket Socket = new SNMPSocket(); Socket.SocketTimeout = Timeout; SNMPPacket SNMP; string Response = ""; string CurrentObjectID = ObjectID; if (Subkeys) { System.IO.StreamWriter StreamWriter = null; string Separator = ""; if (SaveCSV != "") { StreamWriter = new System.IO.StreamWriter(SaveCSV); Separator = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator; StreamWriter.WriteLine("OID" + Separator + "Path" + Separator + "Type" + Separator + "Value" + Separator + "ValuePath"); } if (!ValuesOnly) { if (!DontLoadMibs) ObjectName = MibObject.Oid2Name(ObjectID); System.Console.WriteLine("Searching " + ObjectID + " ..." + ((ObjectName == null) ? "" : " (" + MibObject.Oid2Name(CurrentObjectID) + ")")); System.Console.WriteLine(); } while(true) { string FirstObjectID = CurrentObjectID; try { try { SNMP = new SNMPPacket(); SNMP.PacketType = SnmpType.GetNextRequestPDU; SNMP.Community = Community; SNMP.ObjectID = CurrentObjectID; SNMP = Socket.Send(Host, SNMP); Response = System.Convert.ToString(SNMP.Value); CurrentObjectID = SNMP.ObjectID; } catch { throw new System.Exception("No response"); } if (FirstObjectID == CurrentObjectID) break; if (!CurrentObjectID.StartsWith(ObjectID)) break; if (!ValuesOnly) { if (!DontLoadMibs) ObjectName = MibObject.Oid2Name(CurrentObjectID); System.Console.WriteLine("OID=" + CurrentObjectID); if (ObjectName != null) System.Console.WriteLine(" Path=" + ObjectName); string Type = SNMP.ValueType.ToString(); System.Console.WriteLine(" Type=" + Type); System.Console.WriteLine(" Value='" + Response + "'"); string ValuePath = ""; if (!DontLoadMibs) if (Type == "ObjectIDentifier") { ValuePath = MibObject.Oid2Name(Response); System.Console.WriteLine(" ValuePath=" + ValuePath); } if (SaveCSV != "") StreamWriter.WriteLine(CurrentObjectID + Separator + ObjectName + Separator + Type + Separator + "\"" + Response + "\"" + Separator + ValuePath); } else { System.Console.WriteLine(Response); if (SaveCSV != "") StreamWriter.WriteLine(CurrentObjectID + Separator + Response); } } catch { if (!ValuesOnly) System.Console.WriteLine("OID=" + CurrentObjectID); else System.Console.WriteLine(Response); throw; } } if (SaveCSV != "") StreamWriter.Close(); } else { try { try { SNMP = new SNMPPacket(); SNMP.PacketType = SnmpType.GetRequestPDU; SNMP.Community = Community; SNMP.ObjectID = CurrentObjectID; SNMP = Socket.Send(Host, SNMP); Response = System.Convert.ToString(SNMP.Value); CurrentObjectID = SNMP.ObjectID; } catch { throw new System.Exception("No response"); } if (!ValuesOnly) { if (!DontLoadMibs) ObjectName = MibObject.Oid2Name(CurrentObjectID); System.Console.WriteLine("OID=" + CurrentObjectID); if (ObjectName != null) System.Console.WriteLine(" Path=" + ObjectName); string Type = SNMP.ValueType.ToString(); System.Console.WriteLine(" Type=" + Type); System.Console.WriteLine(" Value='" + Response + "'"); if (Type == "ObjectIDentifier") System.Console.WriteLine(" ValuePath=" + MibObject.Oid2Name(Response)); } else System.Console.WriteLine(Response); } catch { if (!ValuesOnly) System.Console.WriteLine("OID=" + CurrentObjectID); else System.Console.WriteLine(Response); throw; } } } catch(System.Exception E) { System.Console.Error.WriteLine(E.Message); if (!ValuesOnly) System.Console.WriteLine(); return 1; } if (!ValuesOnly) System.Console.WriteLine(); return 0; } } } |
|||||||||||||||||||||||
Copyright © 2003-2007 Digi Grupp OÜ
|
|||||||||||||||||||||||||