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(); }
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 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); }
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); } }
//Основная программа 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(); }
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(); }
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(); }