Month: 12 月 2012
Mac 快捷键大全附KeyCue软件介绍
译注:在以下的列表中,「opt」为键盘上「Option键」的简称、「cmd」是「Command键」、「ctrl」则是「Control键」的简称。作者表示所有按键都经过实验,但译者并没有亲自使用过所有的按键组合,所以本文内容仅供参考;如果您要尝试没有使用过的按键组合,请自己小心。
一、开机时按下……
滑鼠按键 弹出抽取式媒介(2.4f1版以前的Boot ROM可能不包括退出CD片)
opt键 在配备「New World」韧体系统的机种上叫出「Open Firmware」开机系统选择功能。
cmd-opt键 按住这两个键,直到电脑发出二次声响,就会改以Mac OS 9开机。
cmd-x(有时只按住x键) 如果Mac OS 9和Mac OS X在同一个开机用的硬碟区段(partition)上,按这个键会强迫以OS X开机。
cmd-opt-shift-delete 跳过原定的启动磁碟,改以外接磁碟(或光碟机)开机。这个按键的主要作用,其实是强迫电脑不要从预设的启动磁碟读入系统档案,所以会产生从其他磁碟开机的「副作用」。如果您的Mac是配备SCSI介面的机种,它会从编号(ID)最高的磁碟机往下搜寻,直到找出可以开机的磁碟区段为止。至於在配备IDE介面的机种上则不确定它的搜寻顺序。
cmd-opt-shift-delete-# 从指定ID的SCSI磁碟开?#代表SCSI编号)。
cmd-opt-p-r 清除系统参数记忆体(PRAM),必须按住不放,等发出两次响声之後再放开。
cmd-opt-n-v 清除NV RAM,类似在Open Firmware中做「重置全部」(reset-all)的动作。
cmd-opt-o-f 开机时进入open firmware。
cmd-opt-t-v 强制Quadra AV机种使用外接电视机当作显示器。
cmd-opt-x-o 以唯读记忆体中所烧录的系统软体开机(仅适用於Mac Classic机种)。
cmd-opt-a-v 强制电脑辨识苹果AV显示器。
c 使用光碟开机。如果原先设定由OS X开机,但光碟机里没有放置开机光碟,则可能会改由OS 9开机。
d 强制以内建磁碟机开机。
n 按住n键直到萤幕上出现Mac标志,电脑会尝试透过BOOTP或TFTP以网路伺服器开机。
r 强制PowerBook重置萤幕设定。
t 强制配备FireWire介面的机种进入外接磁碟模式(FireWire Target Disk mode)。
shift 关闭所有延伸功能(OS 9或OS X之下的Classic环境)。
shift 关闭登入项目,同时也会关闭所有不必要的程式核心(kernel)延伸功能(也就是所谓安全开机模式,仅适用OS X 10.1.3或更新的系统版本)。
cmd 开机时关闭虚拟记忆体(Virtual Memory,仅适用OS 9或OS X之下的Classic环境)。
空白键 开机时启动延伸功能管理程式(OS 9或OS X之下的Classic环境)。
cmd-v 开机过程中显示控制台讯息(仅适用OS X)。
cmd-s 开机後进入单一使用者模式(仅适用OS X)。
cmd-opt-c-i 先将系统时钟设定为日期1989年9月20日,然後以这个按键组合开机,就可以看到萤幕上显示特殊的系统小秘密(仅适用於Mac IIci机种)。
cmd-opt-f-x 先将系统时钟设定为日期1990年3月19日,然後以这个按键组合开机,就可以看到萤幕上显示特殊的系统小秘密(仅适用於Mac IIfx机种)。
二、萤幕上出现小Mac笑脸时按下……
空白键 开机时启动延伸功能管理程式(OS 9或OS X之下的Classic环境)。
shift 关闭包括MacsBug(一种程式设计师工具程式)在内的所有延伸功能(OS 9或OS X之下的Classic环境)。
shift-opt 关闭除了MacsBug之外的所有延伸功能(OS 9或OS X之下的Classic环境)。
ctrl 中断开机过程,进入MacsBug除错模式。
三、系统画面出现後按下……
cmd-opt 当OS 9或OS X中的Classic环境连接磁碟机时,可以重建磁碟机的桌面档案。
opt 不要开启任何系统视窗(Mac OS 9)。
shift 在系统档案(Finder)启动时暂时不要开启系统视窗。这些视窗并没有被真的关闭,只要您重新开机,这些视窗都就会照常出现(Mac OS X)。
shift 不要执行任何「启动项目」软体(Mac OS 9)。
四、在系统画面中按下……
按住opt键,再以滑鼠游标
按视窗上的关闭方块 关闭所有的系统视窗(除了弹出式视窗之外);按cmd-opt-w键也可以获得一样的效果。
cmd-shift-opt-w 关闭所有的系统视窗(包括弹出式视窗)。
cmd-右箭头键 在档案视窗以列表模式显示时,开启一个档案夹。
cmd-opt-右箭头键 在档案视窗以列表模式显示时,重复开启档案夹、以及其下所包含的多层档案夹。
cmd-左箭头键 在档案视窗以列表模式显示时,关闭一个档案夹。
cmd-opt-左箭头键 在档案视窗以列表模式显示时,重复关闭档案夹、以及其下所包含的多层档案夹。
cmd-上箭头键 开启上一层档案夹。在Mac OS X中,如果事先并未选定档案夹、而且没有开启任何视窗,这个按键会开启现在使用者的专属目录。
cmd-opt-上箭头键 开启上一层档案夹,并关闭现用档案夹。
cmd-opt-shift-上箭头键 将桌面变成现用视窗,并且选择最上层磁碟机。
cmd-下箭头键 开启选取的项目。在Mac OS X中,如果事先并未选定档案夹、而且没有开启任何视窗,这个按键会开启桌面档案夹。
cmd-opt-下箭头键 开启选取的项目,并关闭现用的档案夹。
opt-滑鼠按键 按条列档案视窗中的小三角形图像时,可以显示或隐藏下层档案夹中的内容。
tab键 选择名称以下一个英文字母开头的档案夹。
shift-tab键 选择名称以上一个英文字母开头的档案夹。
cmd-delete 把选取的项目搬进垃圾桶
五、在系统画面中的「视窗」选单中……
cmd-选取项目 关闭视窗。
cmd-shift-选取项目 将弹出式视窗归位。
cmd-opt-选取项目 展开选取的视窗,并关闭其他所有视窗。
ctrl-选取项目 展开选取的视窗,并隐藏其他视窗的内容。
·ctrl-opt-选取项目 启动选取视窗,并展开所有的其他视窗。
六、系统启动完毕之後……
在有电源按钮的机种上
电源按钮 在萤幕上显示包括「关机」、「睡眠」、以及「重新开机」按钮的对话框(请参阅下一节)。
cmd-ctrl-电源按钮 强制重新开机。这种方式非必要不建议使用,因为有可能损坏磁碟上的资料内容。
ctrl-cmd-opt-电源按钮 快速关机。
cmd-电源按钮 启动程式除错软体(如果已事先安装的话)。较早期的Mac(例如Mac II时代的机器)需要先安装由Paul Mercer所写的除错延伸功能(debugger init)来使用这个功能;不过这个功能在配备68040处理器的Mac机种上,已经成为系统韧体内容的一部份。
cmd-opt-电源按钮 让後期型式的PowerBook和桌上型Mac进入睡眠状态。
cmd-opt-ctrl-电源按钮 重新设定电源管理程式(Power Manager;仅适用PowerBook 500系列)。
shift-fn-ctrl-电源按钮 重新设定电源管理程式(Power Manager;仅适用PowerBook G3与G4系列)。
七、在没有电源按钮的机种上
ctrl-退片按钮 「退片」按钮位於新款USB键盘的最右上角,平常用於退出光碟片。按下这个组合可以在萤幕上显示包括「关机」、「睡眠」、以及「重新开机」按钮的对话框(请参阅下一节)。
cmd-ctrl-退片按钮 强制重新开机,正常状况下不建议使用。
ctrl-cmd-opt-退片按钮 快速关机。
cmd-退片按钮 启动程式除错软体(如果已事先安装的话)。较早期的Mac(例如Mac II时代的机器)需要先安装由Paul Mercer所写的除错延伸功能(debugger init)来使用这个功能;不过这个功能在配备68040处理器的Mac机种上,已经成为系统韧体内容的一部份。
cmd-opt-退片按钮 让後期型式的PowerBook和桌上型Mac进入睡眠状态。
八、在所有机种上
cmd-opt-esc 强迫退出目前使用中的软体。
cmd-shift-0 让後期型式的PowerBook与桌上型Mac进入睡眠状态,不过在OS X上不适用。如果在可以配备三部软碟机的Mac机种上(如Mac SE),这个按键可以退出第三部软碟机中的碟片。
cmd-shift-1或2 弹出内藏或外接软碟机中的碟片。在可以配备两部软碟机的Mac(如Mac SE或Mac II)上,则是依次退出两部软碟机种的碟片。
cmd-shift-3 拍摄萤幕图片
cmd-shift-4 拍摄使用者定义的萤幕区域。在Mac OS 9中,如果在选定区域时按下Control键,则拍摄的内容会被储存在记忆体中的剪贴板里,可以直接在其他软体中「贴」上文件。
cmd-shift-大写固定键-4 如果按下大写固定键(也就是「caps lock」键),则可以拍摄使用者选定的视窗内容(仅适用於Mac OS 9或OS X下的Classic环境)。
cmd-ctrl-shift-3 将萤幕图片拍摄至记忆体剪贴板。
cmd-ctrl-shift-4 将使用者指定的萤幕区域拍摄至记忆体剪贴板。
cmd-ctrl-shift-大写固定键-4 将使用者指定的视窗内容拍摄至记忆体剪贴板(仅适用於Mac OS 9或OS X下的Classic环境)。
cmd-tab 切换执行中应用软体。
cmd-space 切换使用的语言系统(如果已安装一种以上的语言系统)。
opt-F3、opt-F4、
或是opt-F5 开启Mac OS X的「系统预置」视窗(仅在「系统预置」尚未执行的时候才有作用)。
cmd-F1 在Mac OS X中侦测显示器。
cmd-F2 在Mac OS X中切换萤幕同步显示内容。
F12 退出CD或DVD(在 (在Mac OS X 10.1.2或以上的版本中须按住不放)。如果光碟可以被退出,按这个键就会退出。如果不能退出(例如正在使用中),则按键没有作用。
F14 让萤幕变暗(适用於G4 Cube、iMac G4、或许还有其他机种)。
F15 让萤幕变亮(适用於G4 Cube、iMac G4、或许还有其他机种)。
cmd-ctrl-shift-0 在执行Mac OS 9的PowerBook上,强制硬碟停止转动。
opt-「清除垃圾」选单指令 不显示「有档案已经锁住」警示,直接清除垃圾桶内容;锁住的项目也会被删除。
九、在睡眠/□重新开机对话框中
S键 睡眠
R键 重新开机
esc键 取消
cmd-.(英文句号) 取消
Return或Enter键 关机
电源按钮 取消(可能仅适用於Mac OS 9.2.x)
十、在其他对话框中
esc键 取消
cmd-.(英文句号) 取消
Enter键 预设按钮
Return键 预设按钮(如果同时没有其他文字栏位会用到return键)
cmd-d 不储存(在储存/□取消/□不储存对话框中)
十一、在有「fn」键的键盘上
fn-backspace 往前删除字元
十二、滑鼠按钮
option-以滑鼠游标按
另一个应用软体的视窗 切换到另一软体,并隐藏现用软体。
cmd-拖移视窗 拖移视窗,但不将该视窗切换至最前方(该应用软体必须支援视窗在对话框之後运作的功能)。
cmd-拖移视窗内容 在系统视窗中,利用滑鼠游标来搬动视窗的内容。
cmd-以游标按视窗标题栏 显示该视窗在硬碟中所在位置的路径(基本上仅适用於系统档案视窗,但某些软体也支援这个功能)。
option-按视窗标题栏
两下以隐藏视窗内容 隐藏所有视窗的内容,仅馀标题栏显示在萤幕上(Mac OS 9或Classic环境)、或将视窗全部隐藏至Dock中(Mac OS X)。
option-视窗标题栏中的
缩放方块 将视窗放大至全萤幕。
option-视窗上的黄色按钮 将所有的软体视窗隐藏在Dock中(仅适用Mac OS X)。
option-视窗上的绿色按钮 将视窗放大至全萤幕(仅适用部份软体)。
十三、仅适用Mac OS X的Dock项目
cmd-滑鼠按钮 显示项目在系统视窗中的位置。
cmd-opt-滑鼠按钮 启动某一软体、隐藏其他软体
ctrl-滑鼠按钮
(或以滑鼠按钮按住项目不放) 显示项目特色选单
cmd-拖移项目至Dock 停止目前的Dock项目移动,以便将其他文件图像拖移到应用软体图像上。
cmd-opt-拖移项目至Dock 强制Dock上的软体开启拖移上去的文件。
十四、控制条板
opt-拖移整个控制条板 移动控制条板。
opt-拖移某个控制条板模组 重新安排模组的顺序。
opt-将模组拖移至垃圾桶 解除安装某一模组。
opt-将模组拖移至条板以外的地方 将模组档案拷贝到拖移的位置。
—-《Mac上的快捷键巧用》—–
一、启动电脑时的巧妙使用:
1.启动时,同时按住“option”键可以重建桌面,此操作最好每月做一次;
2.启动时,按住“shift”键可以关闭所有系统功能扩展;
3.启动时,按住鼠标可以推出软盘以避免将其用作启动磁盘;
4.启动时,按住“shift+option+delete”键可以忽略启动磁盘,并自动寻找另一个介质做启动盘;
5.启动时,按住“option+P+R”键可以重设“选配器”和“控制板”,这种方法对于使用时间较长(半年以上)且系统有问题的电脑会有意想不到的效果;
6.同时按住“shift+option+电源键”可以重新启动或关闭电脑;
7.在鼠标不能动时,同时按住“control+电源键”可以强行启动电脑。
二、使用显示图像或文件夹工作时的巧妙使用:
1.鼠标边按图像或文件夹可以打开图像或文件夹;
2.用鼠标拖曳图像或文件夹可以移动到所需位置。
3.按住“option”+鼠标拖图像或文件夹可以将图像或文件夹拷贝到其它文件夹中,而不是移动;
4.在拖曳图像或文件夹时将图像或文件夹拖至窗口上端的菜单栏可以取消对它的移动或拷贝;
5.按住“shift键”+整理窗口可以整理所选图像。
6.按住“return”或“enter”键可以编辑所选图像或文件夹的名称;
7.按任一字母键将选择以该字母开头而命名的图像或文件夹;
8.同时按住“shift+tab”键将按字母顺序选择上一个图像或文件夹(注:中文名称以第一个字的汉语拼音的第一个英文字母为准);
9.按方向右键或方向左键将选择左面或右面的图像或文件夹;按方向上键或方向下键将选择上面或下面的图像或文件夹;
10.按“shift”+点按所需图像或文件夹可以选择多个图像或文件夹,或用鼠标拖曳到封入所需图像或文件夹而选择多个图像或文件夹。
三、使用文件对话框时的巧妙使用:
1.打开对话框时(如使用“文件”菜单下的“打开”或“存储”等命令时同时)按“.”或按“esc”键可以取消该命令;
2.同时按“苹果键 + 方向上键”或点按桌面图像可以上移一层。按“方向上键”或“方向下键”可以选择上一个或下一个项目;
3.按“option + 打开替身”可以显示而不是打开替身的原文件;
4.“tab”键使目录或名称框成为现用;
5.按“command + N”键可以建立新文件夹;“return”或“enter”或“O”键可以打开所选项目。
四、使用窗口工作时的巧妙使用:
1.按“command+W”键或点按窗口关闭格(位于窗口左上角)可以关闭当前文件夹窗口;
2.同时按“option+command+W”键或“option+点按窗口关闭格”可以关闭所有文件夹窗口;
3.按“command”键+拖曳窗口可以移动该窗口但不使其成为现用窗口;
4.连续点按两下文件夹的标题行即隐藏显示该文件夹,再连续点按两下即恢复显示;
5.按“option”键+打开或“option”键+连按图像可以打开该图像后自动关闭该窗口。
五、在一些选项中的巧妙使用:
1.按“option”键+清倒废纸篓可以跳过“清倒废纸篓”警告和删除“废纸篓”内已锁定的文件;
2.按“command”键+拖曳图像可以在移动图像时更改当前设置“整齐排列”(仅在“显示”控制板内);
3.在插入磁盘时,按住“command+option+tab”键可以在插入时自动抹掉磁盘内容;
4.在“选配器”内,按住“tab”键可以使下个列表成为现用。按住“shift+tab”键可以使上个列表成为现用;
5.按“option”键+使其它程序成为现用(从“应用程序”菜单内选取或点按其中一个窗口)可以在切换到其它程序时隐藏该程序窗口;
6.同时按住“command+option+esc”键可以强行退出死机程序;
7.同时按住“command+shift+3”键可以把当前屏幕上的内容转变成一个图像,“command+shift+4”可以选择一个区域拍屏,此图像可以在Photoshop软件中打开使用,也可以打印输出;
8.按住“command+G”键可以在连接其它计算机时选定“客人”;
9.如果安装WordScript,按“command+方向右键”可以设置为英语,按“command+方向左键”可以设置为系统语系。
10.按“command+space”键可以设置为“键盘”菜单内的下一个语系(比如:英文切换到中文,中文切换到英文);按“command+option+space”键可以设置为当前语系内的下一种语言(如果此语系有多种语言的话)。
新G4的某些快捷键:
没有死机的情况下,可以按cmd+ctrl+eject重启
ctl+option+cmd+Eject 关机
option+cmd+Eject 休眠
control+Eject 提示关机、重启或者休眠
当然,如果你一下子记不住这几百个快捷键方法,你可以下载一个 叫keycue的软件,按住command就可以显示当前的可用快捷方式。
Git教程系列-详细版(转载收藏)
http://blog.enjoyrails.com/2008/12/28/git%E8%AF%A6%E8%A7%A3%EF%BC%88%E4%B8%80%EF%BC%89/
http://www.5iphp.com/node/124
流程:取代码 → 每次工作前更新代码到最新版本 → 修改代码 → 提交代码到服务器
取代码及修改全局设置
设置用户名与邮箱
1 2 |
git config --global user.name "My Name" git config --global user.email "my@email.com" |
从已有的git库中提取代码
1 |
git clone git@server:app.git myrepo |
每次更改代码的操作
更新本地代码到最新版本(需要merge才能合到本地代码中)
1 |
git fetch |
合并更新后的代码到本地
1 |
git merge |
更新代码方式的另一种方法(git pull是git fetch和git merge命令的一个组合)
1 |
git pull |
修改代码后,查看已修改的内容
1 |
git diff --cached |
将新增加文件加入到git中
1 |
git add file1 file2 file3 |
从git中删除文件
1 2 |
git rm file1 git rm -r dir1 |
提交修改
1 |
git commit -m 'this is memo' |
如果想省掉提交之前的 git add 命令,可以直接用
1 |
git commit -a -m 'this is memo' |
commit和commit -a的区别, commit -a相当于:
- 第一步:自动地add所有改动的代码,使得所有的开发代码都列于index file中
- 第二步:自动地删除那些在index file中但不在工作树中的文件
- 第三步:执行commit命令来提交
提交所有修改到远程服务器,这样,其它团队成员才能更新到这些修改
1 |
git push |
其它常用命令
显示commit日志
1 |
git log |
不仅显示commit日志,而且同时显示每次commit的代码改变。
1 |
git log -p |
回滚代码:
1 |
git revert HEAD |
你也可以revert更早的commit,例如:
1 |
git revert HEAD^ |
将branchname分支合并到当前分支中。(如果合并发生冲突,需要自己解决冲突)
1 |
git merge branchname |
解决冲突
当merge命令自身无法解决冲突的时候,它会将工作树置于一种特殊的状态,并且给用户提供冲突信息,以期用户可以自己解决这些问题。当然在这个时候,未发生冲突的代码已经被git merge登记在了index file里了。如果你这个时候使用git diff,显示出来的只是发生冲突的代码信息。
在你解决了冲突之前,发生冲突的文件会一直在index file中被标记出来。这个时候,如果你使用git commit提交的话,git会提示:filename.txt needs merge
在发生冲突的时候,如果你使用git status命令,那么会显示出发生冲突的具体信息。
在你解决了冲突之后,你可以使用如下步骤来提交:
第一步(如果需要增加文件):
1 |
git add file1 |
第二步:
1 |
git commit |
将迅雷拒之门外
不知道为什么,本来不受重视的L’Yun,却一直多灾多难,前几天空间呗停掉了,一个很以为的原因,每天将近9G的流量,晕死了,最多的一天才只有6个IP,但竟然有这么大的流量。后来查看了下日志,竟然是两首MP3引起的,每一秒钟都有人在下载。刚开始以为是百度干的,但是后来看了下在百度的位置,还不至于达到那么大的流量,然后自然而然的就想到迅雷了,看看别人的文章,可以肯定下,迅雷是个流氓!
解决方案:
1、对服务器的攻击屏蔽后,不用理会,不会造成太大影响。
2、被百度收录的是一部分MP3,因为不希望不访问网站就直接从后台下载网站的mp3,于是增加搜索引擎访问限制。在网站根目录下放置robots.txt,内容如下:
User-agent: Baiduspider
Disallow: /****
*表示不允许百度搜索引擎收录的路径。相对于百度,雅虎、MSN和Google的搜索引擎机器人没有那么流氓,所以不需要屏蔽。
3、对付迅雷。
相对于有些流氓的百度搜索引擎来说,迅雷就是恶霸了。
对于小网站站长来说,迅雷的分布式下载几乎是一种灾难。尽管迅雷给广大普通用户带来快捷方便,但给小服务器的负载带来严重灾难。
调用access日志,发现瞬间连接超过1000,而连接的集中点,居然是周董的一首《七里香》。尽管迅雷隐蔽的很好,但还是从日志的蛛丝马迹里找出它的影子。
于是先删掉七里香。删掉后仍有大量链接寻找其他MP3,而且删除一首mp3也只是治标不治本。启用Apache2的Rewrite模块。
在Apache的Http.conf中,开启Rewrite模块
LoadModule rewrite_module modules/mod_rewrite.so
然后增加以下Rewirte规则
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www.cfobbs.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.cfobbs.com$ [NC]
RewriteRule .*\.(mp3|rm|wma)$ http://www.cfobbs.com/error.html [R,NC]
该规则表示,只有浏览器的REFERER是本站开头的连接,才可以下载MP3、rm、wma,否则转向error.html错误界面。
重启Apache后,用Flashget测试,无法下载mp3了,IE直接下载也会报错,但迅雷仍然可以下,百思不得其解,于是查阅迅雷官方资料,居然发现迅雷采用了一个十分流氓的手段:伪造下载地址的浏览器REFERER头,真是无耻。
考虑到网站的MP3全部是在网页自动播放,基本不需要额外下载,于是为了对付迅雷,采用了一个比较极端的方式:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !^NSPlayer.*
RewriteCond %{HTTP_USER_AGENT} !^windows.*
RewriteRule .*\.(mp3|rm|wma)$ http://www.cfobbs.com/error.html [R,NC]
也就是说,网站上mp3、rm、wma格式的文件,只允许播放器播放,不允许任何其它方式的访问,否则就转向错误页面。
重启Apache,使用迅雷下载,结果迅雷直接去下载了错误页面,初战告捷。
调用access日志,发现所有的mp3下载都提示302,转向了错误页面,而周董的七里香,则是404,直接报错。
自鸣得意一把。
顺便找到一个限速模块,对网站体积较大的文件进行限速,确保服务器稳定
LoadModule limitipconn_module modules/mod_limitipconn.so
BandwidthModule On
ForceBandWidthModule On
Bandwidth all 0
MinBandwidth all 0
LargeFileLimit *.mp3 500 50000
LargeFileLimit *.wma 500 50000
该模块可以指定文件名、文件大小限速,上面的意思是,MP3和WMA文件,凡是大小超过500K的,限速50K,大小不超过500K的,不予限速。
启用该模块,必须先行启用status模块
LoadModule status_module modules/mod_status.so
ExtendedStatus On
否则限速模块无效。
本文仅说明如何在服务器端屏蔽迅雷下载,包括HTTP方式和FTP方式,不涉及客户端和局域网内如何屏蔽迅雷的内容。
一旦服务器上的文件被迅雷索引,就会引来一大堆盗链的家伙,这对小带宽或低配置的服务器来说是致命的打击,于是如何限制迅雷下载服务器上的资源就成了一个很重要的问题。像我自己的服务器,用1MBps小水管来提供一个小网站的HTTP服务,开了内容压缩并设置好图片文件的缓存时间后,打开网页的速度还是比较快的,直到有一天,我发现网站打开的速度变得很慢,而且不是我自身的网络问题(当时我在外地,服务器在家里),当时仅仅知道是服务器上什么进程占用了大量带宽,还没有发现是迅雷的问题。后来经过了很多调查,才发现是迅雷在盗链,看访问日志里面一行行的大型文件下载记录,那真是触目惊心啊。
发现原因是迅雷盗链以后我就开始研究如何在服务器上屏蔽迅雷的下载。首先在HTTP协议上屏蔽迅雷是比较简单的,靠迅雷的用户代理(User Agent)就可以识别出迅雷了,但是在FTP协议上如何识别迅雷就比较棘手了。在好友的帮助下,最后我们终于发现一个在FTP协议上屏蔽迅雷的方法。在此之间和之后,我就写了IIS的反迅雷插件和Serv-U的反迅雷插件。
不过IIS和Serv-U只能在Windows平台上使用,这也是因为当时我的服务器还是Windows操作系统。其实Apache的mod_rewrite模块可以将用户代理作为重写条件,当时我也写了篇文章说明如何在Apache上屏蔽迅雷,但是在那之后还是有不少人发邮件问我如何在Apache上屏蔽迅雷。好吧,既然如此我就再写一篇文章来详细说明如何在Apache上屏蔽迅雷,顺便介绍libantixunlei,这是用于FTP反迅雷的一个C语言写的库。
上面是废话,欢迎忽略,下面进入正题。
在Apache上屏蔽迅雷
在HTTP协议上识别迅雷是通过迅雷的用户代理(User Agent)字串来进行识别的。我对我自己的网站的IIS访问日志以及一个评分系统的评分记录里面记录的用户字串进行了分析,之后发现迅雷使用的几个用户代理应该是唯一的,在访问日志中,除了下载文件的记录,只发现了极少量使用了和迅雷相同的用户代理的记录,这可能是个别用户出于杂七杂八的目使用迅雷下载普通网页而留下的日志。
有了这个分析结果,就可以保证通过用户代理来识别迅雷不会误杀普通用户了。但通过用户代理来识别迅雷有一个问题,如果以后迅雷把自己的用户代理改成和IE的用户代理一样的话怎么办?没关系,至少到现在为止(09年国庆),我还没有发现迅雷做此举动,等迅雷有动作了再想对策也不迟。另外,这里还有一个“脏数据”的方法,如果迅雷很不厚道地把自己伪装成IE的话,我们就只好也很不厚道地使用脏数据方法先反击一下迅雷。虽然脏数据对屏蔽迅雷没有什么帮助,至少可以出出气,让非最新版迅雷用户下载不到正确的内容,就这点应该够迅雷受的了,用户体验大受打击,我想大多数用户都不会追着使用最新版的。
于是,我在废话里面说了,使用Apache的mod_rewrite模块就可以很容易地屏蔽迅雷,因为这个模块的重写规则可以将用户代理作为判断条件。我们只要把用户代理和迅雷是一样的连接请求重定向到一个错误页面,或者干脆直接返回403,就可以在HTTP协议上屏蔽迅雷了。
到目前为止,我们观察到的迅雷使用的用户代理有以下几个:
- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )
- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0)
- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 3.5.20706)
- Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
放心,根据网站访问日志和评分系统的日志,这些用户代理应该都是迅雷特有的,在.htaccess文件里面把带有这些用户代理的请求重定向到错误页面就可以了。
当然对于普通网页来说,是没有必要屏蔽迅雷的,所以我们只需要屏蔽访问大文件的请求就可以了,于是.htaccess里面的内容就像下面这样:
- RewriteEngine On
- #Anti Thunder
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1\)$ [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0\)$ [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0\)$ [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ \)$ [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.0;\ \.NET\ CLR\ 3\.5\.20706\)$ [NC,OR]
- RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ SV1;\ \.NET\ CLR\ 1\.1\.4322;\ \.NET\ CLR\ 2\.0\.50727\)$ [NC]
- RewriteRule ^.*\.(gif|jpg|bmp|zip|rar|exe|mp3|swf)$ / [NC,F]
如果你想制定更复杂的重写规则,可以参考Apache手册中mod_rewrite的部分,见:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html
对于其他Web服务器软件,多多少少都能提供一些可将用户代理作为判断条件的网址重写模块或插件,参照上面Apache的设置方法对这些软件进行设置,都能达到屏蔽迅雷的效果。
在FTP协议上反迅雷
在FTP上反迅雷就比较麻烦,这需要获得每一个FTP会话的会话唯一标识和客户端发送的每一条FTP指令。因为这样的需求很少见,所以Linux下的FTP软件很少有提供相应的接口供我们使用。不过还好,Linux下的FTP软件大多都是开源的,我们可以自己修改源码。于是我就写了libantixunlei,然后针对不同的FTP软件,就套用libantixunlei来修改其源码,然后编译安装就可以了。
因为要修改FTP服务器软件的源码,这对技术的要求就比较高了,不见得每个服务器管理员都会C语言,所以对大多数服务器管理员来说目前还是只能等待别人为FTP软件写插件(如果支持的话),或者发布经过修改的FTP服务器软件源码。
于是,如果你想为某个FTP软件加入反迅雷的功能,请访问http://code.google.com/p/libantixunlei 。如果对libantixunlei的用法不太清楚的话,请给我发邮件,我会告诉你FTP协议上屏蔽迅雷的原理和应该使用libantixunei的哪些接口来识别迅雷。
不过先不要失望,现在已经有了可以反迅雷的Linux上的FTP服务器软件了,在我写这篇文章的时候我已经给pure-ftpd 1.0.22版本成功地打上了反迅雷补丁,补丁文件请到:http://code.google.com/p/libantixunlei/downloads/list 去下载,下载回来以后给纯净的pure-ftpd-1.0.22版本打上这个补丁(使用patch命令),然后编译安装就支持反迅雷了。对于其他版本的pure-ftpd我没有试验过是否能使用这个补丁,不知道能否正常使用。另外在此提醒一下没有自己编译安装过软件的管理员,pureftpd的一些功能需要在./configure的时候加上一些参数才能使用,具体请看源码根目录下面的说明文件,偷懒的话可以 ./configure –with-everything,不过印象中官方并不推荐使用这个参数。
另外,因为我很懒,所以把一些特性写死在程序里面了,是否屏蔽使用迅雷的IP和屏蔽IP的时间是写死在程序里面的,要改变的话只能重新编译。这两个配置在libantixunlei.h文件里面可以修改。
libantixunlei使用了pthread库,而在一些平台上编译的时候如果要使用pthread库需要显式指定-lpthread参数,我在PBS服务器上编译的时候没有问题,但是在自家的一台电脑上编译的时候却出错了。如果编译失败的话,点击这个地址查看处理方法:http://code.google.com/p/libantixunlei/wiki/BianYiShiBai
越狱检测/越狱检测绕过—xCon
/Library/MobileSubstrate/MobileSubstrate.dylib 最重要的越狱文件,几乎所有的越狱机都会安装MobileSubstrate
/Applications/Cydia.app/ /var/lib/cydia/绝大多数越狱机都会安装
/var/cache/apt /var/lib/apt /etc/apt
/bin/bash /bin/sh
/usr/sbin/sshd /usr/libexec/ssh-keysign /etc/ssh/sshd_config
ENOENT 参数file_name指定的文件不存在
ENOTDIR 路径中的目录存在但却非真正的目录
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
EFAULT 参数buf为无效指针,指向无法存在的内存空间
EACCESS 存取文件时被拒绝
ENOMEM 核心内存不足
ENAMETOOLONG 参数file_name的路径名称太长
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
unsigned long st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
这种方法是目前最靠谱的方法,调用_dyld_image_count()和_dyld_get_image_name()来看当前有哪些dylib被加载
#include
#import
#import
#import
void printDYLD()
{
//Get count of all currently loaded DYLD
uint32_t count = _dyld_image_count();
for(uint32_t i = 0; i < count; i++)
{
//Name of image (includes full path)
const char *dyld = _dyld_get_image_name(i);
//Get name of file
int slength = strlen(dyld);
int j;
for(j = slength – 1; j>= 0; –j)
if(dyld[j] == ‘/’) break;
printf(“%s\n”, dyld);
}
printf(“\n”);
}
int main(int argc, char *argv[])
{
printDYLD();
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
下图显示了我的iOS设备当前加载的dylib的路径,最下面就可以看到xCon
DANI-LEE-2:iostools danqingdani$ otool -tV xCon.dylib >xContextsection
可以根据文件中的函数名,同时结合该工具的原理以及越狱检测的一些常用手段(文章第一部分有介绍)来猜其逻辑,例如越狱检测方法中的文件系统检查,会根据特定的文件路径名来匹配,我们可以使用strings查看文件中的内容,看看会有哪些文件路径名。
DANI-LEE-2:IAP tools danqingdani$ strings xCon.dylib >xConReadable
以下是xCon中会匹配的文件名
/usr/bin/sshd
/usr/libexec/sftp-server
/usr/sbin/sshd
/bin/bash
/bin/sh
/bin/sw
/etc/apt
/etc/fstab
/Applications/blackra1n.app
/Applications/Cydia.app
/Applications/Cydia.app/Info.plist
/Applications/Cycorder.app
/Applications/Loader.app
/Applications/FakeCarrier.app
/Applications/Icy.app
/Applications/IntelliScreen.app
/Applications/MxTube.app
/Applications/RockApp.app
/Applications/SBSettings.app
/Applications/WinterBoard.app
/bin/bash/Applications/Cydia.app
/Library/LaunchDaemons/com.openssh.sshd.plist
/Library/Frameworks/CydiaSubstrate.framework
/Library/MobileSubstrate
/Library/MobileSubstrate/
/Library/MobileSubstrate/DynamicLibraries
/Library/MobileSubstrate/DynamicLibraries/
/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist
/Library/MobileSubstrate/DynamicLibraries/Veency.plist
/Library/MobileSubstrate/DynamicLibraries/xCon.plist
/private/var/lib/apt
/private/var/lib/apt/
/private/var/lib/cydia
/private/var/mobile/Library/SBSettings/Themes
/private/var/stash
/private/var/tmp/cydia.log
/System/Library/LaunchDaemons/com.ikey.bbot.plist
/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist
NzI0MS9MaWJyYXJ5L01vYmlsZVN1YnN0cmF0ZQ== (对应7241/Library/MobileSubstrate)
通过分析,xCon会绕过以下越狱检测方法
(1) 根据是否存在特定的越狱文件,及特定文件的权限是否发生变化来判断设备是否越狱
fileExistsAtPath:
fileExistsAtPath:isDirectory:
filePermission:
fileSystemIsValid:
checkFileSystemWithPath:forPermissions:
mobileSubstrateWorkaround
detectIllegalApplication:
(2) 根据沙箱完整性检测设备是否越狱
canUseFork
(3) 根据文件系统的分区是否发生变化来检测设备是否越狱
partitionsModified
(4) 根据是否安装ssh来判断设备是否越狱
ssh root@127.0.0.1
/Library/MobileSubstrate/MobileSubstrate.dylib 最重要的越狱文件,几乎所有的越狱机都会安装MobileSubstrate
/Applications/Cydia.app/ /var/lib/cydia/绝大多数越狱机都会安装
/var/cache/apt /var/lib/apt /etc/apt
/bin/bash /bin/sh
/usr/sbin/sshd /usr/libexec/ssh-keysign /etc/ssh/sshd_config
/Applications
/Library/Ringtones
/Library/Wallpaper
/usr/include
/usr/libexec
/usr/share