2009-11-06 3 views
1

J'ai 2 réseaux virtuels, disons 10.116.10.xxx et 10.116.11.xxx. J'ai le code ci-dessous pour envoyer un paquet magique:Paquets magiques et réseaux virtuels

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); 
    } 
} 

Le code fonctionne très bien lorsqu'il est exécuté à partir d'un ordinateur sur le même réseau que l'ordinateur virtuel que je veux me réveiller, mais ne fonctionne pas si l'ordinateur est sur l'autre réseau virtuel. Des idées pourquoi et comment résoudre? limites

Merci, Gaz

Répondre

2

paquets magiques sont couche deux paquets et donc ne pas routeur croix (trois couches).

Comment réparer? Mettez l'émetteur et le récepteur dans le même domaine de diffusion. Dans ce cas, sur le même réseau virtuel.

+0

Votre adresse IP est 0xffffffff aka 255.255.255.255 et ces diffusions sont envoyées uniquement dans le même sous-réseau. – Oliver

+0

N'existe-t-il aucun moyen d'envoyer un paquet magique à un ordinateur sur un autre domaine Boardcast? – Gaz

+0

Supposons un réseau IP. Vous devez récupérer le paquet sur le port de l'ordinateur en veille. Comme il dort, vous devez supposer que le routeur de ce réseau n'a pas d'entrée de table ARP en cours (mappage IP vers MAC) et que vous ne pouvez donc pas simplement envoyer à l'adresse IP qu'il a lorsqu'il est éveillé. Par conséquent, vous devez diffuser sur le réseau cible. Pour ce faire, vous devez effectuer une diffusion dirigée (par exemple à partir de 10.116.10.x envoyé à 10.116.11.255). Le problème avec ceci est que c'est un trou de sécurité et que les routeurs correctement configurés laisseront tomber ces paquets. – janm