/// <summary> /// Initializes networking /// </summary> private static unsafe void initNetworking() { // Networking Network.Init(); Route.Init(); // Networking protocols IPV4.Init(); ICMP.Init(); // Transport protocols UDP.Init(); TCP.Init(); ARP.Init(); DHCP.Init(); // Network drivers E1000.Init(); PCNet2.Init(); RTL8139.Init(); DHCP.Discover(); //Thread packetHandler = new Thread(); //packetHandler.Context.CreateNewContext(Util.MethodToPtr(HttpTest), 0, null, true); //Tasking.KernelTask.AddThread(packetHandler); }
// original post: http://www.java2s.com/Code/CSharp/Network/SimplePing.htm // modified by jambel // TCP Ping // original post: http://stackoverflow.com/questions/26067342/how-to-implement-psping-tcp-ping-in-c-sharp static bool altPing(string endPoint) { try { IPHostEntry hostEntry; IPAddress hostAddress; IPEndPoint iep; if (resolveHostEntry(endPoint)) { hostEntry = Dns.GetHostEntry(endPoint); hostAddress = hostEntry.AddressList[0]; iep = new IPEndPoint(hostAddress, 0); } else iep = new IPEndPoint(IPAddress.Parse(endPoint), 0); var data = new byte[1024]; var host = new Socket(iep.AddressFamily, SocketType.Raw, ProtocolType.Icmp); EndPoint ep = iep; var packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 0, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.GetChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.GetBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; int recv = host.ReceiveFrom(data, ref ep); /*ICMP response = new ICMP(data, recv); Console.WriteLine("response from: {0}", ep.ToString()); Console.WriteLine(" Type {0}", response.Type); Console.WriteLine(" Code: {0}", response.Code); int Identifier = BitConverter.ToInt16(response.Message, 0); int Sequence = BitConverter.ToInt16(response.Message, 2); Console.WriteLine(" Identifier: {0}", Identifier); Console.WriteLine(" Sequence: {0}", Sequence); string stringData = Encoding.ASCII.GetString(response.Message, 0, response.MessageSize); Console.WriteLine(" data: {0}", stringData);*/ host.Close(); return true; } catch (SocketException) { return false; } }
static void Tracert(String remoteHost) { //начальная инициализация Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry iphe = Dns.GetHostEntry(remoteHost); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP { //формирование пакета Type = 0x08, Code = 0x00, Identifier = 1, SeqNumber = 1, Message = ToByteArr("Test") }; packet.MessageSize = packet.Message.Length + MsgHeaderSize; int packetsize = packet.MessageSize + HeaderSize; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); for (int i = 1; i < 50; i++) { if (SendRecieve(i, host, packet, ep, iep, packetsize)) { break; } } host.Close(); }
public override bool send(IPPayload payload) { ICMP icmp = (ICMP)payload; switch (icmp.Type) { case 8: //Code == zero Console.Error.WriteLine("Send Ping"); lock (sentry) { open += 1; } PingData PD; PD.Data = icmp.Data; PD.HeaderData = icmp.HeaderData; ping.SendAsync(new IPAddress(DestIP), PD); break; default: throw new NotImplementedException("Unsupported ICMP Type" + icmp.Type); } return(true); }
// Original post: http://www.java2s.com/Code/CSharp/Network/SimplePing.htm // Modified by jambel // TCP Ping // Original post: http://stackoverflow.com/questions/26067342/how-to-implement-psping-tcp-ping-in-c-sharp static bool altPing(string endPoint) { try { IPHostEntry hostEntry; IPAddress hostAddress; IPEndPoint iep; if (resolveHostEntry(endPoint)) { hostEntry = Dns.GetHostEntry(endPoint); hostAddress = hostEntry.AddressList[0]; iep = new IPEndPoint(hostAddress, 0); } else { iep = new IPEndPoint(IPAddress.Parse(endPoint), 0); } var data = new byte[1024]; var host = new Socket(iep.AddressFamily, SocketType.Raw, ProtocolType.Icmp); EndPoint ep = iep; var packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 0, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.GetChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.GetBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; int recv = host.ReceiveFrom(data, ref ep); /*ICMP response = new ICMP(data, recv); * Console.WriteLine("response from: {0}", ep.ToString()); * Console.WriteLine(" Type {0}", response.Type); * Console.WriteLine(" Code: {0}", response.Code); * int Identifier = BitConverter.ToInt16(response.Message, 0); * int Sequence = BitConverter.ToInt16(response.Message, 2); * Console.WriteLine(" Identifier: {0}", Identifier); * Console.WriteLine(" Sequence: {0}", Sequence); * string stringData = Encoding.ASCII.GetString(response.Message, 0, response.MessageSize); * Console.WriteLine(" data: {0}", stringData);*/ host.Close(); return(true); } catch (SocketException) { return(false); } }
public void PingCompleate(object sender, PingCompletedEventArgs e) { Log_Verb("Ping Complete"); PingData seq = (PingData)e.UserState; PingReply rep = e.Reply; Ping ping = (Ping)sender; lock (sentry) { pings.Remove(ping); ping.Dispose(); switch (rep.Status) { case IPStatus.Success: ICMP retICMP = new ICMP(seq.Data); retICMP.HeaderData = seq.HeaderData; retICMP.Type = 0; //echo reply recvBuff.Add(retICMP); break; default: //ping failed open -= 1; if (open == 0) { RaiseEventConnectionClosed(); } break; } } }
static void Main(string[] args) { byte[] data = new byte[1024]; int recv; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); //Console.WriteLine(Encoding.ASCII.GetString(data)); } catch (SocketException) { Console.WriteLine("No response from remote host"); Console.ReadKey(); return; } ICMP response = new ICMP(data, recv); Console.WriteLine("response from: {0}", ep.ToString()); Console.WriteLine(" Type {0}", response.Type); Console.WriteLine(" Code: {0}", response.Code); int Identifier = BitConverter.ToInt16(response.Message, 0); int Sequence = BitConverter.ToInt16(response.Message, 2); Console.WriteLine(" Identifier: {0}", Identifier); Console.WriteLine(" Sequence: {0}", Sequence); string stringData = Encoding.ASCII.GetString(response.Message, 4, response.MessageSize - 4); Console.WriteLine(" data: {0}", stringData); Console.ReadKey(); host.Close(); }
public void Icmp_for_StartPing_onSuccess() { Assert.DoesNotThrow(() => { var icmp = new ICMP(_configProtocol); icmp.StartAsyncPing(); }); }
public bool TryConnect(string address) { byte[] data = new byte[1024]; int recv; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); try { IPHostEntry e = Dns.GetHostEntry(address); if (e == null || e.AddressList.Length == 0 || e.AddressList[0].ToString() == null) { return(false); } else { address = e.AddressList[0].ToString(); if (address == "::1") { address = "127.0.0.1"; } } IPEndPoint iep = new IPEndPoint(IPAddress.Parse(address), 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); } catch (SocketException) { return(false); } } finally { try { host.Close(); } catch { } } return(true); }
public static void Main(string[] argv) { byte[] data = new byte[1024]; int recv, timestart, timestop; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry iphe = Dns.Resolve("www.google.ru"); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = iep; ICMP packet = new ICMP(); // Убрано заполнение в ICMPclass int packetsize = packet.MessageSize + 4; //ushort chcksum = packet.getChecksum(); //packet.Checksum = packet.getChecksum(); //packet.getChecksum(); host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); int badcount = 0; for (int i = 1; i < 50; i++) { host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); timestart = Environment.TickCount; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); timestop = Environment.TickCount; ICMP response = new ICMP(data, recv); if (response.Type == 11) { Console.WriteLine("{0} {1} {2}ms", i, ep.ToString(), timestop - timestart); } if (response.Type == 0) { Console.WriteLine("{0} {1} {2}ms.", ep.ToString(), i, timestop - timestart); break; } badcount = 0; } catch (SocketException) { Console.WriteLine("{0} No response from remote host", i); badcount++; if (badcount == 5) { Console.WriteLine("Unable to contact remote host"); break; } } } host.Close(); Console.ReadLine(); }
public void Icmp_for_StartPing_onEmptyConfigProtocol() { Assert.Throws <ArgumentException>(() => { var configProtocol = new ConfigProtocol(); configProtocol.AttributesProtocol = new Dictionary <string, string>(); var icmp = new ICMP(configProtocol); icmp.StartAsyncPing(); }); }
public Packet Reply(string IP) { GameObject pingPacket = Instantiate(packetprefab); Packet packet = pingPacket.GetComponent<Packet>(); packet.CreatePacket("PING"); packet.internet.setIP(IP, "dest"); packet.internet.setIP(GetComponent<PC>().IP, "src"); packet.gameObject.AddComponent<ICMP>(); ICMP icmp = packet.GetComponent<ICMP>(); icmp.CreateICMP("REPLY", IP); return packet; }
private void Ping() { byte[] data = new byte[1024]; int recv; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse(roverIPAddress), 0); //ICMP doesn't use port numbers EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("ping"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000); while (true) { DateTime sentAt = DateTime.Now; DateTime recvdAt = sentAt; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); recvdAt = DateTime.Now; ICMP response = new ICMP(data, recv); DateTime recvd = DateTime.Now; ConnectedToRover = true; PingRTT = (long)(recvdAt - sentAt).TotalMilliseconds; } catch (SocketException) { ConnectedToRover = false; PingRTT = 0; } Thread.Sleep(500); } }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: private void sendICMPEchoResponse(pspsharp.network.protocols.NetPacket packet, pspsharp.network.protocols.EtherFrame frame, pspsharp.network.protocols.IPv4 ipv4, pspsharp.network.protocols.ICMP icmp) throws java.io.EOFException private void sendICMPEchoResponse(NetPacket packet, EtherFrame frame, IPv4 ipv4, ICMP icmp) { bool reachable = false; try { InetAddress inetAddress = InetAddress.getByAddress(ipv4.destinationIPAddress); // Timeout after 1 second reachable = inetAddress.isReachable(null, ipv4.timeToLive, 1000); } catch (UnknownHostException) { } catch (IOException) { } if (reachable) { // See https://en.wikipedia.org/wiki/Ping_(networking_utility) EtherFrame answerFrame = new EtherFrame(frame); answerFrame.swapSourceAndDestination(); IPv4 answerIPv4 = new IPv4(ipv4); answerIPv4.swapSourceAndDestination(); answerIPv4.timeToLive--; // When a packet arrives at a router, the router decreases the TTL FieldInfo. ICMP answerIcmp = new ICMP(icmp); answerIcmp.type = ICMP.ICMP_CONTROL_ECHO_REPLY; answerIcmp.computeChecksum(); answerIPv4.totalLength = answerIPv4.sizeOf() + answerIcmp.sizeOf(); answerIPv4.computeChecksum(); // Write the different headers in sequence NetPacket answerPacket = new NetPacket(BUFFER_SIZE); answerFrame.write(answerPacket); answerIPv4.write(answerPacket); answerIcmp.write(answerPacket); sendPacket(answerPacket); } }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: private void processMessageDatagramICMP(pspsharp.network.protocols.NetPacket packet, pspsharp.network.protocols.EtherFrame frame, pspsharp.network.protocols.IPv4 ipv4) throws java.io.EOFException private void processMessageDatagramICMP(NetPacket packet, EtherFrame frame, IPv4 ipv4) { ICMP icmp = new ICMP(); icmp.read(packet); //if (log.DebugEnabled) { Console.WriteLine(string.Format("processMessageDatagramICMP {0}", icmp)); } switch (icmp.type) { case ICMP_CONTROL_ECHO_REQUEST: sendICMPEchoResponse(packet, frame, ipv4, icmp); break; default: Console.WriteLine(string.Format("processMessageDatagramICMP unknown type=0x{0:X}, code=0x{1:X}", icmp.type, icmp.code)); break; } }
public void PingCompleate(object sender, System.Net.NetworkInformation.PingCompletedEventArgs e) { PingData Seq = (PingData)e.UserState; PingReply rep = e.Reply; lock (sentry) { switch (rep.Status) { case IPStatus.Success: ICMP retICMP = new ICMP(Seq.Data); retICMP.HeaderData = Seq.HeaderData; retICMP.Type = 0; //echo reply recvbuff.Add(retICMP); break; default: open -= 1; break; } } }
//Основная программа static void MyTracert(String remoteHost) { //начальная инициализация byte[] data = new byte[1024]; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry iphe = Dns.Resolve(remoteHost); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); //формирование пакета packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; packet.Identifier = 1; packet.SeqNumber = 1; packet.Message = ToByteArr("test"); packet.MessageSize = packet.Message.Length + MsgHeaderSize; int packetsize = packet.MessageSize + HeaderSize; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); //цикл переборки ttl и обработки ответов for (int i = 1; i < 256; i++) { if (SendRecieve(i, host, packet, ep, iep, packetsize)) { break; } } host.Close(); }
public static void Main(string[] argv) { int trys = 3; Console.Write("tracert "); string address = Console.ReadLine(); byte[] data = new byte[1024]; int recv, timestart, timestop; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); bool flagHostEntry = false; while (!flagHostEntry) { try { IPHostEntry temp = Dns.GetHostEntry(address); flagHostEntry = true; } catch (Exception) { Console.Write("\nВведен неверный адрес, попробуйте еще раз: "); address = Console.ReadLine(); }; } ; IPHostEntry iphe = Dns.GetHostEntry(address); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000); try { if (Dns.GetHostEntry(address).HostName == address) { Console.WriteLine("\nТрассировка маршрута к {0} [{1}]", address, Dns.GetHostEntry(address).AddressList[0].ToString()); } else { Console.WriteLine("\nТрассировка маршрута к {0} [{1}]", Dns.GetHostEntry(address).HostName, address); } } catch (Exception) { Console.WriteLine("\nТрассировка маршрута к {0}", address); }; Console.WriteLine("с максимальным числом прыжков 30:\n"); int falsecount = 0; bool flagExit = true; for (int i = 1; i <= 30 && flagExit; i++) { Console.Write("{0,3} ", i); for (int j = 0; j < trys; j++) { host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); timestart = Environment.TickCount; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); timestop = Environment.TickCount; ICMP response = new ICMP(data, recv); if (response.Type == 11) { if (timestop == timestart) { Console.Write(" 1 мс"); } else { Console.Write("{0,5} мс", timestop - timestart); } } if (response.Type == 0) { if (timestop == timestart) { Console.Write(" 1 мс"); } else { Console.Write("{0,5} мс", timestop - timestart); } flagExit = false; } falsecount = 0; } catch (SocketException) { Console.Write(" * "); falsecount++; } } if (falsecount >= trys) { Console.WriteLine(" Превышен интервал ожидания для запроса."); if (falsecount == trys * 3) { Console.WriteLine("\nНевозможно связаться с удаленным хостом."); flagExit = false; } } else { try { string strEndPoint = Regex.Replace(ep.ToString(), ":.*", ""); Console.Write(" {0} [{1}]", Dns.GetHostEntry(strEndPoint).HostName, strEndPoint); } catch (Exception) { Console.Write(" {0}", Regex.Replace(ep.ToString(), ":.*", "")); }; Console.WriteLine(); } } host.Close(); Console.WriteLine("\nТрассировка завершина.\n"); Console.Read(); }
static Boolean SendRecieve(int i, Socket host, ICMP packet, EndPoint ep, IPEndPoint iep, int packetsize) { int badcount = 0; byte[] data; int pcklength; host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); try { DateTime timestart = DateTime.Now; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; pcklength = host.ReceiveFrom(data, ref ep); TimeSpan timestop1 = DateTime.Now - timestart; ICMP response1 = new ICMP(data, pcklength); timestart = DateTime.Now; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; pcklength = host.ReceiveFrom(data, ref ep); TimeSpan timestop2 = DateTime.Now - timestart; ICMP response2 = new ICMP(data, pcklength); timestart = DateTime.Now; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; pcklength = host.ReceiveFrom(data, ref ep); TimeSpan timestop3 = DateTime.Now - timestart; ICMP response3 = new ICMP(data, pcklength); if (response1.Type == 11 || response2.Type == 11 || response3.Type == 11) { Console.WriteLine(i + ": " + ep.ToString() + " " + (timestop1.Milliseconds.ToString()) + " " + (timestop2.Milliseconds.ToString()) + " " + (timestop3.Milliseconds.ToString()) + " мс"); return(false); } if (response1.Type == 0 || response2.Type == 0 || response3.Type == 0) { Console.WriteLine(i + ": " + ep.ToString() + " достигнут за " + i + " прыжков, " + (timestop1.Milliseconds.ToString()) + " " + (timestop2.Milliseconds.ToString()) + " " + (timestop3.Milliseconds.ToString()) + " мс"); return(true); } return(true); } catch (SocketException) { Console.WriteLine(i + ": нет ответа от " + ep + " ( dest: " + iep + ")"); badcount++; if (badcount == 4) { Console.WriteLine("Не удалось установить соединение\n"); return(true); } return(false); } finally { try { string ip = ep.ToString(); ip = ip.Remove(ip.Length - 2, 2); if (!ip.StartsWith("192.168")) { IPAddress addr = IPAddress.Parse(ip); IPHostEntry entry = Dns.GetHostEntry(addr); Console.WriteLine(entry.HostName); } Console.WriteLine(); } catch (SocketException) { Console.WriteLine("Нет DNS ответа.\n"); } } }
public override bool Send(IPPayload payload) { ICMP icmp = (ICMP)payload; switch (icmp.Type) { case 8: //Echo //Code == zero Log_Verb("Send Ping"); lock (sentry) { open += 1; } PingData pd; pd.Data = icmp.Data; pd.HeaderData = icmp.HeaderData; Ping nPing = new Ping(); nPing.PingCompleted += PingCompleate; lock (sentry) { pings.Add(nPing); } nPing.SendAsync(new IPAddress(DestIP), pd); System.Threading.Thread.Sleep(1); //Hack Fix break; case 3: // switch (icmp.Code) { case 3: Log_Error("Recived Packet Rejected, Port Closed"); IPPacket retPkt = new IPPacket(icmp); byte[] srvIP = retPkt.SourceIP; byte prot = retPkt.Protocol; UInt16 srvPort = 0; UInt16 ps2Port = 0; switch (prot) { case (byte)IPType.TCP: TCP tcp = (TCP)retPkt.Payload; srvPort = tcp.SourcePort; ps2Port = tcp.DestinationPort; break; case (byte)IPType.UDP: UDP udp = (UDP)retPkt.Payload; srvPort = udp.SourcePort; ps2Port = udp.DestinationPort; break; } ConnectionKey Key = new ConnectionKey(); Key.IP0 = srvIP[0]; Key.IP1 = srvIP[1]; Key.IP2 = srvIP[2]; Key.IP3 = srvIP[3]; Key.Protocol = prot; Key.PS2Port = ps2Port; Key.SRVPort = srvPort; //is from NormalPort Session s; connections.TryGetValue(Key, out s); if (s != null) { s.Reset(); Log_Info("Reset Rejected Connection"); break; } //Is from FixedPort Key.IP0 = 0; Key.IP1 = 0; Key.IP2 = 0; Key.IP3 = 0; Key.SRVPort = 0; connections.TryGetValue(Key, out s); if (s != null) { s.Reset(); Log_Info("Reset Rejected Connection"); break; } Log_Error("Failed To Reset Rejected Connection"); break; default: throw new NotImplementedException("Unsupported ICMP Code For Destination Unreachable" + icmp.Code); } break; default: throw new NotImplementedException("Unsupported ICMP Type" + icmp.Type); } return(true); }
public static void Main(string[] argv) { byte[] data = new byte[1024]; int recv, timestart, timestop; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse("8.8.8.8"), 0); EndPoint ep = iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); int badcount = 0; for (int i = 1; i < 50; i++) { host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); timestart = Environment.TickCount; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); timestop = Environment.TickCount; ICMP response = new ICMP(data, recv); if (response.Type == 11) { Console.WriteLine("hop {0}: response from {1}, {2}ms", i, ep.ToString(), timestop - timestart); } if (response.Type == 0) { Console.WriteLine("{0} reached in {1} hops, {2}ms.", ep.ToString(), i, timestop - timestart); break; } badcount = 0; } catch (SocketException) { Console.WriteLine("hop {0}: No response from remote host", i); badcount++; if (badcount == 5) { Console.WriteLine("Unable to contact remote host"); break; } } } host.Close(); Console.ReadKey(); }
// this is the network monitoring script public void Run() { ConsoleOutputLogger.WriteLine("Starting up the Network Monitoring..."); ICMP pinger = new ICMP(); while (running) { foreach (NetworkMonitoringHost Host in NetworkMonitorConfiguration.NetworkHosts) { // start pinging around ICMP_PingResult result = null; try { result = pinger.Ping(Host.IPAdressOrHostname, 1, 500); } catch (Exception) { //ConsoleOutputLogger.WriteLine("NetworkMonitor Exception: "+e.Message); result = new ICMP_PingResult(); result.Status = ICMP_Status.TimeOut; result.hostIP = null; } // we got a result... if (result != null) { // it's already in the list if (OnOfflineList.ContainsKey(Host.IPAdressOrHostname)) { if (OnOfflineList[Host.IPAdressOrHostname] == true) // this one was online before... { if (result.Status == ICMP_Status.TimeOut) { // it's now offline... OnOfflineList[Host.IPAdressOrHostname] = false; NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet(); ds_result.AverageRoundtripMS = result.AverageRoundtripMS; ds_result.Descriptor = Host.Descriptor; ds_result.HostnameIP = Host.IPAdressOrHostname; ds_result.Status = result.Status; ds_result.TimeOfMeasurement = result.TimeOfMeasurement; iQueue.Enqueue(ds_result); } } else { if (result.Status == ICMP_Status.Success) { // it's now online... OnOfflineList[Host.IPAdressOrHostname] = true; NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet(); ds_result.AverageRoundtripMS = result.AverageRoundtripMS; ds_result.Descriptor = Host.Descriptor; ds_result.HostnameIP = Host.IPAdressOrHostname; ds_result.Status = result.Status; ds_result.TimeOfMeasurement = result.TimeOfMeasurement; iQueue.Enqueue(ds_result); } } } else { if (result.Status == ICMP_Status.Success) { OnOfflineList.Add(Host.IPAdressOrHostname, true); } else { OnOfflineList.Add(Host.IPAdressOrHostname, false); } // enqueue NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet(); ds_result.AverageRoundtripMS = result.AverageRoundtripMS; ds_result.Descriptor = Host.Descriptor; ds_result.HostnameIP = Host.IPAdressOrHostname; ds_result.Status = result.Status; ds_result.TimeOfMeasurement = result.TimeOfMeasurement; iQueue.Enqueue(ds_result); } } } Thread.Sleep(NetworkMonitorUpdateTime); } }
static void Main(string[] args) { string ip; Console.Write("tracert ");; ip = Console.ReadLine(); IPAddress adress; if (IPAddress.TryParse(ip, out adress)) { try { string domen = System.Net.Dns.GetHostEntry(ip).HostName; Console.WriteLine($"\n Трассировка маршрута к {domen} [{ip}] \n максимальное число прыжков 30:"); } catch { Console.WriteLine($"\n Трассировка маршрута к [{ip}] \n максимальное число прыжков 30:"); } } else { try { string domen = System.Net.Dns.GetHostEntry(ip).HostName; if (domen == ip) { ip = System.Net.Dns.GetHostEntry(ip).AddressList[0].ToString(); } Console.WriteLine($"\n Трассировка маршрута к {domen} [{ip}] \n максимальное число прыжков 30:\n"); } catch { Console.WriteLine("Не удается разрешить системное имя узла"); Console.ReadKey(); Environment.Exit(0); } } byte[] data = new byte[1024]; IPAddress adr = IPAddress.Parse(ip); Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); //1. все адреса, используемые сокетом(протокол IPv4) 2. для передачи icmp пакетов 3. протокол icmp IPHostEntry iphe = System.Net.Dns.GetHostEntry(adr); // контейнер для сведений об адресе веб-узлa IPEndPoint iep = new IPEndPoint(adr, 0); // конечная точка ip-адрес и номер порта EndPoint ep = (EndPoint)iep; //определяет сетевой адрес ICMP packet = new ICMP(); //формируем ICMP пакет packet.Type = 0x08; //тип для эхо-запроса? packet.Code = 0x00; packet.Checksum = 0; int packetsize = packet.MessageSize + 8;//У кати +8 заголовка UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout /*промежуток времени, после которого истечет время тайм-аута*/, 3000); int badcount = 0; bool stop = false; for (int i = 1; i < 30; i++) { Console.Write(i); host.SetSocketOption(SocketOptionLevel.IP /*ip сокеты*/, SocketOptionName.IpTimeToLive /*поле срока жизни заголовка*/, i); for (int j = 1; j < 4; j++) { DateTime timestart = DateTime.Now; try { host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); data = new byte[1024]; int recv = host.ReceiveFrom(data, ref ep);// получает дейтаграмму и конечную точку источника TimeSpan timestop = DateTime.Now - timestart; ICMP response = new ICMP(data, recv); if (response.Type == 11) { Console.Write("{0,10}", (timestop.Milliseconds.ToString()) + "мс"); } if (response.Type == 0) { Console.Write("{0,10}", (timestop.Milliseconds.ToString()) + "мс"); stop = true; } badcount = 0; } catch (SocketException) { Console.Write("{0,10}", "*"); badcount++; } } if (badcount == 3 && !stop) { Console.WriteLine(" Превышен интервал ожидания запроса"); badcount = 0; } else { try { string domen = System.Net.Dns.GetHostEntry(IPAddress.Parse(ep.ToString().Split(':')[0])).HostName; Console.WriteLine(" " + domen + " [" + ep.ToString().Split(':')[0] + "]"); } catch { Console.WriteLine(" " + ep.ToString().Split(':')[0]); } } if (stop) { Console.WriteLine("\nТрассировка завершена"); Console.ReadKey(); Environment.Exit(0); } } host.Close(); Console.ReadKey(); }