# Internet Control Message Protocol
 - YÖNLENDİRME 
Internet Control Message Protocol (ICMP), hata mesajları ve TCP/IP yazılımının bir takım kendi mesaj trafiği amaçları için kullanılır. ICMP RFC 792'de tanımlanmış ve RFC 950'de revize edilmiştir. Hataları raporlamak için kullanılan, kontrol amaçlı bir protokoldür. Bu şekilde normal kullanımının yanında, uzak sistem hakkında bilgi toplamak için sıkça kullanıldığından çok önemlidir. Genel olarak sistemler arası kontrol mesajları IP yerine ICMP üzerinden aktarılır. ICMP, IP ile aynı düzeyde olmasına karşın aslında kendisi de IP'yi kullanır. ICMP' nin hata raporlamak için kullanılması, IP'yi güvenli yaptığı anlamına gelmez. Datagram, yerine ulaşmayabilir ve bununla ilgili bir hata mesajı da gelmeyebilir. ICMP mesajlarındaki hataları raporlamak için ICMP kullanılmaz. ICMP, TCP/IP' nin işlemesine yardımcı olan bir protokoldür. Her hostta mutlaka ICMP protokolü çalışır. Hata durumunda host tarafından geri bilgilendirmeyi sağlar.
ICMP ağ hakkında bazı bilgileri toplamak amacı ile de kullanılır. IP hata-raporlama veya hata-düzeltme mekanizmalarına sahip değildir. ICMP yapı olarak UDP 'ye benzer bir protokoldür. ICMP de mesajlarını sadece bir datagram içine koyar. Bununla beraber UDP'ye göre daha basit bir yapıdadır. Başlık bilgisinde port numarası bulundurmaz. Bütün ICMP mesajları ağ yazılımının kendisince yorumlanır, ICMP mesajının nereye gideceği ile ilgili bir port numarasına gerek yoktur.
ICMP paketleri ortamda bir geri besleme sağlarlar. Bu yolla ciddi sorunları, haberleşen birimlere bildirerek bir hata bildirim mekanizması oluştururlar. ICMP mesajı, IP paketinin veri bölümünde taşınır. Bu yüzden ICMP paketlerinin dağıtım güvenilirliği, IP paketlerinin dağıtım güvenilirliği ile sınırlı kalmaktadır. Buradan ICMP paketlerinin güvenilir iletilemeyeceği ve hedefe vardığının garanti edilemeyeceği sonuçları çıkarılabilir.
ICMP kullanan komutlara örnek olarak ping ve traceroute verilebilir.


## ICMP paketinin yapısı ve formatı.
ICMP mesajları IP datagramının kullanıcı verisi alanında taşınır. IP başlığındaki protokol alanı 1'e set edilerek ICMP'nin kullanıldığı gösterilir. Tüm ICMP mesajları üç alandan oluşur.
  - Tip alanı: mesajın tipini tanımlar.
  - Kod alanı: hata veya durum bilgisi tipini tanımlar. 
  - Toplamsal-hata (checksum) alanı: ICMP mesajının 16-bit lik 1'e tümleyenini hesaplar.
  - "Parametreler: Parametrelerin daha uzun halinin belirlenmesinde kullanılır."
  - "Bilgi: Mesajla ilgili bilgidir."


## ICMP neden kullanılır.
ICMP şu amaçlarla kullanılır. 
  - TTL süresi dolduğu zaman paketin sahibine bildirim yapmak 
  - Herhangi bir durumda yok edilen paket hakkında geri bildirim sağlamak 
  - Parçalanmasın komutu verilmiş paket parçalandığında geri bildirim sağlamak 
  - Hata oluşumlarında geri bildirim sağlamak 
  - Paket başka bir yoldan gideceği zaman geri bildirim sağlamak


