Windows makinede Wireshark paket alma ve işleme prosedürü nedir?


20

Windows bilgisayarımda bazı trafik izleme işlemleri için Wireshark'ı kullanmak üzereyim . Üzerinde çalışırken, Windows'tan önce Wireshark'in düşük seviye ağ paketlerini nasıl yakalayabildiğini merak ediyordum .

Her şeyden önce, NIC'imdeki bir ağ arayüzü bir paket alıyor. NIC daha sonra bazı ilk kontrolleri yapar (CRC, doğru MAC adresi, ... vb.). Doğrulamanın başarılı olduğunu varsayarak, NIC paketi iletir. Ama nasıl ve nerede?

Sürücülerin NIC ve işletim sistemi veya başka bir uygulama arasındaki yapıştırıcı olduğunu biliyorum. Windows ve Wireshark ( WinPcap ?) İçin ayrı bir sürücü olduğunu da tahmin ediyorum . Aksi takdirde, Wireshark almak mümkün olmaz Ethernet çerçeveleri. Aynı anda bir arada bulunan iki veya daha fazla NIC sürücüsü var mı? NIC hangisini kullanacağını nasıl biliyor?


Senin önerin yanlış. NIC paketi her zaman Windows'a (özellikle aygıt sürücüsüne ve ardından ağ yığınına) dağıtır ve onunla ne yapılacağına karar vermek Windows'a bağlıdır. Windows, bir programın paketlerin kopyalarını "kablo üzerindeymiş gibi", belki de bir filtre uygulayarak almasını isteyebilecek bir özelliğe sahiptir ve Wireshark bu özelliği kullanır. Wireshark yapar değil Windows'un baypas.
zwol

(Paketlerin doğrudan ağ kartından uygulamaya teslim edilmesine izin vererek son derece yüksek hızlı ağ iletişimi daha iyi yapmaya çalışan deneysel işletim sistemleri vardır, ancak AFAIK Windows bunu yapamaz: en azından NDIS katmanından geçersiniz.)
zwol

Yanıtlar:


38

Windows'taki G / Ç modeli bir bileşen yığınına dayanır. Veriler, fiziksel ağ kartı ile verileri tüketecek olan uygulama arasında bulunan yığının çeşitli bileşenlerinden akmalıdır. Bazen bu çeşitli bileşenler veriyi (örneğin bir TCP paketi) yığın boyunca akarken incelerler ve bu paketin içeriğine bağlı olarak veriler değiştirilebilir veya paket tamamen atılabilir.

Ağ Yığını

Bu, uygulamadan kabloya ya da tam tersinden uygulama yapmak için paketlerin içinden geçtiği "ağ yığını" nın basitleştirilmiş bir modelidir.

Yukarıdaki ekran görüntüsünde gösterilen en ilginç bileşenlerden biri WFP (Windows Filtre Platformu) Callout API'sidir. Bunu yakınlaştırırsak, şuna benzer bir şey olabilir:

Windows Filtreleme Platformu

Geliştiriciler kendi modüllerini bu yığındaki uygun yerlere takmakta özgürdür. Örneğin, virüsten koruma ürünleri genellikle bu modele bağlanan ve ağ trafiğini denetleyen veya güvenlik duvarı özellikleri sağlayan bir "filtre sürücüsü" kullanır. Windows Güvenlik Duvarı hizmeti de bu modele de uyuyor.

Wireshark gibi ağ trafiğini kaydeden bir uygulama yazmak istiyorsanız, bunu yapmanın uygun yolu kendi sürücünüzü kullanmak ve ağ paketlerini algılayabilmesi için mümkün olduğunca düşük yığına eklemek olacaktır. Güvenlik duvarı modülünüz onları bırakma şansına sahip olmadan önce.

Dolayısıyla bu sürece dahil olan birçok "sürücü" var. Birçok farklı türde sürücü de var. Ayrıca, sistemde sabit disk sürücüsü okur ve yazar gibi diğer giriş / çıkış formları da benzer modelleri izler.

Başka bir not - WFP belirtme çizgileri, kendinizi ağ yığınının içine sokmanın tek yolu değildir. Örnek olarak WinPCap, NDIS ile doğrudan bir sürücü ile etkileşime girer, yani herhangi bir filtreleme yapılmadan önce trafiği durdurma şansı vardır.

NDIS Sürücüler

WinPcap

Referanslar:

Vista + 'da Yeni Nesil TCP / IP Yığını

Windows Filtre Platformu Mimarisi


3
Üstün diyagramlar Bunlar microsoft.com'da bir yere mi gönderildi? Eğer öyleyse, etrafta dolaşmayı ve bunun yanında başka hangi bilgilerin mevcut olduğunu görmeyi çok isterim.
EEAA

1
Mükemmel cevap. İyi ve kolay açıkladı, harika görselleştirme ve sağlanan kaynaklar! Çok teşekkür ederim!
Hansi

1
+1, WFP üzerine inşa edilmiş, WinDivert denilen bu tür uygulamaları yazmayı önemsiz kılan açık kaynaklı bir sürücü olduğunu söylemeye değer . Ayrıca bunun için bir .NET sarmalayıcı yazdım .

1
Eskiden "Katmanlı Servis Sağlayıcı" diye bir şey vardı - paketleri arayabilir ve yeniden yazabilirsiniz - bu yeteneğin yerine geçecek bir şey var mı? "Filtreleme" API'sinin bir parçası mı? (Oh bekleyin, boşver: Sadece @TechnikEmpire'daki WinDivert bağlantısına baktım ve bunun mümkün olduğunu
gördüm

1
@davidbak evet, WinDivert bir melez türüdür. Bilgilendirme sürücüsü API'leri, geliştiricilerin bir paketi bırakmadan (sürücü gerektirmez) ötesinde bir şey yapabilecek özel sürücüler oluşturması içindir. WinDivert böyle bir sürücüdür, ancak paketleri genel ve çekirdek ve kullanıcı modu alanı içine iterek ve çıkararak paketlere tam erişim sağlar.

3

Ryan Ries'in cevabının dediği gibi:

Örnek olarak WinPCap, NDIS ile doğrudan bir sürücü ile etkileşime girer, yani herhangi bir filtreleme yapılmadan önce trafiği durdurma şansı vardır.

ve bu WinPcap belgelerinde nasıl çalıştığının bir açıklamasıdır .


Bu, Ryan'ın cevabına bir düzenleme olarak daha iyi olurdu. Bu başlı başına bir cevap değil.
Monica

2
Aslında evet, bir daha çok fazla Ryan'ın cevap - onun soruya bir cevap. Soru “Wireshark bunu nasıl yapıyor” idi; Ryan'ın cevabı WinPcap (ki Wireshark kullanır neyi) bir mekanizma hakkında birçok bilgi verir vermez kesinlikle ilginç, ama asıl soruya alakalı değil yani, kullanın. Gönderdiğim bağlantı , WinPcap'in bunu nasıl yaptığını, asıl soru ile ilgili olduğunu açıklıyor .

7
Belki üçüncü taraf kaynağından ilgili bölümleri alıntılayıp açıklarsanız. Başka bir şey değilse, yalnızca bağlantı içeren bir cevap bir cevap değildir. Bu SE politikası. Cevabınız bu sayfaya ekliyor: Kelimenin tam anlamıyla, "Ries'in cevabının internette başka bir yerde nasıl çalıştığının bir açıklaması var"
Monica
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.