一个较难的问题,如何实现网络唤醒?重金200分!!谢绝灌水!(200分)

  • 主题发起人 only you
  • 开始时间
O

only you

Unregistered / Unconfirmed
GUEST, unregistred user!
看到不少关于唤醒的文章,比如MODEM唤醒,网卡唤醒!这里想问一下网卡唤醒的机制和实现
方法,谢绝灌水!
 
这不是软件技术问题呀,怎么跑到这里问了?

简单的说,就是网卡/modem卡接到特定信号的时候,产生一个中断,
系统的I/O芯片检测到这个中断,就自动启动系统,因此有一些条件:
例如:支持这种协议的卡,持这种协议的主板,以及ATX电源等等。

好像不难,不过如果你想用Delphi“实现”的话... @$%#$^
开个玩笑 :)
 
既然是收到信号就唤醒,DELPHI也可以发出这种信号吧?
首先要知道的是什么信号,是那个中断,不知刀兄可否指点一二?
 
要作客户端的功能,当然是可以的,但是:

首先,Modem唤醒是不需要任何特殊信号的,只要设置主板相应选项即可;
网卡的信号有多种协议,现在统一了没有也不知道,
比如原来的是通过包中的特定MAC地址信息来激活的,
现在(以后)又出来可以和操作系统集成的,等等...

不同的方式/协议也针对不同的层次,比如通过操作系统控制的,
彻底关机的情况下恐怕没用;通过MAC地址/硬件的,suspend状态下反而不灵...

至于哪个中断,又回到网卡一级的问题了,和客户程序/软件无关。

不明白你是要做哪一层...
 
我是听说AMD公司的一个程序可以通过网卡启动电脑,即使是关机状态下。恐怕MODEM与网卡的
实现机制是不同的,因为我用MODEM唤醒只须开一下外猫的电源就行了,我不想要程序,就想
了解哪个IP包数据是什么格式,又是如何发送的。得到MAC地址很容易的!
 
〉〉恐怕MODEM与网卡的实现机制是不同的
这个我前面说得很清楚了

AMD的方法就是我说的前一种,通过MAC地址来控制的,
包的格式很简单,在以太网包的任何位置上,
以6个FF为先导,后面跟相应MAC地址重复16次即可:

FF FF FF FF FF FF 08 65 88 a0 00 38 ... ... 08 65 88 a0 00 38
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
重复16次

当然,网卡必须支持这种协议,主板/电源也必须支持网络唤醒
 
那这种包如何形成呢?你说的前导6FF我在一篇关于这个的文章上看到过,相信你也看了
那篇文章,关键是实现的技术,因为文章中特意强调了是一种特殊的数据格式,当发送
到网卡上时会形成特别的电流脉冲来唤醒电脑,关键这种特殊的数据包如何才能形成,我
认为这才我们应该讨论的问题,你是不是说在普通的IP包中的任意位置写上6FF先导,然后
重复16次MAC地址,那如何在这个IP包的位置上写入呢?
 
>>关键这种特殊的数据包如何才能形成,我认为这才我们应该讨论的问题
你想要你就说嘛!你不说我怎么会知道呢?

向局域网发送广播包(可以用UDP),内容带上这段编码就可以了,
你试验一下,有什么问题继续讨论。
 
虽然你的话很有诚意,可是你还是要说清楚的啊!IP包的形成恐怕不是这么简单的由我控制的
吧!数据的位置我想也不是简单的在发送的数据当中(IP包携带的数据),否则人人都会了,
还是什么技术秘密!我想应该位于IP包与目的机进行网络握手的数据段中,可是我如何修改
哪个段呢?
 
好像不是所有网卡都行的。
 
(好不容易上来了...)

技术秘密?你竟然认为这是技术秘密?怪不得...
这项标准是AMD公司提出的,任何一个公司提出一项标准,都希望更多的人接受和使用它,
如果你愿意,他还会提供给你全部的样例源代码用于使用这项技术。
你见过那个公司不是这样吗?因此这绝不是什么技术秘密。

另一方面,我上面说的你试验过了吗?没有试验,就主观认为不行,不太合适吧?
你既然要用心眼看这个世界,就不要被肉眼见到的东西所蒙蔽哟!
 
摘录一段有关于此的文章:

如何实现网络唤醒开机
作者:姚雷

--------------------------------------------------------------------------------

•文章类型:网络技术
•文章等级:4
•适用读者:高级
•软件下载:http://www.amd.com/products/npd/software
       /pcnet_pamily/drivers/magicpacket.htm
•文章下载:hanx.zip


--------------------------------------------------------------------------------


  随着计算机技术的不断发展,新一代的主板都提 供了键盘或鼠标开机(Keyboad/Mouse Power Up)、 调制解调器唤醒开机(M0dem Wake Up)和网络唤醒 开机(Wake On Lan)等功能,前几项大家都用得较,也比较熟悉,但网络唤醒开机由于需要特殊的软 硬件支持,加上介绍这方面情况的资料也很少,因此, 知之者甚少,很多用户在已有硬件支持的情况下,却 不知道怎样才能实现网络唤醒开机。本文将详细说明 网络唤醒开机的原理以及如何实现该功能。

一、网络开机原理

  如果要想通过网络唤醒一台指定的计算机,那 么就必须知道能标识该计算机的身份号。由于被唤醒 的计算机处于关机状态,因此其内部的IP地址和计 算机名字也就消失了,唯一能标识其身份的只有其内 部网卡的物理地址,即MAC地址。该地址是唯一的, 而且每块网卡的MAC地址均不相同。在知道被唤醒的 计算机MAC地址后,通过另外一台计算机运行相应的 软件,向网络上发出含有该地址的特殊数据包。这 时,被要求唤醒的计算机虽然处于关机状态,但是其 内部网卡控制芯片通过专用联线所送来的电流,仍然 可以接受和处理网络上的数据包,因此控制芯片通过 比较数据包内的MAC地址,就可确认自己就是该数据 包的收件者,然后通过专用联线发出开机信号,通知 主板开机启动。

二、硬件要求

  网络唤醒开机必须有相应的硬件支持才行。首先 要有主板支持,现在新一代的主板大都支持该功能, 而且在土板上有一个三脚插座,一般都在PCI插槽附 近,旁边标注“WOL”。其次网卡必须支持,这类网卡 在其板子上比一般的网卡多了一个三脚插座,并且通 常还附带了一条专用的三芯联接线,该线就是用来连 接主板和网卡。最后还必须使用ATX电源,而且其+5V Standbv电流必须比较大,根据Intel的建议规格, 需要600mA以上。该电流的大小可以从电源外部标识 中的+5VSB栏里查到。

  须要说明的是,对于某些国外品牌机而言,比如 笔者所使用的AST-Premium98计算机,因其主板上已 经集成了具有网络唤醒功能的网卡,所以没有什么三 脚插座,也不需要专用的三芯联线。

三、软件要求

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

  Magic Packet1.0软件可以从因特网上下载: http://www.amd.com/products/npd/software/ pcnet_famlly/drivers/maslcpacket.html,文件名是 magicpkt.exe,文件大小为 9OO多KB。

四、Magic Packet软件使用说明

  从因特网上下载magic_pkt.exe后,直接运行它 就可开始安装。该软件默认安装在 c:/pcnet/magic_ pkt目录下,执行该目录下的magpac.exe即可运行软件(为了使用方便,可以自己动手在桌面上建立一个 快捷方式)运行magp ac.exe。

  选择Magic packets菜单栏中的Power On one Host选项,出现画面。在Destiination Ethernet Ad dress对话框中填入所要唤醒的计算机MAC地 址,然后按Send 按钮,该计算机就会被唤醒开机 启动。

  当然该计算 杉BIOS中Wake On LAN或者 ResuMe by LAN选项 必须设置为Enable,至于网卡的MAC地址,可运行该 网卡的设置软件获得,或者就直接运行winipcfg.exe。

  其中适配器地址栏中所显示的数字就是MAC地址。该软件还有一些别的功能,如管理多台计算机定时开机等等,具体操作大家可参考其帮助文件。
 
