piton

PyShark ile kendi Ağ İzleyicinizi oluşturma

PyShark ile kendi Ağ İzleyicinizi oluşturma

Mevcut araçlar

Ağ analizi için birçok araç oldukça uzun bir süredir mevcuttur. Örneğin Linux altında bunlar Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack ile hız göstergesi ve ettercap'tır. Bunların ayrıntılı bir açıklaması için Silver Moon'un karşılaştırmasına bir göz atabilirsiniz [1].

Öyleyse, neden mevcut bir aracı kullanmıyorsunuz ve bunun yerine kendi aracınızı yazmıyorsunuz?? Gördüğüm nedenler, TCP/IP ağ protokollerini daha iyi anlamak, düzgün kodlamayı öğrenmek veya mevcut araçlar size gerçekten ihtiyacınız olanı vermediğinden, kullanım durumunuz için yalnızca ihtiyacınız olan belirli özelliği uygulamak. Ayrıca, uygulamanıza/sisteminize yönelik hız ve yük iyileştirmeleri de sizi bu yönde daha fazla hareket etmeye motive eden bir rol oynayabilir.

Vahşi doğada, ağ işleme ve analizi için oldukça fazla Python kitaplığı vardır. Düşük seviyeli programlama için soket kitaplığı [2] anahtardır. Üst düzey protokol tabanlı kitaplıklar httplib, ftplib, imaplib ve smtplib'dir. Ağ bağlantı noktalarını ve paket akışı rakip adaylarını izlemek için python-nmap [3], dpkt [4] ve PyShark [5] kullanılır. Paket akışını hem izlemek hem de değiştirmek için scapy kitaplığı [6] yaygın olarak kullanılmaktadır.

Bu yazıda, PyShark kütüphanesine bir göz atacağız ve belirli bir ağ arayüzüne hangi paketlerin geldiğini izleyeceğiz. Aşağıda göreceğiniz gibi, PyShark ile çalışmak basittir. Proje web sitesindeki belgeler ilk adımlarda size yardımcı olacaktır - bununla çok hızlı bir şekilde kullanılabilir bir sonuç elde edeceksiniz. Ancak, işin özüne gelince, daha fazla bilgi gereklidir.

PyShark ilk bakışta göründüğünden çok daha fazlasını yapabilir ve ne yazık ki, bu yazının yazıldığı sırada mevcut belgeler bunu tam olarak kapsamamaktadır. Bu, onu gereksiz yere zorlaştırır ve kaputun altına daha derin bakmak için iyi bir neden sağlar.

PyShark Hakkında

PyShark [8], Tshark [10] için bir Python sarmalayıcıdır. Yalnızca, ayrıştırma özelliğini kullanarak XML verilerini dışa aktarma yeteneğini kullanır. Tshark, Wireshark'ın komut satırı sürümüdür. Hem Tshark hem de PyShark, ağ paketlerini gerçekten yakalayan ve Tcpdump başlığı altında tutulan Pcap kitaplığına bağlıdır [7]. PyShark, Dan tarafından geliştirildi ve sürekli olarak sürdürüldü (Twitter'da KimiNewt adını kullanıyor).

Olası karışıklığı önlemek için, büyük ölçekli veri işleme için birleşik bir analitik motoru olan Apache Spark [11] adında benzer bir sese sahip bir araç bulunmaktadır. PySpark adı, burada tartışmadığımız Apache Spark'ın Python arabirimi için kullanılır.

PyShark'ı Yükleme

PyShark, hem Pcap kitaplığının hem de Tshark'ın yüklenmesini gerektirir. Debian GNU/Linux 10 ve Ubuntu için karşılık gelen paketler libpcap0 olarak adlandırılır.8 ve tshark ve apt-get kullanılarak aşağıdaki gibi kurulabilir:

Liste 1: Pcap kitaplığını ve Tshark'ı yükleme

# pip3 python-pyshark'ı kurun

Henüz kurulmadıysa, Python3 ve Pip'in de eklenmesi gerekir. Debian GNU/Linux 10 ve Ubuntu için karşılık gelen paketler python3 ve python3-pip olarak adlandırılır ve apt-get kullanılarak aşağıdaki şekilde kurulabilir:

Liste 2: Python 3 için Python 3 ve PIP'yi yükleyin

# apt-get kurulumu python3 python3-pip

