【问题标题】:Magic Packets and Virtual Networks魔术包和虚拟网络
【发布时间】:2009-11-06 11:52:27
【问题描述】:

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

当从与我要唤醒的计算机位于同一虚拟网络的计算机上运行代码时,该代码运行良好,但如果计算机位于另一个虚拟网络上,则该代码无法运行。任何想法为什么以及如何解决?

谢谢, 天然气

【问题讨论】:

    标签: c# networking virtual packet


    【解决方案1】:

    魔术数据包是第二层数据包,因此不会跨越路由器(第三层)边界。

    如何解决?将发射器和接收器放在同一个广播域中。在这种情况下,在同一个虚拟网络上。

    【讨论】:

    • 您的 IP 地址是 0xffffffff aka 255.255.255.255,这些广播仅在同一子网内发送。
    • 有没有办法将魔术包发送到另一个广播域上的计算机?
    • 假设 IP 网络。您需要将数据包发送到睡眠计算机的端口。因为它正在休眠,您必须假设该网络的路由器没有当前的 ARP 表条目(IP 到 MAC 映射),因此您不能只发送到它在清醒时的 IP 地址。因此,您需要在目标网络上广播。为此,您需要进行定向广播(例如,从 10.116.10.x 发送到 10.116.11.255)。问题在于它是一个安全漏洞,正确配置的路由器会丢弃这些数据包。
    • 替代方案:将您的网络配置为允许定向广播(非常小心,不推荐),或者在目标子网中放置一个应用程序级代理。缺点:它需要保持清醒。
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2013-01-29
    • 2020-04-12
    相关资源
    最近更新 更多