21 Ağustos 2017 Pazartesi

Ping

ICMP Nedir ?
Her IP Stack'inde ICMP protokolü bulunur. Açıklaması şöyle
ICMP, uses the basic support of IP as if it were a higher level protocol, however, ICMP is actually an integral part of IP, and must be implemented by every IP module.
ICMPv4 Header
ICMPv4 mesajının yapısı şöyle.
/* ICMP Header */
struct icmpheader {
  unsigned char icmp_type; //ICMP message type
  unsigned char icmp_code; //Error code
  unsigned short int icmp_chksum; //Checksum for ICMP Header and data
  unsigned short int icmp_id; //Used in echo request/reply to identify request
  unsigned short int icmp_seq;//Identifies the sequence of echo messages, 
                    //if more than one is sent.
};
icmp_type alanınn alabileceği değerler ve açıklamalası şöyle
char * messages[ ] = {
   "Echo reply", //0
   "Type 1",     //1
   "Type 2",     //2
   "Destination unreachable",//3
   "Source quench",  //4
   "Redirect",       //5
   "Type 6",         //6
   "Type 7",         //7
   "Echo request",   //8
   "Router advertisement", //9
   "Router discovery",  //10
   "Time exceeded",     //11
   "Parameter problem", //12
   "Timestamp request", //13
   "Timestamp reply",   //14
   "Information request (obsol.)", //15
   "Information reply (obsol.)",   //16
   "Address mask request",         //17
   "Address mask reply"            
};
ICMP Echo -> ICMP Reply mesajları yanında ICMP mesajı "ICMP Router Advestisement" için de gönderilebilir.
ethertype IPv4 (0x0800), ..., proto ICMP (1), length 36)
  192.168.161.101 > 224.0.0.1: ICMP router advertisement...
ICMPv6 Header
Linux'ta şu satırı dahil ederiz.
#include <netinet/icmp6.h>
ICMPv6 8 byte büyüklüğündedir. ICMPv6 mesajının yapısı şöyle
struct icmpv6header {
  unsigned char type;
  unsigned char code;
  unsigned short int chk_sum;
  unsigned int body; 
};
Ping Nedir?
Not : Ping'in 1983 yılında nasıl geliştirildiği hikayesi okuyama değer.

Ping, ICMP protokolü kullanarak hedef bilgisayara veri gönderip cevap vermesini bekleyen uygulamadır.
ICMP , TCP ve UDP kardeş protokollerdir. Ancak TCP ve UDP'nin aksine ICMP protokolünde port numarası kavramı yoktur. Dolayısıyla Ping bir port numarasına gönderilmez.

tracert gibi programlar ICMP protokolünü kullanrak bir adresin hangi yolu izleyerek erişildiğini gösterirler.

Linux'ta traceroute uygulaması aynı işlemi sadece TCP kullanarak ta yapabilir.
traceroute mail.yourserver.com -p25 -T
-p25 : port numarası -T ise TCP kullanılmasını belirtir.

ping komutu
ping komutu yazısına taşıdım.

Programlama Dillerinde Ping
Java
Java'da Ping yapabilmek için kolay bir yöntem yok. InetAddress.isReachable () metodu eğer çalıştıran program root ise ping gönderir, değilse ping göndermez bunun yerine port 7'ye TCP Echo gönderir.

C#
Ping Sınıfı yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder