Hello

I'm Lixin, Welcome to my Blog!

程序员 • 开发 • 分享 • 娱乐

wake on lan 实现远程开机(远程开关机程序)

作者: 分类: 技术文章 时间: 2011-10-31

在上一篇文章“远程开关机程序”中讲了使用wake on lan 协议来实现开机功能。但没有说详细。

“wake on lan”是一个为现在大多数有线网卡所支持的一个功能,目前来说笔记本的无线网卡还不具备,主要是考虑到开启这个功能在关机的情况下仍会消耗一点电力,但随着低功耗硬件和高容量的电池的不断发展,让笔记本实现这个功能也是很容易的。

开启“wake on lan”功能需要在主板的bios里的电源选项里设置,记住开启该功能后即使在关机的情况下网卡仍会消耗一点电力。关机后的网卡会继续接受来着网络的数据包,当接收到开机指令时,便会启动计算机。那这条开机指令的格式是什么呢?

6*0xFF+16*MAC地址

重复六次0xFF和是六次要开机的网卡的mac地址。

一个0xFF是8位,一个mac地址是48位,6*8+16*48=816位 =102字节。

欲激活一台主机,那么就需要向该网卡发送102字节的数据包。如果使用c#的话就需要定义如下:

byte[] sendBytes = new byte[102];

无论激活哪台及其,数据包的前6字节都是一样的,都是0xFF。如果使用c#的话:

for (int i = 0; i < 6; i++)
           {
               sendBytes[i] = 0xFF;
           }

接下来就是填充mac地址了。我们在这里做个假设,目标机器的网卡mac为:

08-00-27-00-D8-9A

对输入的mac要处理一下

阅读全文»

远程开关机程序

作者: 分类: 技术文章 时间: 2011-10-30

背景:有一个营业厅很大,有两层,大致拥有十多台客户体验机,每台体验机其实都是一台电脑,其中主机集中放在后台的机房里,显示器和鼠键在前台,操作系统安装有美萍软件。这样就产生了一个日常问题:每天都需要到机房里把每台电脑逐个开机,下班后有需要每台电脑逐个解锁美萍然后关机(当然不排除拉电闸这种高效方法)。在这种情景下就萌生了要一个远程开关机的程序这么个需求。

首先说关机这事吧。这个实现起来途径很多,难度不大。例如windows系统便自己拥有允许远程关机这么的一个命令:

shutdown [/m \computer]

shutdown命令允许向远程计算机发送关机指令,当然需要远程计算机端授权允许才行,如何授权?可以在组策略里找到相关选项;其次,就是使用软件关机命令,使用软件实现调用系统的api从而实现关机,这个为代码实现方法;还有就是可以使用批处理的at命令,执行计划任务,当到达下班时间便自动关机。

最后我选择了第二种,软件实现方法。排除第一种方法,是对于系统完整性和对部署机的不了解决定的,在程序正式做好投入使用之前我是没到现场见过那些体验机的,即我对目标机器完全不了解,系统是否为精简版、登录需要密码不?其次在技术研究的时候,使用了2台笔记本做实验,发现有一台无法实现关机,问题一定是处在系统配置及自身上,但是作为非专业windows维护人员,又无法通过更改配置解决问题。要是营业厅也出现这样的机器无法解决就不好了;第3中方法就太简单了,配置好计划任务后下班时间自动关机,但是领导不采纳,估计就是觉得它缺乏控制力。

开机,这个问题已开始觉得比较麻烦,后来发现这个非常容易,因为网卡正好具备了一个叫做“Wake On LAN”的功能,简单的说一下,“wake on lan” 原理。首先需要bios支持,打开bios设置,大概在电源管理里把wake on lan 设置为 enable 使能。然后向欲开机的的主机的子网发送一个广播包,包的内容为:6个“FF"+16个目标主机网卡地址。例如目标主机的mac地址是“00010203040506”,那么这个包的内容就是

FFFFFFFFFFFF0001020304050600010203040506000102030405060001020304050600010203040506

0001020304050600010203040506000102030405060001020304050600010203040506

0001020304050600010203040506000102030405060001020304050600010203040506

00010203040506

注意中间没有回车。

将以上数据以udp方法发送到7或者9端口上。这样便实现了远程开机功能。

开机和关机的技术点就这么个解决方法。接着再说说界面问题,界面是个大问题,不知道是不是由于要把这个软件作为营业厅提高工作效率的创新工程,要求界面一定要好看,无奈经过几番修改仍达不到领导理想中的界面,请领导描述具体外观要求,又只说“要漂亮”。幸得时间有限,改到最后限期不满也得接受了。

GUI集设计和控制为一体,通过工具栏里新增布局面板和往布局面板里新增电脑,鼠标自由拖动面板和电脑的位置。右键设置参数,可自定义面板颜色和文字,通过高亮度电脑表示该主机ping得通。



 

 

 

GRUB2引导iso镜像,U盘安装Ubuntu11.10

作者: 分类: 技术文章 时间: 2011-10-24

电脑原先是windows7和ubuntu双系统,使用的是grub2引导程序。最近看到ubuntu11.10出来了,原来的旧ubuntu系统也因为装了很多乱七八糟的东西,想重新装一下。于是下载了ubuntu-11.10-desktop-i386.iso。这次不打算刻碟,在硬盘装就行了。

一开始,我把iso文件放在E盘里。然后重启进入grub,按C键进入命令行模式。输入如下命令:

loopback loop (hd0,6)/ubuntu-11.10-desktop-i386.iso

linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.10-desktop-i386.iso

initrd (loop)/casper/initrd.lz

boot

第一行的意思大概就是把E盘的iso镜像给映射出来,其中我的E盘在这里是第一个硬盘里的第6分区。

第二行应该是载入内核,我的iso是放在E盘根目录的。

boot之后就会运行live系统。但是问题出来了,在安装ubuntu的时候,会提示需要卸载isodevice挂载点。那么敲入命令:sudo umount –l /isodevice 。成功卸载,但是安装此时已经无法继续了,只可以重启再来,输入 sudo reboot 后重启电脑,然后重复输入上面的3行命令再次进入live系统。根据网友意见,手动运行umount命令需要在开始安装系统之前就要先卸载掉。于是照做,发觉不行,先卸载了isodevice后,进入安装程序,就弹个错误框。

思前想后,觉得系统要安装,需要分区,所以需要先卸载挂载点没错,但是挂载点又挂着现在运行的这个系统,卸载了就不行了。突然心生一计,不要放在这个它要分区的硬盘上不就行了。所以立马想到U盘。于是我把iso复制到U盘。然后重启电脑,来到grub,按C进入命令行。

首先,要知道我的U盘在哪里,输入命令:

ls

显示了各个分区,例如 (hd0,1)  (hd0,2)  (hd1,1)  这些东西,其中(hd1,1)显然就是我的u盘了。因为我只有一个硬盘,插入U盘后就会多了个hd1。重复最上面的3行代码,当然第一行需要修改一下,把 (hd0,6)换成U盘点分区,这里是(hd1,1)。因为是读u盘缘故,所以每条命令执行起来比较久。进入系统后,同样先看看/isodevice 里挂载着什么,我的发现它还挂载这E盘,于是运行sudo umount –l /isodevice   命令卸载掉,然后运行安装程序。一路畅通,安装完成。

总结:由于安装的时候要修改分区信息,需要卸载掉所有硬盘的挂载点,所以iso镜像需要放在U盘或者其他的存储介质中,进入live后,及时卸载掉挂载点。方能保证安装正常。

在国内域名正确绑定Google Apps的方法

作者: 分类: 技术文章 时间: 2011-10-22

当注册了自己域名后,如果将其绑定到Google Apps那里去,可以获得免费的邮箱,文档,站点等不错的功能。例如我自己,就把www.lixin.me这个域名绑定到谷歌的Appengine 的博客上面来,把lixin AT lixin.me的邮件绑定到gmail来。

但是这一切要生效,都必须做一件事情,就是更改你的域名的A记录到谷歌的服务器上,下面是谷歌官方的A记录修改方法:


更改域的 A 记录

您域中的 A 记录由您的域名托管服务商管理。利用 A 记录可以将您的裸域网址定向到您域中的其他网址。

注意:具体的指导说明会因域名托管服务商的不同而存在差异,并且 Google 不支持 A 记录。如果下面的常规说明不适用于您,请直接与您的域名托管服务商联系。

登录到您的域名托管服务商。

导航到您的 DNS 管理页面。即“域管理”->“高级设置”。

找到 A 记录设置,然后创建新的 A 记录。

输入托管服务商名称的值。对于某些域名托管服务商来说,'@' 值相当于裸域。

输入以下 IP 地址作为目标值:

216.239.32.21
216.239.34.21
216.239.36.21
216.239.38.21

通过您的域名托管服务商保存更改。

请点击下方的“我已完成这些步骤”。


以上就是官方的操作方法。但是如果按这样设置,在内地是无法访问的,很简单,以上ip地址都在屏蔽之列,你的浏览器无法向上面的4个ip发送请求。如何解决呢?好在谷歌的ip地址非常多,一般情况下没有全部屏蔽完。我们可以通过ghs.google.com这个域名来获取更多可用的ip地址。我们通过查询ghs.google.com这个域名的ip,会发现它的ip很多,而且经常换,我们只需要做的就是使用命令 nslookup ghs.google.com 8.8.4.4 执行这条命令来获取该域名的可用ip,获得更多的可用ip,你可以在自己的电脑上执行该命令,也可以通过在线nslookup来实现,或者先vpn大外国执行命令,获得ip后逐个ping一下,如果ping得通,则记录下来,然后作为替代上面说到的4条A记录IP,添加到你的域名a记录去。这样设置后,就可以正常使用Apps应用了。

Top ↑