ASP.NET循序渐进--5、我们来造砖(ASP.NET小应用之网络唤醒)

本文介绍如何使用ASP.NET开发网络唤醒(WakeOnLAN)应用,通过特定的广播包实现远程唤醒同一局域网内的计算机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  万丈高楼平地起。

  造楼需要用砖,而我们现在却只有造砖的工具。对于楼还没有什么概念。

 

  想要开发一个大型的程序,需要很多小的应用的积累。那我们就从造砖开始吧。

 

  在第二章仅仅是开发了一个SAY HELLO的无聊应用,是不是很不实用。那就马上来一个实用的东东吧:网络唤醒。

 

  网络唤醒:Wake ON LAN(WOL)

  网上有用于此功能的小程序,但很少有人将其搬到WEB上,想像一下,打开浏览器,输出一个网址,填入你想要开机的机器网卡的MAC地址,确认后机器就会自动启动起来,是不是很神奇呢!

  不要误会成只要你的机器接在互联网上这个程序就能使你的电脑开机,路由器是不会转发广播包的,这个程序只能使得和发布.NET程序同一网段的机器能够唤醒。

 

  现在的主板大都有这个WOL的功能。通过一个特定的广播包(Magic_Packet),只要电脑接上网络,电源有电,就可以自动接通电源开机。当然也有一些限制,某些主板需要在BIOS中打开这一功能,而某些还需要在Windows里改驱动设置,具体情形可以通过查找主板的相应资料来确定您的主板是否支持WOL功能。

  此外,交换机、路由器有没有限制了广播包的功能也是有关系的。

 

  网上可以下载到两个小工具,Windows下的应用程序。

  AMD的Magic Packet:http://download.enet.com.cn/html/010062001052902.html

  Depicus:http://www.depicus.com/wake-on-lan/

 

  概念和资料各位自己去研究了,我来谈谈实现。

 

  通过抓包分析工具可以看到这两个应用程序的实现方式,就是将MAC地址做成一个特定的包发往广播地址的特定端口。

  包的大小共102字节,前6个字节为FF(16进制),MAC地址为6个字节长,剩余的96字节就是MAC地址重复出现16次。然后向广播地址255.255.255.255的2304端口发送此包就完成了WOL的应用。

 

  操作:

  1、如图 拖ScriptManager UpdatePanel TextBox 相应的 Label  和 Button

  

 

  2、发送特定包的代码:

  两个参数,字符串格式的MAC地址,以及要发送的目的端口,目的地址直接为广播地址IPAddressBroadcast

  需要在代码文件头部增加以下几个引用:

using System.Net;
using System.Net.Sockets;
using System.Text;

  发包的函数:

public static void SendWOLPacket(string mac, int port)
    {

        Socket Sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

 

        IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, port); //255.255.255.255:2304

 

        byte[] data = new byte[102];

        for (int i = 0; i < 6; i++)
        {
            data[i] = Convert.ToByte("ff", 16);
        }

        for (int i = 1; i <= 16; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                data[6 * i + j] = Convert.ToByte(mac.Substring(2 * j, 2), 16);
            }
        }

        Sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
        Sock.SendTo(data, iep);
        Sock.Close();
    }

 

  3、按钮点击事件的响应:

SendWOLPacket(edtMAC.Text, Convert.ToInt16(edtPort.Text));

 

  至于出错控制,提示等等的事情各位自己搞定了。

 

  我只提供方法和最最关键的步骤,不提供源码下载,自己动手去试试吧!

 

  注意几点:此程序只是通过ASP.NET程序发送特定的包到特定的地址特定的端口,程序发布到服务器上后,就可以通过打开此ASP.NET页面来发送和服务器同一网段的广播包,至于路由和交换机会不会转发这些包,最后使得同一网段上的客户机开机还要看路由和交换机的相应配置情况。

 

  其他扩展:开发C/S结构的程序时如有需要机器不停的发包进行测试可作相应修改就可以很方便的实现了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值