Zafer Günlükleri

Bir programcının hayat ve yazılım üzerine notları

20 Ara 2020

Bash Komutlari: dig

Linux üzerinde çalışıyorsanız Linux’un beraberinde getirdiği bir çok faydalı terminal komutu ile işlerinizi daha hızlı ve pratik bir şekilde halletmeniz mümkün. Bu güzel komutlardan biriside dig komutudur.

Bir terminal komutu olan dig ile alan adları üzerinde bazı sorgular yaparak bilgiler edinebilirsiniz. Pek tabi ki bu iş için bir çok araç ve web sitesindende yardım alabilirsiniz. Ancak Linux terminalde yerleşik olarak gelen dig komutu çok daha pratik ve hızlı bir şekilde sorunuzu çözmenize yardım edebilir.

Alan adınız hakkında bilgi almak için dig komutunun en sade kullanım şekli aşagıdaki gibidir. Burada alan adımızı yazdıktan sonra enter basarak komutu işletmemiz yeterlidir.

$ dig zafercelenk.com

; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> zafercelenk.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2258
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;zafercelenk.com.		IN	A

;; ANSWER SECTION:
zafercelenk.com.	299	IN	A	104.28.4.30
zafercelenk.com.	299	IN	A	172.67.129.214
zafercelenk.com.	299	IN	A	104.28.5.30

;; Query time: 85 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 20 16:37:49 +03 2020
;; MSG SIZE  rcvd: 92

Yukarıda dig komutu ve bu komutun işletilmesi sonrası oluşan çıktıyı görüyorsunuz. Çıktıda ilk dikkat etmemiz gereken iki bölüm var. Bunlar QUESTION SECTION ve ANSWER SECTION birinci bölüm dig ile sorduğumuz soruyu, ikinci bölüm ise bu sorunun cevabını gösteriyor.

Komut Seçenekleri

Yukarıdaki örnekte dig komutunu en basit haliyle kullandık ve çıktı olarak bize alan adına ait A kaydını döndürdü. Bununla beraber dig komutu ile alan adına ait bir çok kaydı görüntüleyebileceğimiz seçenekleride vardır. Varsayılan olarak dig komutu alan adına ait A kaydını gösterir. Ancak istediğimiz bir kaydıda görüntüleyebiliriz. Örneğin SOA kaydını görüntelemek istediğimizde şu şekilde bir kullanım gerekir.

$ dig zafercelenk.com SOA

; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> zafercelenk.com SOA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57497
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;zafercelenk.com.		IN	SOA

;; ANSWER SECTION:
zafercelenk.com.	3599	IN	SOA	anirban.ns.cloudflare.com. dns.cloudflare.com. 2034942384 10000 2400 604800 3600

;; Query time: 72 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 20 17:32:51 +03 2020
;; MSG SIZE  rcvd: 10

Bu örnekte alan adına ait SOA kaydını sorduk ve cevabını aldık. Bunun gibi başka alan adı kayıtlarınıda **A, MX, TXT vs. ** görüntülemek mümkündür. Eğer alan adı ile ilgili tüm kayıtları tek bir cevapta görüntülemek isterseniz ANY seçeneğini kullanabilirsiniz.

Eğer bir IP adresi ile sorgulama yapmak isterseniz bunun için x seçeneğini kullanabilrsiniz. Bu sayede DNS Reverse Lookup kayıtları sorgulanabilir. Aşağıdaki örnek kullanım böyle bir sorguyu ve cevabı bize gösterir.

$ dig -x 172.67.129.214

; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> -x 172.67.129.214
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63888
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;214.129.67.172.in-addr.arpa.	IN	PTR

;; AUTHORITY SECTION:
67.172.in-addr.arpa.	1799	IN	SOA	cruz.ns.cloudflare.com. dns.cloudflare.com. 2034580120 10000 2400 604800 3600

;; Query time: 73 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 20 17:40:42 +03 2020
;; MSG SIZE  rcvd: 118

Bir diğer kullanışlı seçenek ise dig komutunun sorguları farklı DNS sunucuları üzerinden yapabilme imkanıdır. Bu kullanım şekli DNS önbellek sorunlarını daha çabuk tespit etmemize yardımcı olabilir. Aşağıda örnek bir kullanımı görebilirsiniz.

$ dig @208.67.222.222 zafercelenk.com

; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> @208.67.222.222 zafercelenk.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6645
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;zafercelenk.com.		IN	A

;; ANSWER SECTION:
zafercelenk.com.	300	IN	A	172.67.129.214
zafercelenk.com.	300	IN	A	104.28.4.30
zafercelenk.com.	300	IN	A	104.28.5.30

;; Query time: 671 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Sun Dec 20 17:50:23 +03 2020
;; MSG SIZE  rcvd: 92

Bu örnekte sorgulama yapılacak sunucu dig komutuna bizim tarafımızdan bildirilmiştir. Çıktıdaki en son bölüme dikkat ederseniz sorgu yapılan sunucu bilgisi SERVER satırında gösterilmiştir. Peki önceki sorgularda bir sunucu bilgisi vermediğimiz halde dig komutu nereden sorgu yapacağını nasıl biliyor? Çünkü dig komutu varsayılan olarak sisteminizdeki /etc/resolve.conf dosyasında tanımlı bilgileri kullanarak bu sorguları yapmak için ayarlanmıştır. Siz özel bir bildirim yapmadığınız sürece dig bu dosyayı kullanarak işlemeleri gerçekleştirir.

Sorgu Seçenekleri

Komut seçenekleri yanında dig sorgu çıktımızı şekillendirmek içinde bazı seçenekler sunar. Bunlar;

  • +nocomments : Cevap ile alakalı üst bilgileri kapatır.
  • +noauthority : Cevap ile alakalı yetki alanları kapatır.
  • +noadditional : Cevap ile alakalı ek bölümleri kapatır.
  • +nostats : Cevap ile alakalı ek istatistikleri kapatır.

Aşağıdaki örnekte +nocomments seçeneğinin aktif edildiği bir sorgu örneğini görebilirsiniz.

$ dig zafercelen.com +nocomments

; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> zafercelen.com +nocomments
;; global options: +cmd
;zafercelen.com.			IN	A
com.			899	IN	SOA	a.gtld-servers.net. nstld.verisign-grs.com. 1608476452 1800 900 604800 86400
;; Query time: 58 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 20 18:01:17 +03 2020
;; MSG SIZE  rcvd: 116

Bu seçenekten dolayı çıktıda sadece cevap ve bilgi bölümleri gösterilmektedir. Bu şekilde çıktınızı formatlamak için daha bir çok seçeneği kullanabilrsiniz.

Bunlar dışında dig komutunun diğer tüm seçenekleri görmek için terminal üzerinde man dig yazarak manuel sayfasına ulaşabilir veya web üzerinden https://linux.die.net/man/1/dig adresini ziyaret edebilirsiniz.