ngrep - Linux için Ağ Paket Analizörü


Ngrep (ağ grep) basit ama güçlü bir ağ paket analiz aracıdır. Ağ katmanına uygulanan grep benzeri bir araçtır; bir ağ arayüzü üzerinden geçen trafiği eşleştirir. Paketlerin veri yükleriyle (iletilen verilerdeki gerçek bilgi veya mesaj, ancak otomatik olarak oluşturulan meta veriler değil) eşleşecek genişletilmiş bir normal veya onaltılık ifade belirtmenize olanak tanır.

Bu araç, çeşitli arayüzlerde IPv4/6, TCP, UDP, ICMPv4/6, IGMP ve Raw dahil olmak üzere çeşitli protokol türleriyle çalışır. Tcpdump paket koklama aracıyla aynı şekilde çalışır.

ngrep paketi, gösterildiği gibi paket yönetim aracını kullanarak ana Linux dağıtımlarındaki varsayılan sistem depolarından kurulabilir.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

ngrep'i yükledikten sonra aşağıdaki örnekleri kullanarak Linux ağınızdaki trafiği analiz etmeye başlayabilirsiniz.

1. Aşağıdaki komut, tüm ping isteklerini varsayılan çalışma arayüzünde eşleştirmenize yardımcı olacaktır. Başka bir terminal açmanız ve başka bir uzak makineye ping atmayı denemeniz gerekir. -q bayrağı, ngrep'e sessizce çalışmasını, paket başlıkları ve bunların yükleri dışında herhangi bir bilgi çıkarmamasını söyler.

sudo ngrep -q '.' 'icmp'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

I 192.168.0.104 -> 192.168.0.103 8:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.104 -> 192.168.0.103 8:0
  ]....oG[............................ !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]....oG[............................ !"#$%&'()*+,-./01234567  

Sonlandırmak için Ctrl + C tuşlarına basabilirsiniz.

2. Yalnızca belirli bir hedef siteye, örneğin 'google.com''a giden trafiği eşleştirmek için aşağıdaki komutu çalıştırın ve ardından bu siteye bir tarayıcıdan erişmeyi deneyin.

sudo ngrep -q '.' 'host google.com'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. Web'de geziniyorsanız, tarayıcınızın hangi dosyaları istediğini izlemek için aşağıdaki komutu çalıştırın:.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 172.217.160.174:80 [AP]
  GET / HTTP/1.1..Host: google.com..User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; 
  GNU C 4.8.5; text)..Accept: */*..Accept-Language: en,*;q=0.1..Accept-
  Encoding: gzip, deflate, bzip2..Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,
  ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. Kaynak veya hedef bağlantı noktası 25'i (SMTP) geçen tüm etkinlikleri görmek için aşağıdaki komutu çalıştırın.

sudo ngrep port 25

5. Herhangi bir ağ tabanlı sistem günlüğü trafiğini “hata” sözcüğünün oluşup oluşmadığını izlemek için aşağıdaki komutu kullanın.

 
sudo ngrep -d any 'error' port 514

Daha da önemlisi, bu araç “/etc/services ” dosyasında (Linux gibi Unix benzeri sistemlerde) depolanan hizmet bağlantı noktası adlarını bağlantı noktası numaralarına dönüştürebilir. Bu komut yukarıdaki komuta eşdeğerdir.

sudo ngrep -d any 'error' port syslog

6. Ngrep'i bir HTTP sunucusuna (bağlantı noktası 80) karşı da çalıştırabilirsiniz; bu, tüm istekleri gösterildiği gibi hedef ana makineye eşleştirecektir.

sudo ngrep port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42167 -> 64.90.164.74:80 [AP]
  GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i
  686) Opera 7.21  [en]..Host: www.darkridge.com..Accept: text/html, applicat
  ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi
  f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, *
  ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ
  MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection:
  Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers....
##

Yukarıdaki çıktıda görebileceğiniz gibi, tüm HTTP başlıklarının iletimi kanlı ayrıntılarıyla görüntülenir. Yine de ayrıştırması zor, bu yüzden -W satır içi modunu uyguladığınızda ne olacağını izleyelim.

sudo ngrep -W byline port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42177 -> 64.90.164.74:80 [AP]
GET / HTTP/1.1.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ...
Host: www.darkridge.com.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ...
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1.
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0.
Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e.
Cookie2: $Version=1.
Cache-Control: no-cache.
Connection: Keep-Alive, TE.
TE: deflate, gzip, chunked, identity, trailers.

7. Bir paket her eşleştirildiğinde YYYY/AA/GG SS:MM:SS.UUUUUU biçiminde bir zaman damgası yazdırmak için, -t bayrağını kullanın.

sudo ngrep -t -W byline port 80

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
####
T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP]
GET / HTTP/1.1.
Host: google.com.
User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text).
Accept: */*.
Accept-Language: en,*;q=0.1.
Accept-Encoding: gzip, deflate, bzip2.
Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8.
Connection: keep-alive.

8. İzlenmekte olan arayüzün karışık moda (tüm olarak gelen her ağ paketini yakalayıp okuduğu) sokmamak için -p işaretini ekleyin.

sudo ngrep -p -W byline port 80

9. Bir diğer önemli seçenek de ham veya bilinmeyen protokolleri gözlemliyorsanız kullanışlı olan -N seçeneğidir. ngrep'e tek karakterli tanımlayıcıyla birlikte alt protokol numarasını görüntülemesini söyler.

sudo ngrep -N -W byline

Daha fazla bilgi için ngrep kılavuz sayfasına bakın.

man ngrep

ngrep Github deposu: https://github.com/jpr5/ngrep

Bu kadar! Ngrep (network grep), BPF filtre mantığını tcpdump ile aynı şekilde anlayan bir ağ paket analizörüdür. Yorumlar kısmında ngrep hakkındaki düşüncelerinizi öğrenmek istiyoruz.