Windows'ta genel yayın adresi (255.255.255.255) davranışını nasıl değiştirebilirim?


10

Istenen davranış

Bir uygulama genel yayın IP adresine bir 255.255.255.255paket gönderdiğinde, paketin ff:ff:ff:ff:ff:fftüm arayüzlerde Ethernet genel yayın adresine ( ) gönderilmesini istiyorum .

Linux ve muhtemelen diğer işletim sistemlerinde de bu işe yarıyor gibi görünüyor. Windows XP ve Windows 7 bu konuda farklı davranışlar sergiliyor ve her iki durum da benim durumum için arzu edilmiyor.

Windows XP davranışı

Paket ilk ağ arayüzüne doğru bir şekilde gönderilecektir (arayüz sırası "Ağ Bağlantıları / Gelişmiş / Gelişmiş Ayarlar" bölümünde belirtilmiştir). Ayrıca diğer arayüzlere de gönderilecektir.

Her şey yolunda. Sorun, diğer arayüzlere gönderilirken, yayın paketinin kaynak adresinin ilk arayüzün IP adresidir. Örneğin, bu ağ yapılandırmasını düşünün (sipariş önemlidir):

  • Adaptör 1: IP adresi 192.168.0.1
  • Adaptör 2: IP adresi 10.0.0.1
  • Adaptör 3: IP adresi 172.17.0.1

Şimdi bir yayın paketi gönderirsem, aşağıdaki paketler gönderilir (kaynak ve hedef IP adresleriyle):

  • Adaptör 1'de: 192.168.0.1=>255.255.255.255
  • Adaptör 2'de: 192.168.0.1=>255.255.255.255
  • Adaptör 3'te: 192.168.0.1=>255.255.255.255

    Uygulamada, yayın paketleri kullanan uygulamalar bağdaştırıcı 1 dışındaki arabirimler üzerinde çalışmaz.

Windows 7 davranışı

Ağ arabirimi sırasının değiştirilmesinin Windows 7 üzerinde herhangi bir etkisi yoktur. Bunun yerine, yayın IP yolu tablosu tarafından kontrol ediliyor gibi görünmektedir.

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0   10.202.254.254       10.202.1.2    286
          0.0.0.0          0.0.0.0      192.168.0.1      192.168.0.3     10
       10.202.0.0      255.255.0.0         On-link        10.202.1.2    286
       10.202.1.2  255.255.255.255         On-link        10.202.1.2    286
   10.202.255.255  255.255.255.255         On-link        10.202.1.2    286
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.0.0    255.255.255.0         On-link       192.168.0.3    266
      192.168.0.3  255.255.255.255         On-link       192.168.0.3    266
    192.168.0.255  255.255.255.255         On-link       192.168.0.3    266
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link       192.168.0.3    266
        224.0.0.0        240.0.0.0         On-link        10.202.1.2    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link       192.168.0.3    266
  255.255.255.255  255.255.255.255         On-link        10.202.1.2    286
===========================================================================

Bkz 255.255.255.255yolları? Evet, yayın paketlerini kontrol ediyorlar. Bu durumda, yayın paketleri daha 192.168.0.3düşük metriğe sahip olduğu için gönderilecektir ... ancak diğer arayüzlere değil.

Global yayın paketlerinin kolayca gönderileceği arayüzü değiştirebilirsiniz (sadece 255.255.255.255metrik olarak kalıcı bir rota ekleyin ). Ancak ne kadar çok denerseniz deneyin, yayın paketleri yalnızca tek bir arabirimde gönderilecek, hepsi benim istediğim gibi değil.

Sonuç

  • Windows 7 yalnızca bir arayüze yayın paketleri gönderir. Hangisini seçebilirsin, ama buradaki nokta bu değil.
  • Windows XP, tüm arabirimlere yayın paketleri gönderir, ancak bunları beklendiği gibi yalnızca bir arabirime gönderir, bu da pratikte Windows 7 davranışına eşdeğerdir.

Amaç

Windows'da (tercihen Windows 7) bu genel IP yayını desteğini bir kez ve herkes için değiştirmek istiyorum. Tabii ki daha iyi bir yol desteklenen yapılandırma değişikliği (kayıt defteri kesmek veya benzeri) bir tür olması olurdu, ama tüm önerilere açıkım.

Herhangi bir fikir?


Bu yayınları oluşturmak için ne kullanıyorsunuz? XP yığınımı yönlendirilmiş yayınlardan başka bir şey yapamıyorum. örneğin 10.202.255.255.
Scott Lundberg

