C# 远程唤醒(远程开机)

C# 远程唤醒(远程开机)

近日,小白要用到远程开机的功能,网上大多介绍的是Magic Packet的工具。实际上,此Magic Packet是AMD公司开发的,请在google.cn中搜索Magic Packet Technology。原理上我们不用深入,实现上是发一个BroadCast包,包的内容包括以下数据就可以了。FF FF FF FF FF FF,6个FF是数据的开始,紧跟着16次MAC地址就可以了。比如MAC地址是11 22 33 44 55 66,那么数据就是FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66........(11 22 33 44 55 66重复16次)。这个数据在包的任何位置都可以,或者包仅为这个数据。然后网播出去就可以了。简单的实现如下:
 

 1  private   static   void  WakeUp( byte [] mac) {
 2              UdpClient client  =   new  UdpClient();
 3              client.Connect(IPAddress.Broadcast,  30000 );
 4              
 5               byte [] packet  =   new   byte [ 17   *   6 ];
 6 
 7               for  ( int  i  =   0 ; i  <   6 ; i ++ )
 8                  packet[i]  =   0xFF ;
 9 
10               for  ( int  i  =   1 ; i  <=   16 ; i ++ )
11                   for  ( int  j  =   0 ; j  <   6 ; j ++ )
12                      packet[i  *   6   +  j]  =  mac[j];
13 
14               int  result  =  client.Send(packet, packet.Length);
15          }


PS:跨路由器的问题(不是公网IP问题)。如果机器A和机器B处于同一个网段内,用client.Connect(IPAddress.Broadcast,port)是可以的,如果A和B不是处于同一个网段内,那么就要用网段内的广播地址,比如A机器是192.168.1.2,B机器IP地址是192.168.100.3,用A远程唤醒B,就要用B网段的广播地址,192.168.100.255。
IPAddress ip = new IPAddress(new byte[]{192,168,100,255});
client.Connect(ip,port)。原理可以参考网络协议。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值