当前位置:  编程技术>.net/c#/asp.net

c#网络唤醒功能实现

    来源: 互联网  发布时间:2014-10-28

    本文导语:  网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机。使用这一功能,IT管理人员可以在下班后,网络流量最小以及企业的正常运作最不受影响的时...

网络唤醒实现了对网络的集中管理,即在任何时刻,网管中心的IT管理人员可以经由网络远程唤醒一台处于休眠或关机状态的计算机。使用这一功能,IT管理人员可以在下班后,网络流量最小以及企业的正常运作最不受影响的时候完成所有操作系统及应用软件的升级及其他管理任务。

为了唤醒网络上的计算机,用户必须发出一种数据包,该数据包的格式与普通数据包不同,而且还必须使用相应的专用软件才能产生。当前比较普遍采用的是AMD公司制作的Magic Packet,这套软件可以生成网络唤醒所需要的特殊数据包。该数据包包含有连续6个字节的“FF”和连续重复16次的MAC地址。Magic Packet 虽然只是AMD公司开发推广的一项技术,并非业界公认的标准,但是仍受到很多网卡制造商的支持,因此许多具有网络唤醒功能的网卡都能与之兼容。

要使用网络唤醒,你必须拥有:

1:可向网卡发送网络“唤醒帧”的软件。

2:可解码“唤醒帧”的网卡,该网卡同时还必须可以从辅助电源中获取能量,并能够向主板发送“唤醒信号”。 (基本上都支持)

先说被唤醒机器如何设置
1.Win7系统下设置如下图,计算机-》设备管理器-》网卡驱动属性



2.ipconfig –all 命令查看本机网卡的MAC地址

发送的网络数据包显示如下图,其中mac地址是随便填写的重复的09。

C#代码如下:

代码如下:

private IPEndPoint point;
private UdpClient client = new UdpClient();
/**
 * 唤醒远程机器方法
 * @param
 * mac 要唤醒的机器的MAC
 * IP
 * port udp消息发送端口
 *
 * 摘要:唤醒方法为网卡提供的魔术封包功能,即以广播模式发送6个FF加上16遍目标MAC地址的字节数组
 **/
private void wakeUp(string mac, int port, string ip)
{
    byte[] magicBytes = getMagicPacket(mac);
    point = new IPEndPoint(IPAddress.Parse(ip), port);//广播模式:255.255.255.255
    try
    {
        client.Send(magicBytes, magicBytes.Length, point);
    }
    catch (SocketException e) { MessageBox.Show(e.Message); }
}

///
/// 字符串转16进制字节数组
///
///
///
public static byte[] strToHexByte(string hexString)
{
    hexString = hexString.Replace(" ", "");
    if ((hexString.Length % 2) != 0)
        hexString += " ";
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
        returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    return returnBytes;
}

///
/// 拼装MAC魔术封包
///
///
///
public static byte[] getMagicPacket(string macString)
{
    byte[] returnBytes = new byte[102];
    string commandString = "FFFFFFFFFFFF";
    for (int i = 0; i < 6; i++)
        returnBytes[i] = Convert.ToByte(commandString.Substring(i * 2, 2), 16);
    byte[] macBytes = strToHexByte(macString);
    for (int i = 6; i < 102; i++)
    {
        returnBytes[i] = macBytes[i % 6];
    }
    return returnBytes;
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 基于python实现的网络爬虫功能:自动抓取网页介绍
  • 救救我,我在RedHat8.0下激活了拨号网络,在重启后一直在搜寻网络,启动不能继续(不但没有实现上网,并且...)
  • Docker扁平化网络设计与实现
  • java的网络功能类socket是作用于哪一层的,偶要写一个更底层的网络通讯程序,用到了APDU协议,用java能实现吗?偶其他的语言不熟!!!!
  • linux下的网络扫描器用什么层次的技术实现?
  • 在xp下装ubuntu系统实现双系统网络连接问题
  • 急,请问linux可以实现跟win2K的网络共享吗?
  • Linux网络编程(怎样实现两个客户端之间的通信)
  • 怎么在LINUX 9.0下实现网络文件共享
  • 《linux网络系统架构设计与实现》谁有中文版的给我一份
  • 如何实现对网络协议栈(TCP/IP)各层数据的提取?!
  • 有没有研究linux1.0左右版本的书?我主要想看看网络部分的实现,版本越早越好
  • linux网络编程(UDP多播)如何实现Observer设计模式?
  • android实现关闭或开启移动网络数据
  • centos6网络配置及网卡设置相关命令及配置文件 iis7站长之家
  • dd能否实现网络间的整盘拷贝?
  • 如何让vm下的两个linux实现网络连接(主机不联网)
  • 谁能告诉我用java如何实现一个基于网络的课件开发工具?
  • 一种网络协议的实现
  • 如何在Linux下用C++实现读取整个目录的网络传输
  • 实现不同的网络互连,除了NAT 和路由。还有什么方法呢?
  • Docker、Kubernetes、Neutron中的网络简介
  • 怎么用dos命令配置登陆网络,随便什么网络,举例就行~
  • 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)
  • 系统网络问题之网络配置
  • 应对 Docker 网络功能难题的挑战与思考
  • 网络爬虫/网络蜘蛛 larbin
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 如何将运行dos的机子联入网络,或在dos下使用网络硬盘
  • centos6网络配置及网卡设置相关命令及配置文件
  • linux不用命令方式读文件获取网络流量,如何使用C函数调用获取网络流量信息?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3