CIDR aralıkları için selamlama


10

Zaman zaman Apache günlük dosyalarımdan CIDR aralıklarını grep etmek istiyorum. Bu, doğal sınırlara (/ 8, / 16 ve / 24) düşen aralıklar için kolaydır, ancak / 17 ve / 25 gibi diğer aralıklar için o kadar kolay değildir.

Örnekler:

# 192.168.0.0/16: (easy)
grep " 192\.168\." access_log

# 192.168.128.0/17: (more thought required)
grep -E " 192\.168\.(12[89]|1[3-9][0-9]|2[0-5][0-9])\." access_log

# 192.168.0.0/17: (more thought required)
grep -E " 192\.168\.([0-9]|[0-9][0-9]|1[01][0-9]|12[0-7])\." access_log

# 192.168.128.0/18: (straining my brain)
grep -E " 192\.168\.(1[2-8][0-9]|19[01])\." access_log

Bu 192.168.001.001normal ifadeler, Apache günlük dosyalarında sorun olmayan, ancak diğer günlük dosyalarında olabilecek, başta sıfır bulunan IP adreslerini yok sayar . Özellikle yazıcılar önde gelen sıfırları sevmektedir. Normal ifadeye isteğe bağlı sıfırları eklemek yeterince kolaydır, ancak her şeyi biraz daha zorlaştırır. Daha kolay bir yol olmalı.

Bir dosyadan herhangi bir CIDR aralığıyla eşleşen satırları seçmenin kolay bir yolu var mı?

Süslü regex uzantıları , işi kolaylaştırırlarsa farklı araçlar ( gerekirse awkveya perlgerekirse tek katmanlı olmasını istiyorum) olarak kabul edilecektir. İdeal olarak, istediğim şey

grep "[:CIDR 192.168.128.0/18:]" access_log

Bir CIDR aralığını uygun normal ifadeye dönüştüren bir araç da uygun olacaktır.

$ cidr2regex 192.168.0.0/18
192\.168\.(1[2-8][0-9]|19[01])\.[0-9]{1,3}

veya

$ grep -E "$(cidr2regex 192.168.0.0/18)" access_log

Cevabınız IPv6'yı da içeriyorsa bonus puanları.



Yanıtlar:


17

Bunun için bir araçtır, tahmin edileceği üzere, vardır: grepcidr.

Ben farkındayım herhangi sistemle varsayılan olarak dahil edilmez, ama bunu indirebilirsiniz buradan ve Ubuntu paket deposu ve FreeBSD portları koleksiyon yanı her ikisinde de var.

(Sürüm 2.0, IPv6 ağlarıyla da çalışır)


2
IPv6 işlevselliğine ihtiyacınız varsa, korkunç bir şey birlikte net :: CIDR kullanarak birlikte saldırıya uğradı ...
voretaq7

Ayrıca IPv4 cidr-grepping için küçük bir Node.js tabanlı CLI aracı oluşturdum
Michele Pangrazzi

5

Yakın zamanda piyasaya sürülen rgxgkomut satırı aracı, bir CIDR bloğundaki tüm adreslerle eşleşen normal ifadeler üretir:

$ rgxg cidr 192.168.128.0/18
192\.168\.(19[01]|1[3-8][0-9]|12[89])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])

veya

$ rgxg cidr 2001:db8:a:b:c:d::/112
2001:0?[Dd][Bb]8:0?0?0?[Aa]:0?0?0?[Bb]:0?0?0?[Cc]:0?0?0?[Dd]((::[0-9A-Fa-f]{1,4}|::|:0?0?0?0(::|:[0-9A-Fa-f]{1,4}))|:0\.0(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){2})

Daha fazla bilgi için, bkz. Http://rgxg.sf.net .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.