Ana Diğer Wireshark'ta Lua Dissector Nasıl Kullanılır

Wireshark'ta Lua Dissector Nasıl Kullanılır



Dünyanın en iyi ağ paketi yakalama araçlarından biri olan Wireshark, hem çevrimdışı hem de gerçek zamanlı olarak analiz edebilmeniz için belirli veri paketlerine ulaşmanızı sağlar. Uygulamayı, ağınızda akan verileri yakından incelemenin bir yolu olarak düşünün, sorunları ve usulsüzlükleri yakalamanıza olanak tanır.

  Wireshark'ta Lua Dissector Nasıl Kullanılır

Bir paketin verilerinin belirli bir bölümünü analiz etmek istiyorsanız ayrıştırıcıları kullanabilirsiniz. Adından da anlaşılacağı gibi, bu işlem kodu 'inceler' ve dikkat etmeniz gereken belirli yönleri kesmenize olanak tanır. Bu eğitimde, Lua betik dili kullanılarak Wireshark'ta ayrıştırıcıların nasıl oluşturulacağı ve kullanılacağı açıklanmaktadır.

Başlamadan Önce – Disektörler Hakkında Bilmeniz Gerekenler

Ayrıştırıcılar, Wireshark'ta bir veri paketinin bölümlerini analiz etmenin hızlı bir yolunu sunsalar da, etkili bir şekilde çalışmak için bazı protokolleri takip etmeleri gerekir. Bu protokoller aşağıdakileri içerir:

  • Oluşturduğunuz her ayrıştırıcı, farklı bir protokolden belirli türde bir yükü işlemek için kaydedilmelidir. Bu kaydı tamamlamak için, ayrıştırıcınıza aşağıda göreceğiniz bir 'Proto' nesnesi atamanız gerekir.
  • Wireshark aracılığıyla bir disektörü aradığınızda, uygulamadan üç şey alır:
    • TVB Nesnesi – Veri paketinden bir TVB arabelleği.
    • TreeItem Nesnesi – Bir veri ağacında tek bir düğümü temsil eden bir ağaç kökü.
    • Pinfo Nesnesi – Bir paket bilgi kaydı.
  • Yalnızca veri paketiniz 'Proto' nesnenize ayarladığınız DissectorTable ile eşleşirse bir ayırıcı çağırabilirsiniz.
    • 'Farklı Kod Çöz' işlevi aracılığıyla bir ayrıştırıcı kullanımını zorlayarak bu gereksinimin üstesinden gelebilirsiniz. Ancak o zaman bile, yalnızca 'Proto' nesnenize ayarladığınız DissectorTable doğru türdeyse, ayrıştırıcıyı zorlayabilirsiniz.

LUA Kullanarak Disektörünüzü Kurma

Wireshark hem C programlama dilinde yazıldığından hem de C programlama dilini kullandığından, çoğu ayrıştırıcı benzer şekilde C dilinde yazılmıştır. Ancak, Lua'yı kullanmak isteyebilirsiniz. Bu betik dili, C'den daha basittir ve bu nedenle kodlamaya yeni başlayanlar veya daha basit bir dil kullanarak bir ayrıştırıcı oluşturmak isteyenler için daha erişilebilirdir.

Kodunuz daha basit olsa da, Lua'yı kullanırken elde ettiğiniz ayrıştırıcı genellikle C kullanarak oluşturduğunuzdan daha yavaştır.

Adım 1 – Wireshark'ta Lua'yı Kurun

Daha önce Wireshark'ta kullanmadıysanız Lua'yı kurmanız gerekir:

  1. 'Yardım'ı ve ardından 'Wireshark Hakkında'yı tıklayın.
  2. 'Klasörler'i tıklayın.
  3. Aktif bir Lua betiği oluşturmak için aşağıdakilerden birini seçin:
    • Küresel Lua Eklentileri
    • Kişisel Lua Eklentileri
    • Kişisel

Etkinleştirildiğinde, Wireshark'ı her başlattığınızda komut dosyanız hazır olacaktır. Bu komut dosyasında her değişiklik yaptığınızda, değişikliği kaydetmek için Wireshark'ı yeniden başlatmanız veya değişikliklerinizi etkin hale getirmek için tüm Lua komut dosyalarınızı yeniden yüklemek için 'Ctrl + Shift + L' tuşlarına basmanız gerekir.

Adım 2 – Disektörünüzü Oluşturmak İçin Temel Adımlar