Açıkladığınız Doğru Davranışı belirten bir RFC veya başka bir belgeye başvurabilir misiniz? İstediğim davranışı kabul ederken, doğru davranış olarak adlandırmak neyin doğru olduğunu tanımlayan bir spesifikasyona başvurmalıdır. Belirli yönlendirme uygulaması sağlayıcıya bırakılmış olabilir (bu durumda Microsoft)?
Jason R.Combs

Scott Lundberg: Birçok uygulama (özellikle oyunlar) global yayın gönderecek. Örneğin netcat: "nc -v -u 255.255.255.255 5000" kullanarak bazılarını oluşturabilirsiniz.
Etienne Dechamps

Jason R. Coombs: gerçekten, belki de kötü bir kelime seçeneğim vardı. "İstenen davranış" ı kullanmalıydım. Bunun için bir RFC olduğunu düşünmüyorum, ama yanılıyor olabilirim.
Etienne Dechamps

TCP veya UDP paketi mi gönderiyorsunuz? Buna göre social.msdn.microsoft.com/Forums/en/peertopeer/thread/… .
Nissan Fan

Yanıtlar:


6

Microsoft'u savunma işinde olduğumdan değil, ancak yayınların nasıl çalıştığını tanımlamaya çalışan aşağıdaki RFC'leri okuduktan sonra, Microsoft'un herhangi bir RFC'yi ihlal ettiğini düşünmüyorum. IMO, yönlendirme tablosundaki uygun rotalara ulaşacak ve yalnızca söz konusu IP ağı için doğru arabirimden gönderilecek uygulama düzeyinde (yani küresel değil yönlendirilmiş yayınlar) düzeltilmelidir.

Her ikisi de yayınlar için tanımlanmış bir standart olmadığını belirtir. Ayrıca 919'da yayın için belirli bir fiziksel arayüzün seçilmesi gerektiğinden bahseder. Yayını üreten çok evli, çok NIC'li bir makine söz konusu olduğunda, bunun ne olması gerektiği açıkça belirtilmediğini düşünmüyorum. Yayınların hiçbir zaman yönlendiriciler tarafından bir arabirimden diğerine aktarılmaması gerekir, bu nedenle Windows makinesi bir yönlendirici mi yoksa bu durumda değil mi?
Bu ise hareket bir yönlendirici olarak, daha sonra (sizin örnekte Adaptörleri 2 ve 3) bu ağ için yanlış bir IP adresi ile yayını yanıt herhangi bir ana Adaptör yanıt olarak bağdaştırıcıları 2 ve 3'ün Ethernet adresi paket geri göndermesi gerektiğini 1'in IP adresi ve Windows ana bilgisayar, doğru arayüze yönlendirmelidir.
Kulağa kafa karıştırıcı geliyor ... ama bunu ifade etmenin daha iyi bir yolu düşünemiyorum

Ve son olarak, RFC 919 özellikle RFC 919'dan

Sorunun veri bağlantı katmanında zaten çözüldüğünü varsaydığımızdan,
yerel bir yayın veya yönlendirilmiş bir yayın göndermek isteyen bir IP ana bilgisayarının yalnızca
uygun hedef adresini belirtmesi ve datagramı
her zamanki gibi göndermesi gerekir . Gelişmiş algoritmaların yalnızca ağ geçitlerinde bulunması gerekir.

Kaynak IP adresinin bir yayın için alakasız olduğunu gösteren okuma.


Her uygulama yayınları farklı işlediğinden, sorumluluğun bulunduğu yer burasıdır. Örneğin. nbtstatoyunlar çok uluslu makinelerde yönlendirilmiş yayınlar gönderirken, oyunlar küresel yayınları kullanabilir.
Kısacası, uygulama sabitlenmelidir, bu durumda işletim sistemi değil ...

EDIT: İşte aynı koşullar, ancak Linux için bir bağlantı . Linux çekirdeği, varsayılan arabirimden (bu örnekte NIC A) yalnızca bir paket göndererek bunu işler. Uygulamanın NIC'leri numaralandırmasını ve her NIC'ye yönlendirilmiş bir yayın göndermesini önerirler. bağlantı


