2009-11-06 4 views
1

У меня есть 2 виртуальных сети, скажем 10.116.10.xxx и 10.116.11.xxx. У меня есть следующий код, чтобы отправить волшебный пакет:Магические пакеты и виртуальные сети

using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Globalization; 

public class MagicPackets:UdpClient  
{ 
    public MagicPackets() : base() 
    { 
    } 

    public void SetClientToBrodcastMode()  
    { 
     if(this.Active) 
     this.Client.SetSocketOption(SocketOptionLevel.Socket, 
           SocketOptionName.Broadcast,0); 
    } 
} 

public class Run 
{ 
    public static void Main(string[] args) 
    { 
     Run.WakeFunction(args[0]); 
    } 

    private static void WakeFunction(string MAC_ADDRESS) 
    { 
      MagicPackets client=new MagicPackets(); 
      client.Connect(new 
      IPAddress(0xffffffff), 
      0x2fff); 
      client.SetClientToBrodcastMode(); 
      int counter=0; 
      byte[] bytes=new byte[1024]; 
     //first 6 bytes should be 0xFF 
     for(int y=0;y<6;y++) 
      bytes[counter++]=0xFF; 
     //now repeate MAC 16 times 
     for(int y=0;y<16;y++) 
     { 
      int i=0; 
      for(int z=0;z<6;z++) 
      { 
        bytes[counter++]= 
         byte.Parse(MAC_ADDRESS.Substring(i,2), 
         NumberStyles.HexNumber); 
        i+=2; 
      } 
     } 

     int reterned_value=client.Send(bytes,1024); 
    } 
} 

код отлично работает при запуске его с компьютера на одной и той же виртуальной сети, что и компьютер, я хочу, чтобы разбудить, но не работает, если компьютер на другой виртуальной сети. Любые идеи, почему и как исправить?

Спасибо, Gaz

ответ

2

Волшебные пакеты слой два пакет и поэтому не кросс маршрутизатора (слой) три границы.

Как исправить? Поместите передатчик и приемник в тот же широковещательный домен. В этом случае, в той же виртуальной сети.

+0

Ваш IPAddress равен 0xffffffff aka 255.255.255.255, и эти трансляции отправляются только в пределах одной подсети. – Oliver

+0

Невозможно отправить волшебный пакет на компьютер в другом домене? – Gaz

+0

Предположим, что IP-сеть. Вам нужно получить пакет в порт спящего компьютера. Поскольку это спящий режим, вы должны предположить, что маршрутизатор для этой сети не имеет текущей записи таблицы ARP (сопоставление IP-MAC), и поэтому вы не можете просто отправить IP-адрес, который он имеет при пробуждении. Поэтому вам необходимо транслировать в целевой сети. Для этого вам нужно будет сделать направленную трансляцию (например, от 10.116.10.x отправлено до 10.116.11.255). Проблема заключается в том, что это дыра в системе безопасности, и правильно настроенные маршрутизаторы потеряют эти пакеты. – janm

Смежные вопросы