Lua'ya zaten aşina iseniz, Wireshark'ta çalışacak kendi inceleme betiğinizi oluşturmak için aşağıdaki adımları kullanabilirsiniz:

  • Hem protokol ağacında kullanım için uzun bir ad hem de ayırıcının görüntüleme filtresi adı olarak işlev gören bir kısa ad ayarlamanızı gerektiren, ayrıştırıcınız için protokolü bildirin.
    • Uygun türleriyle birlikte aşağıdaki üç alanı oluşturun:
    • Soru – Soru türünü gösterir.
    • Cevap – Cevap türünü gösterir.
  • MessageType – Paketinizin bir soru mu yoksa cevap mı istediğini gösterir.
  • Wireshark'ın onları nasıl görüntüleyeceğini bilmesi için alanlarınızı kaydedin. Kayıtlı alanlar olmadan, genellikle size Ağaç Öğesi ProtoField'inizin geçersiz olduğunu söyleyen bir 'Lua Hatası' mesajı alırsınız.
  • Daha önce bahsedilen Pinfo'yu (paketinizle ilgili verileri içeren) ve Ağaç Öğesini (bir alt ağaca ekleyeceğiniz ağacı oluşturarak) içeren bir diseksiyon işlevi oluşturun. Ayrıca, TCP'nizin üzerinde oturan bir 'arabellek' oluşturmalısınız.
  • Wireshark'ın ayrıştırıcıyı kullanması gereken protokolü ve bağlantı noktasını belirtin. Örneğin, protokolü 'TCP' olarak ve port numarasını kullanmak istediğiniz şekilde ayarlayabilirsiniz.

Adım 3 – Disektörünüzü Wireshark'a Ekleyin

Şu anda, disektörünüz elektriksiz bir ampul gibidir. O var, ama içinden biraz güç geçene kadar sana hiçbir faydası yok. Başka bir deyişle, ayrıştırıcınız henüz Wireshark'a eklenmedi, bu nedenle aşağıdaki adımları kullanarak çalışmasını sağlamak için manuel olarak eklemeniz gerekir:

facebooktan resim nasıl indirilir
  1. “Yardım”a tıklayın ve “Wireshark Hakkında” menüsüne gidin.
  2. Lua dosyanız için bir yol listesi bulmak üzere 'Klasör' sekmesini seçin.
  3. 'Kişisel Lua Eklentileri'ni seçin. Gerekirse bir dizin oluşturun.
  4. Oluşturduğunuz Lua dosyasını kopyalayıp “Kişisel Lua Eklentileri” dizinine yapıştırın. Disektörü açmak için Wireshark'ı yeniden yükleyin.

Yakaladığınız paketlerden bazılarını açarak yeni parçalayıcınızda bir test yapmak iyi bir fikirdir. Wireshark, incelemeniz için seçtiğiniz uzun adı, mesaj türü (soru veya cevap) ve kontrolünüzün sonucu hakkında bilgilerle birlikte gösteren bir mesaj göndermelidir.

Bazı Örnek Kodlar