Şimdi PyShark'ı ekleme zamanı. Araştırmamıza göre PyShark henüz herhangi bir büyük Linux dağıtımı için paketlenmedi. Kurulumu, sistem çapında bir paket olarak Python paket yükleyici pip3 (Python 3 için pip) kullanılarak aşağıdaki gibi yapılır:

Liste 3: PyShark'ı PIP kullanarak kurun

# pip3 python-pyshark'ı kurun

Artık PyShark, Linux sisteminizdeki Python betiklerinde kullanılmaya hazır. Lütfen aşağıdaki Python komut dosyalarını yönetici kullanıcı olarak çalıştırmayı unutmayın; örneğin, Pcap kitaplığı paketleri normal bir kullanıcı olarak aramanıza izin vermediğinden sudo kullanarak.

Aşağıdaki ifade, PyShark modülünün içeriğini Python betiğinizin ad alanına ekler:

Liste 4: PyShark modülünü içe aktarın

pyshark'ı içe aktar

Paket Yakalama Yöntemleri

Kutudan çıktığı gibi, PyShark, gözlemlenen ağ arayüzünden paket toplamak için sunduğu iki farklı modla birlikte gelir. Sürekli toplama için LiveCapture() yöntemini kullanın ve yerel bir dosyaya kaydetmek için PyShark modülünden FileCapture() yöntemini kullanın. Sonuç, yakalanan veri paketini pakete göre gözden geçirmenizi sağlayan bir paket listesidir (Python yineleyici nesnesi). Aşağıdaki listeler, iki yöntemin nasıl kullanılacağını göstermektedir.

Liste 5: İlk Wifi arayüzü wlan0'dan yakalamak için PyShark'ı kullanın

pyshark'ı içe aktar
yakalama = pyshark.LiveCapture(arayüz='wlan0')

Önceki ifadelerle yakalanan ağ paketleri bellekte tutulur. Kullanılabilir bellek sınırlı olabilir, ancak yakalanan paketleri yerel bir dosyada saklamak bir alternatiftir. Kullanımda olan Pcap dosya biçimi [9]. Bu, yakalanan verileri Pcap kitaplığına bağlı diğer araçlar tarafından da işlemenize ve yorumlamanıza olanak tanır.

Liste 6: Yakalanan paketleri yerel bir dosyada saklamak için PyShark'ı kullanın

pyshark'ı içe aktar
yakalama = pyshark.FileCapture('/tmp/networkpackages.kap')

5 ve 6 numaralı listeler yayınlanıyor, henüz herhangi bir çıktınız olmayacak. Bir sonraki adım, toplanacak paketleri istediğiniz kriterlere göre daha hassas bir şekilde daraltmaktır.

Paket Seçme

Daha önce tanıtılan yakalama nesnesi, istenen arabirime bağlantı kurar. Ardından, yakalama nesnesinin sniff() ve sniff_continuously() yöntemleri ağ paketlerini toplar. sniff(), istenen tüm paketler toplanır toplanmaz arayana geri döner. Buna karşılık, sniff_continuously(), toplandığı anda arayana tek bir paket iletir. Bu, ağ trafiğinin canlı akışını sağlar.

Ayrıca, iki yöntem, paketlerin çeşitli sınırlamalarını ve filtreleme mekanizmalarını belirlemenize izin verir, örneğin, paket_sayısı parametresini kullanan paketlerin sayısı ve zaman aşımı parametresi kullanılarak paketlerin toplanacağı süre. Liste 7, sniff_continuously() yöntemini kullanarak yalnızca canlı akış olarak 50 ağ paketinin nasıl toplanacağını gösterir.

Liste 7: wlan0'dan 50 ağ paketi toplayın

pyshark'ı içe aktar
yakalama = pyshark.LiveCapture(arayüz='wlan0')
yakalanan paket için.sniff_continuously(paket_sayısı=5):
yazdır(paket)

Print(packet) ifadesi kullanılarak çeşitli paket detayları görülebilir (bkz. Şekil 1).

Şekil 1: paket içeriği

7 numaralı listede, hangi protokol veya hizmet bağlantı noktası olursa olsun her türlü ağ paketini topladınız. PyShark, sözde BPF filtresini kullanarak gelişmiş filtreleme yapmanızı sağlar [12]. Liste 8, 80 numaralı bağlantı noktasından gelen 5 TCP paketinin nasıl toplanacağını ve paket tipinin yazdırılacağını gösterir. Bilgiler, en yüksek katman olan paket özniteliğinde saklanır.