## ICMP hata ve durum raporlama prosedürleri.
ICMP tarafından rapor edilen hata ve durum raporlama servisleri aşağıda listelenmiştir.
ICMP mesaj tipleri ile internet uzerinde kontrol amaçlı birçok program yazılması olasıdır. Örneğin timestap mesajları kullanılarak internet üzerindeki gecikmeler ölçülebilir.


## ICMP uygulamaları.
Basit ve sıkça kullanılan 2 tane ICMP uygulaması vardır: Ping ve Traceroute. Daha çok ağ üzerindeki sorunları tespit edebilmek ya da çözmek için kullanılan bu 2 uygulama aynı zamanda, hacking işleminin başlangıç aşamalarından birini oluşturur. Ağdaki canlı makineleri bulabilmek için ping taramaları ya da ağın haritasını çıkartabilmek için traceroute uygulamaları hacker'ler tarafından sıkça kullanılır.
Ping en basit TCP/IP uygulamasıdır. Bir hosta ulaşmanın ilk adımı ona ping çekmektir. Eğer bir hosta ping ile ulaşabiliyorsanız, telnet ya da FTP ile ulaşmanız (ilgili portlar açıksa) mümkündür. Son yıllarda güvenlik duvarlarının yönlendiricilerdeki "access list"lerin ve diğer güvenlik kontrol mekanizmalarının sıkça kullanılmaya başlanılmasıyla bu yargı değişmeye başlamıştır. Yani bir hosta ping çekemiyorsanız, telnet ya da ftp yapamayacağınız anlamına gelmez. Ping uygulaması, ICMP Echo ve ICMP Reply mesajlarını kullanarak bir hostun erişilebilir olup olmadığını belirler. Ping, alıcı bilgisayara "echo request" paketi gönderirken, cevap olarak da "echo reply" paketini bekler. Traceroute programı ise gönderen bilgisayardan alıcı bilgisayara giden paket ve izlediği yolla ilgili çok önemli bilgiler verir. Bu bilgiler arasında en çok kullanılanı "paketin izlediği yol (path)" bilgisidir.
Bu sayede paketin hangi yollardan geçerek alıcı hosta ulaştığı rahatlıkla izlenebilir. Traceroute programı ICMP protokolünün bir parçasıdır. ICMP protokolü, iki host arasında bilgi akışı olurken, bu esnada ortaya çıkan hataları ve diğer bilgileri mesaj yoluyla raporlar.


## ICMP sorgulaması.
Ping taraması bir ICMP uygulamasıdır ama bir sistem hakkında ICMP sorgulaması yapmak sadece ping paketleri ile yapılmaz. Bir sisteme birçok yoldan ICMP sorgulaması yapılabilir ve çok değerli bilgiler elde edilebilir. Mesela, Unix tabanlı sistemlerde kullanılan "icmpquery" ya da "icmppush" uygulaması sayesinde sistemin saati(hangi zaman bölgesinde olduğu) "ICMP type 13" (TIMESTAMP) ile öğrenilebilir ya da bir hostun hangi ağ maskesinde olduğu "ICMP type 17" (ADDRESS MASK REQUEST)mesajı ile elde edilebilir. Ağ maskesi(Netmask) bilgisi önemlidir, çünkü saldırgan sadece belli bir alt ağdaki(subnet) sisteme saldırmak isteyebilir.Burada dikkat edilmesi gereken bir nokta da tüm yönlendiricilerin ICMP TIMESTAMP ya da ICMP NETMASK sorgulamasına cevap vermedikleridir.
Önlemler
ICMP sorgulamasını engellemek, ilgili ICMP tiplerini (ICMP TIMESTAMP - type 13 gibi) bloke etmekle yapılabilir. Cisco yönlendiricilerde bu engelleme genişletilmiş erişim listesiyle şöyle yapılır:
 Access-list 101 deny icmp any any 13
Ancak ICMP paketlerini engellemek, ağdaki sorunların çözülmesini geciktirebilir. ICMP sorgulaması saldırı tespit programları ile rahatlıkla gözlenebilir.


## İç bağlantılar.
  - ICMPv6