Daha önce bir disektör oluşturmadıysanız (veya Lua'da yeniyseniz), Tel Köpekbalığı denemeniz için kullanışlı bir örnek ayırıcı sunar:

local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Postdisektörler ve Zincirli Disektörler

Lua'da bunları oluşturmada ustalaştıktan sonra, parçalayıcı kullanımınızla biraz daha derinlemesine gitmek isteyebilirsiniz. Wireshark, daha fazla işlevsellik sunan iki ek tür disektör sunar - postdissectors ve zincirleme dissektörler.

Bir post-dissector, bir paket için çalıştırdığınız tüm dissector'ların son kontrolüne çok benzer. Wireshark, kullanmasını istediğiniz diğer tüm ayırıcıları çağırdığında bildirim almak için kaydedersiniz ve bunu 'Protokol' ve 'Bilgi' sütunlarını filtrelemek için kullanabilirsiniz. Bu özellik, veri kümeleri arasında uzun bir boşluk olduğu ve her birini tek tek hatırlayamadığınız bir oturumda birden çok paketi filtrelemek istiyorsanız özellikle kullanışlıdır.

Zincirleme ayrıştırıcılar, tek bir ayrıştırıcının verilerine erişmenizi sağlayarak benzer bir işlev görür (en azından daha önce kullanılan ayrıştırıcılar aracılığıyla filtreleme açısından). Buradaki en önemli avantaj, zincirleme ayrıştırıcının her paketi tekrar gözden geçirmesi gerekmemesi ve sizi orijinal ayrıştırıcının tekrar çalışmasını beklemeye zorlamadan bir sonuç vermesidir.

Lua'da inceleme

Wireshark'ın zaten C'de (doğal dili) dissector oluşturma yeteneği sunduğu göz önüne alındığında, onları Lua'da da yaratma gereğini görmeyebilirsiniz. Yine de, C ile rahat olmayanlar ve Lua'da zaten ustalaşmış olanlar, Lua'nın hafif betiklerinin kendi ayrıştırıcılarını oluşturmayı kolaylaştırdığını görebilirler. Elbette, işlemi çalıştırdığınızda C tabanlı parçalayıcılara kıyasla daha uzun bir yükleme süresinden ödün vermeniz gerekir, ancak ne olursa olsun seçeneğe sahip olmak yararlıdır.

Bununla birlikte, sizden haber almak istiyoruz. Wireshark'ta disektörleri ne sıklıkla kullanıyorsunuz? Onları daha önce C'de yaratmayı denediniz mi ve Lua'da disektör yapmanın ne gibi faydalar sağladığını düşünüyorsunuz? Aşağıdaki yorumlar bölümünde bize bildirin.

Ilginç Haberler

Editörün Seçimi

Firefox 57 Quantum'da UI Animasyonlarını Devre Dışı Bırak
Firefox 57 Quantum'da UI Animasyonlarını Devre Dışı Bırak
Firefox 57 Quantum'da animasyonları nasıl devre dışı bırakacağınız aşağıda açıklanmıştır. Varsayılan olarak etkindirler, ancak bazı kullanıcılar bunları açtırmaktan hoşlanmayabilir.
DWG Dosyası Nedir?
DWG Dosyası Nedir?
DWG dosyası bir AutoCAD çizimidir. CAD programlarıyla kullanılabilecek meta verileri ve 2D veya 3D vektör görüntü çizimlerini saklar.
Chrome Nasıl Kaldırılır ve Yeniden Yüklenir
Chrome Nasıl Kaldırılır ve Yeniden Yüklenir
https://www.youtube.com/watch?v=g4e-Vxt3Cr0 Google Chrome, haklı olarak en popüler web tarayıcılarından biridir. Her mobil ve masaüstü işletim sisteminde mevcuttur, yer imlerinizi ve geçmişinizi cihazlar arasında senkronize eder ve
Microsoft, Windows 10 v1809 ve 1709 için Destek Sonu Tarihlerini Değiştirdi
Microsoft, Windows 10 v1809 ve 1709 için Destek Sonu Tarihlerini Değiştirdi
Microsoft, Windows 10, sürüm 1809 ve Windows 10, sürüm 1709 için destek sona erme tarihlerini güncelledi. Şirket, devam eden koronavirüs pandemisi nedeniyle bu ürünler ve diğer bazı eski uygulamalar ve hizmetler için destek süresini uzatıyor. . Duyuru şunu söylüyor: Reklam Windows 10 için revize edilmiş hizmet sonu tarihi,
Windows 10'da Fare Kaydırma Hızını Değiştirme
Windows 10'da Fare Kaydırma Hızını Değiştirme
Windows 10'da, fare tekerleğinizin her hareketi için etkin belgenin kaydıracağı satır sayısını değiştirebilirsiniz. Kullanabileceğiniz 3 yöntem vardır.
Microsoft Defender ATP, Android Önizleme sürümüyle birlikte artık Linux'ta da kullanılabilir
Microsoft Defender ATP, Android Önizleme sürümüyle birlikte artık Linux'ta da kullanılabilir
Microsoft, Android için bir önizleme sürümü ile birlikte Linux için Microsoft Defender Gelişmiş Tehdit Koruması'nın (Microsoft Defender ATP) genel kullanıma sunulduğunu duyurdu. Reklam Microsoft Defender, Windows 10 ile birlikte gelen varsayılan antivirüs uygulamasıdır. Windows 8.1, Windows 8, Windows 7 ve Vista gibi Windows'un önceki sürümlerinde de vardı, ancak daha azdı
Gmail Mesajlarınızı PDF Olarak Nasıl Kaydedebilirsiniz?
Gmail Mesajlarınızı PDF Olarak Nasıl Kaydedebilirsiniz?
Gmail'in birçok kullanışlı e-posta seçeneği vardır. Ancak, görünüşte eksik olan bir şey, e-postaları bir PDF'ye (Taşınabilir Belge Formatı) dönüştüren bir seçenek. Mesajların yedek kopyalarını arşivlemeden kaydetmek için bir PDF dönüştürme seçeneği kullanışlı olacaktır.