LAN'da Uyandırma paketi neden hedef MAC adresinin 16 kopyasını içeriyor?


Yanıtlar:


29

Bence, değer tam olarak 16 olmalı.

AMD ve Hewlett Packard arasında 1995 dolaylarında Magic Packet Teknolojisi ( teknik inceleme , yayın # 20213) geliştirilmiştir. Sayfa 2:

"Ethernet denetleyicisi zaten yerleşik yana adres eşleştirme devresi ..." onlar bir sayaç ekleyerek, onu yeniden öneriyoruz "IEEE adresi 16 tekrarları saymak".

Gerçek uygulamayı tamamen açık tutarken WOL'un eklenmesi önemsiz olmalıdır. Bu tarihsel olarak keyfi görünmüyor ("Oh, 16 yeterince uzun görünüyor"), çünkü:

  1. Sahip olduklarınızı / bildiklerinizi geliştirin. Örnek olarak, 2 ve dolayısıyla onaltılık basamakları kullandığımızı varsayalım. Uygun olarak, bir onaltılık basamak (4 bit) 0-15 arasındaki pozitif değerleri tutar. İşlemcimiz tüm matematiği kontrol eder ve zaten "maks" değerine (15 gibi) 1 eklemeye çalışırsak bir taşma "bayrağı" belirler. Bu oldukça yaygın olduğundan, taşma koşulları için özel bir talimatımız bile olabilir, bu yüzden sözde kodda:

    Initialize a single counter that holds values from 0-15.
    Set it to 0.
    Watch the network. When I see the signal:
    Loop:
      Do I see my address at the right spot?
      Yes: Add 1 to counter.
        Did I just overflow? (15+1 = 0?)
        Yes: Jump out of loop to "wake up" code.
    ...otherwise
    Loop again.
    
  2. Çip sinyal hatları. AMD'nin "devrelere" referansı derin sonlara götürür, bu yüzden gerçekten bilmeniz gereken tek şey, "1'e ayarlanmış bir bit" in bir çipte bir yerde "yüksek" bir voltaja karşılık geldiği basit bir durumu hayal edebileceğimizdir. "toplu iğne".

Arduinos iyi bir örnektir: bir bellek bitini 1 olarak ayarlayın ve Arduino bir çıkış pinini "yüksek" olarak ayarlar. Bu voltaj değişimi genellikle sürüş LED'leri ile gösterilir, ancak transistörlerin büyüsü ile diğer devreleri veya yongaları otomatik olarak etkinleştirebilir, kesebilir veya "uyandırabilir".

Daha doğal bir onaltılık gösterim (FF gibi iki onaltılık basamak, genellikle IP, maskeler ve MAC adreslerinde görülür) ve Arduino'muzun "çıkış pimini 5" i sayacımızda "bit pozisyonu 5" e bağlayalım:

Memory      Value  Event
0000 0000   00     Nothing, so keep adding 1...
0000 1111   0F     Nothing, but add 1...
0001 0000   10     Arduino pin 5 high. New voltage interrupts other circuits.

Bellek konumu bu pime bağlı olduğundan, zarif ve tüm donanım: sadece 1 eklemeye devam edin, sürücü veya BIOS geliştirici koduna müdahale etmeye gerek yok. Sen sadece bir devre yapıcısın. Herkesin yaptığı şey, diğer yonga üreticisinin silikonu tarafından tüketilmesi için yüksek bir iğne sağlayacaksınız. Gerçek dünyada biraz daha karmaşıktır (örneğin, ENC28J60 spec onu dehşet verici ayrıntılarla ortaya koymaktadır), ama bu özüdür.

Bundan sonra, insan barizliği hedeften daha fazla yan etki gibi görünüyor. Bilgisayarlar için MAC'inizin 4 kopyası yeterlidir, ancak şimdi bu sayaç taşmaz ve artık basit değildir. Bu yüzden hedefin mümkün olduğunca çok sayıda silikon, sürücü ve BIOS tasarımcısı tarafından uygulanmasını sağlamak daha olası görünüyor ve 16, herkese "taşma" ve doğrudan sinyalleme arasında yeniden mimarlık ve yeniden programlama olmadan bir seçenek sunuyor.

Şeytan'ın insan tespiti için savunucusunu oynamak, aynı esnekliğe sahip bir sonraki yüksek sayıya ne dersiniz: 256? Bu işe yaramaz: Tek başına veri segmenti ( o zaman ) bir Ethernet çerçevesinden daha büyük bir WOL paketi üretir .

Yani bana göre bu, WOL segmentinin olabileceği tek değer 16 .


1
Adresi görmüyorsanız, sayacı sıfırlamak için sözde kodunuzda da bir satır olmamalı mı? Aksi takdirde yeterli zaman ve gürültü ile her zaman sonunda uyanırsınız.
Luke

@Luke Evet. Başlangıçta bunu kabul ettim, ancak basitleştirme sırasında ana iplik uğruna kaldı. Sadece tekrar ziyaret ettim (çok gecikmeli yanıt için özür dilerim) ve düzeltebilirim, ancak bu sizin için ağ içinde yararlıysa düzenlemeleri onaylamayı umursamıyorum.
ɯͽbρɯͽ

19

Evet. Çok basit ve birisinin bu verileri yanlışlıkla gönderme şansı etkili bir şekilde sıfır.

Basit istiyorsunuz çünkü NIC'deki çok düşük güçlü bir mikrodenetleyici, ham ethernet ağ trafiğini kalıcı olarak izleyebilmeli ve bu deseni görürse harekete geçmelidir ve rasgele bir ağ akışı nedeniyle sistemleri yanlışlıkla açmak istemezsiniz. veri sistemi açma komutudur.


9

Bence bu aslında sadece sihirli bir paketin bilgisayarı uyandırmasını sağlamanın bir yolu. Paketler bu sekans için tarandıkça olmadan herhangi bir protokol başlıkları bakarak (örneğin, IP adresleri, liman sayısı), paket kolaylıkla tanımlanabilir ve sıfıra yakın yanlış sayısı olması gerekmektedir. Bir rasgele ağ protokolünün bir bilgisayarın MAC adresinin 16 katını içeren bir paket gönderme olasılığı sıfıra yakındır, ancak tek bir tekrar varsa yanlış pozitif olasılığı çok daha yüksektir.


1
MAC adresleri her pakette kablo üzerinden her zaman gönderildiği için, tek bir tekrarla yanlış pozitif olasılığı 1 olur.
Sven

@SvW, ancak bu durumda, altı FF baytının ön ekine sahip olmaları gerekmez - bu noktadan bahsetmeme rağmen.
Ale

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.