2
İçinde RFC 919'dan alıntı yaptığınız paragraf ile kaynak adres arasındaki ilişkiyi anlamıyorum. Paketin yayın / tek noktaya yayın özelliğine bakılmaksızın, başka bir arabirimin kaynak adresiyle bir arabirimde IP paketi göndermenin her zaman yanlış olduğu açıktır . Yani, "kaynak IP adresi bir yayın için ilgisiz" diyebilirsin, elbette öyle! Başvuruların yayını kimin gönderdiğini bilmesi başka ne olabilir?
Etienne Dechamps

1
"Ayrıca 919'da yayın için belirli bir fiziksel arayüzün seçilmesi gerektiğinden bahsediyor." Nerede? "255.255.255.255 adresi yerel bir donanım ağında bir yayını belirtir" (RFC919 7.)? Bu durumda katılmıyorum. Ağ düzeyinde değil ana bilgisayar düzeyinde yayınlarla ne yapacağımızı tartışıyoruz. Ayrıca, hemen aşağıda bir ev sahibinin "255.255.255.255 kullanarak tüm yakın komşularına yayın yapabileceği" söylenir. Bütün komşuları. "Belirli bir ağ arayüzündeki tüm komşular" değil.
Etienne Dechamps

1
"Uygulamalar hangi arayüzün yayını gönderdiğini umursamıyor. Sadece buna cevap vermeleri gerekiyor." Hah ... yayınları da göndermeleri gerekiyor, sadece onlara cevap vermekle kalmıyorlar. LAN oyun sunucusu tarayıcısı durumunu düşünün. Ağdaki oyun sunucularını keşfetmek için yayın paketleri gönderir. Yayın paketleri tüm arabirimlere gönderilmezse, oyun sunucusu tarayıcısı bu arabirimler üzerinden erişilebilen oyun sunucularını göstermez. Başka bir deyişle, destansı başarısız.
Etienne Dechamps

1
"Emin değilim, ancak işletim sisteminin 255.255.255.255 isteğini gördüğünü ve tüm arayüzlerde (tüm yakın komşuları bulmak için) göndermesi gerektiğini söylediğini, ancak belirli bir uygulamadan talep edildiğini düşünüyorum. belirli bir IP (metriğe göre varsayılan olabilir). " Katılıyorum. Bu, yapılacak doğru şey olduğu anlamına gelmez. Bence, paketin tüm arabirimlerdeki herkese gönderilmesini bekleyen uygulama geliştiricisinin bakış açısından en az sürpriz ilkesini tamamen ihlal ediyor.
Etienne Dechamps

4
Çoğaltarak ne demek istediğinizden emin değilim. RFC'ler özellikle yayın paketlerinin iletilmesini yasaklar. Sadece bir paket gönderilmelidir, ki bu da tartışmamızın tüm temel noktasıdır. Eğer işletim sistemi sizin söylediğiniz gibi yapacaksa, toplamda 9 paket (her arabirim için 3) üretmek zorunda kalacaktı, çünkü IP katmanı ayrı kaynak IP'lerine sahip üç paket oluşturmak zorunda kalacaktı (Katman 3'teki her NIC için bir tane) ve sonra her bir NIC'nin bunları Ethernet üzerinden göndermesi gerekir (Katman 2). Ağlar arasında rotalar varsa, 3 yanıt geri alırsınız! Hangisi doğrudur?
Scott Lundberg

4

Sonunda, programlı olarak çözdüm. WinIPBroadcast adında çok küçük bir yazılım yazdım . Yayın çerçevelerini tüm arayüzlere aktarmaya özen gösterdim.

İlginç bir gerçeği kullanarak çalışır: geridöngü adresini dinlerken yerel olarak oluşturulan global yayın paketlerini almak mümkündür (127.0.0.1). WinIPBroadcast, RAW yuvalarını kullanarak tüm yayınlar için yerel adresi dinler, ardından her yayın paketi için, tercih edilen dışındaki tüm arabirimlere aktarır.


Windows yığını BSD yığınının bir çatalı olduğundan, BSD'nin aynı davranışı gösterip göstermediğini merak ediyorum.
x0n

Yazılımınız çalışmıyor. The program can't start becuase api-ms-win-core-rtlsupport-l1-2-0.dll is missing from your computer.. .dllGoogle'da bunu bulmakta bol şanslar .
Alex G

@AlexG: Bu garip, bu sorunu github.com/dechamps/WinIPBroadcast/commit/… aracılığıyla çözdüğümü düşündüm . Son sürümü (1.6) çalıştırdığınızdan emin misiniz? Github.com/dechamps/WinIPBroadcast/issues adresinden bir hata göndermekten çekinmeyin , ben de bir göz atacağım.
Etienne Dechamps
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.