看来我还是在用肉眼看世界!希望温柔兄能够一语点醒我梦中人!
 
这篇文章我没看过,但是这个程序我自然是知道的,这和我说的方法有什么矛盾吗?
这个程序就是用我说的方法作的,你不相信吗?

再次说明:
>>向局域网发送广播包(可以用UDP),内容带上这段编码就可以了

我说的这个方法你试验过吗?为什么不试验一下再来讨论呢?
因为不相信我?怀疑我的水平和风格?你多看看我回答问题的贴子就知道了,
没有把握我不会下这种定论的。

另外,这个文章是哪个网站上的?我想看看。
 
--------------------------------------------------------------------------------
我这两天正在试!因为工作很忙,有的问题我只是有个想法而已,当我怀疑我的想法可行时
我总是先确定它不成立的种种条件!一旦我发现条件已经不成立了我将着手实行,正如你所
说,如果你已经实验成功了的话何必再让我试一次呢,如果你没有实验成功的话实验
一次又何妨,我决没有轻视你的意思,可是你的发言总是有一种居高临下的味道,可能我太
敏感!得罪之处请原谅!
这篇文章的出处我也记不的了,不过我是用搜索引擎搜出来了的,你不妨“实验”一下。
我再次声明,写此发言决没有轻视你的意思,相反我很愿意向你求教。因为该文章声称只能
用特别的软件才能生成这种特殊的数据包,所以才对你的话产生怀疑,也许你说的对,我是
应该实验一下,不过如果你实验成功了的话不妨把源吗贴上来瞧瞧!我只是想知道答案而已
,如果要我自己去试的话,在看到这篇文章的时候就会去试了,正是因为时间太紧,而我又
想知道答案才到这里贴帖子的!希望你不要说我不劳而获!:cool:,太累了,ZZZZzzzzz....!
--------------------------------------------------------------------------------
 
你提出这个问题,我自然认为你是要做这样的软件,因此就说了这个方法,
如果你是这个目的,你自己去实验是理所应当的,因为试验成功了,也就是做出来了。

你既然不是自己想做这样的软件,一开始就是以讨论为目的,
并且还看到过这样一篇文章,那么你就应该事先说明,
并且把这文章内容也贴出来,这样大家的讨论就有的放矢,难道不是么?

我不认为我是什么居高临下,而是因为你不厌其烦的奇怪论调所导致的不满,
而这种不满当然是因为我不了解你看到这篇文章的内容所产生的想法。
但我还是愿意听一听,我的那一句话是你感觉居高临下?你能告诉我一下吗?
以便我日后改正。

我刚刚在网上搜索了"如何实现网络唤醒开机",得到了一个结果是:
http://www.pcworld.com.cn/2000/back_issues/2014/1433.asp
没有作者姓名,不知道是不是这个姚雷。

但我不知道他说这段话有什么依据?
>>为了唤醒网络上的计算机,必须发出一种特殊的数据包,
>>该数据包的格式与普通数据包不同,而且还必须使用相应的专用软件才能产生。
 
搞清楚为什么提问 为什么回答 我觉得大富翁的两位都是热心善良的大侠
相互的尊重是必须的 我相信如果面对面的讨论更能表现出这种尊重 不要为一两句可能
被误解了的话伤和气啊
 
to g622:谢谢 :)

伤和气我想是不会的,我可能是论坛里最爱吵的人了,不过感觉是越吵越和气,哈哈...

ps:我的表达能力真的很差吗?难道我一定要在一句话的后面加上:) 或者 ^_^
别人才能看得出我在开玩笑?:) ^_^ *_^ ^_* :-(((((((((((((((((((
 
“心眼粗的人没钱但有朋友。所以我时常看不到朋友无意的得罪,也蒙蒙中居贫困而常乐。”
------------摘自 青年文摘
 
faint!!我以为又有人对这个问题感兴趣了呢!

(苦笑着离去...)
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部