|
|
||||||||||||||||||||||
|
SNMP Tools GPW log2sql SNMP query (C#) Sniffer (C#) PING / Trace (C#) |
|
Demo Application// Author: Toomas Kaljus
// http://www.digigrupp.com namespace DG { public class Application { public static int Main(string[] args) { int PacketSize = 32; // set ping packet size (minimum = 0; sensible maximum = 1024; common = 32) string Host = "localhost"; if (args.Length > 0) Host = args[0]; ICMPSocket Socket = new ICMPSocket(); // ping System.Console.WriteLine(); System.Console.WriteLine("Pinging " + Host + " with " + PacketSize + " bytes of data:"); System.Console.WriteLine(); System.Random Random = new System.Random(); ICMPPacket ICMP = new ICMPPacket(); ICMPEcho Message = new ICMPEcho(); ICMP.Message = Message; for (ushort pc=1; pc<5; pc++) { if (pc > 0) System.Threading.Thread.Sleep(500); Message.Identifier = (ushort)Random.Next(0, 0xffff); Message.SequenceNumber = pc; Message.Data = "".PadRight(PacketSize, '*'); try { IPPacket IP = Socket.Send(Host, ICMP, 128); if (IP.ICMP.Message is ICMPEchoReply) System.Console.WriteLine("Reply from " + Socket.EndPoint.ToString() + ": bytes=" + ((ICMPEchoReply)IP.ICMP.Message).Data.Length + " time=" + Socket.TimeElapsed + "ms TTL=" + IP.TimeToLive); else if (IP.ICMP.Message is ICMPTimeExceeded) System.Console.WriteLine("Reply from " + Socket.EndPoint.ToString() + ": Time Exceeded"); else if (IP.ICMP.Message is ICMPDestinationUnreachable) System.Console.WriteLine("Reply from " + Socket.EndPoint.ToString() + ": Destination Unreachable"); else System.Console.WriteLine("Reply from " + Socket.EndPoint.ToString() + ": " + IP.ICMP.Message); } catch { System.Console.Error.WriteLine("Request timed out"); } } System.Console.WriteLine(); // traceroute int MaxHops = 30; bool TraceOk = false; int ErrorCount = 0; System.Console.WriteLine(); System.Console.WriteLine("Tracing route to " + Host + " over a maximum of " + MaxHops + " hops:"); System.Console.WriteLine(); for (int TTL = 1; TTL < MaxHops + 1; TTL++) { string ResponseHost = ""; string ResponseError = ""; ICMP = new ICMPPacket(); Message = new ICMPEcho(); ICMP.Message = Message; System.Console.Write(TTL.ToString().PadLeft(3) + " "); for (ushort pc=1; pc<4; pc++) { if (pc > 0) System.Threading.Thread.Sleep(500); Message.Identifier = 1; Message.SequenceNumber = pc; Message.Data = "".PadRight(PacketSize, '*'); try { IPPacket IP = Socket.Send(Host, ICMP, TTL); if (ResponseHost == "") { string ResponseAddress = ((System.Net.IPEndPoint)Socket.EndPoint).Address.ToString(); #if NET20 try { ResponseHost = System.Net.Dns.GetHostEntry(ResponseAddress).HostName; } catch { } #else ResponseHost = System.Net.Dns.Resolve(ResponseAddress).HostName; #endif if (ResponseHost != ResponseAddress) ResponseHost += " [" + ResponseAddress + "]"; } if (IP.ICMP.Message is ICMPTimeExceeded) { System.Console.Write(Socket.TimeElapsed.ToString().PadLeft(5) + " ms "); } else if (IP.ICMP.Message is ICMPEchoReply) { System.Console.Write(Socket.TimeElapsed.ToString().PadLeft(5) + " ms "); TraceOk = true; } else if (IP.ICMP.Message is ICMPIPHeaderReply) { ResponseError = " reports " + IP.ICMP.Message; TraceOk = true; break; } ErrorCount = 0; } catch { System.Console.Write("*".PadLeft(5) + " "); ErrorCount++; } } System.Console.WriteLine(ResponseHost + ResponseError); if (TraceOk) break; if (ErrorCount > 8) break; } System.Console.WriteLine(); System.Console.WriteLine("Trace complete."); System.Console.WriteLine(); return 0; } } } |
||||||||||||||||||||
Copyright © 2003-2007 Digi Grupp OÜ
|
||||||||||||||||||||||