Liste 8: Yalnızca TCP paketlerinin toplanması

pyshark'ı içe aktar
yakalama = pyshark.LiveCapture(interface='wlan0', bpf_filter='tcp bağlantı noktası 80')
ele geçirmek.koklama(paket_sayısı=5)
yazdır(yakala)
yakalamadaki paket için:
yazdır(paket.en yüksek katman)

Liste 8'i tcp-sniff dosyası olarak kaydedin.py ve Python betiğini çalıştırın. Çıktı aşağıdaki gibidir:

Liste 9: Liste 8'in çıktısı

# python3 tcp-sniff.p

TCP
TCP
TCP
OCSP
TCP
#

Yakalanan paketleri kutudan çıkarma

Yakalanan nesne bir Rus Matroska bebeği gibi çalışır - katman katman, karşılık gelen ağ paketinin içeriğini içerir. Kutunun açılması biraz Noel gibi hissettiriyor - açana kadar içinde hangi bilgileri bulacağınızı asla bilemezsiniz. Liste 10, 10 ağ paketini yakalamayı ve hem kaynak hem de hedef bağlantı noktası ve adres olarak protokol türünü ortaya çıkarmayı gösterir.

Liste 10: Yakalanan paketin kaynağını ve hedefini gösterme

pyshark'ı içe aktar
ithalat zamanı
# arayüzü tanımla
networkInterface = "enp0s3"
# yakalama nesnesini tanımla
yakalama = pyshark.LiveCapture(arayüz=ağArayüz)
print("%s dinleniyor" % networkInterface)
yakalanan paket için.sniff_continuously(paket_sayısı=10):
# ayarlanmış çıktı
Deneyin:
# zaman damgası al
yerel saat = zaman.asctime(zaman.yerel saat(zaman.zaman()))
# paket içeriğini al
protokol = paket.transport_layer # protokol türü
src_addr = paket.ip.src # kaynak adresi
src_port = paket[protokol].srcport # kaynak bağlantı noktası
dst_addr = paket.ip.dst # hedef adres
dst_port = paket[protokol].dstport # hedef bağlantı noktası
# çıktı paketi bilgisi
yazdır ("%s IP %s:%s <-> %s:%s (%s)" % (yerel zaman, src_addr, src_port, dst_addr, dst_port, protokol))
e olarak AttributeError hariç:
# TCP, UDP ve IPv4 dışındaki paketleri yoksay
geçmek
Yazdır (" ")

Komut dosyası, Şekil 2'de gösterildiği gibi, alınan paket başına tek bir satır olan bir çıktı üretir. Her satır bir zaman damgasıyla başlar, ardından kaynak IP adresi ve bağlantı noktası, ardından hedef IP adresi ve bağlantı noktası ve son olarak ağ protokolünün türü gelir.


Şekil 2: Yakalanan paketler için kaynak ve hedef

Sonuç

Kendi ağ tarayıcınızı oluşturmak hiç bu kadar kolay olmamıştı. Wireshark'ın temellerine dayanan PyShark, sisteminizin ağ arayüzlerini ihtiyaç duyduğunuz şekilde izlemeniz için size kapsamlı ve istikrarlı bir çerçeve sunar.

Bağlantılar ve Referanslar

  • [1] Silver Moon: Linux sunucusunda Ağ Bant Genişliğini İzlemek için 18 Komut, https://www.ikili.com/linux-komutlar-monitör-ağ/
  • [2] Python soket kitaplığı, https://docs.piton.org/3/kütüphane/soket.html
  • [3] python-nmap, https://pypi.org/project/python3-nmap/
  • [4] dpkt, https://pypi.kuruluş/proje/dpkt/
  • [5] PyShark, https://pypi.kuruluş/proje/pyshark/
  • [6] ürkütücü, https://pypi.kuruluş/proje/scapy/
  • [7] Tcpdump ve libpcap, http://www.tcpdump.kuruluş/
  • [8] PyShark, proje web sitesi, http://kiminewt.github.io/pyshark/
  • [9] Libpcap Dosya Formatı, Wireshark Wiki, https://gitlab.com/wireshark/wireshark/-/wikis/Development/LibpcapFileFormat
  • [10] Tshark, https://www.tel köpekbalığı.org/docs/man-pages/tshark.html
  • [11] Apache Spark, https://spark.apache.kuruluş/
  • [12] BPF filtresi, https://wiki.tel köpekbalığı.org/CaptureFilters
Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...
Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...