“分享知识”目录存档

Windows下的电驴服务器架设心得

2007年09月20日,星期四

目前最通用的电驴服务器软件是lugdunum,针对不同的操作系统都有不同的版本。
值得说明的是,在Windows下跑eserver效率肯定是不如Linux或BSD的,但在一般配置的服务器上,支持个几万人在线还是没问题的。鉴于目前eMule服务器短缺,能把闲置得Windows服务器利用起来跑eserver还是有意义的。

首先是软件下载:
http://lugdunum2k.free.fr/files/eserver-17.10.i686-win32.exe
这个是17.10版本,比较老,但也比较稳定,除了不支持模糊协议外没什么不好。官网上最新的那个下了会谁连都是lowid。

把这个exe保存到某个目录下,比如e:\eserver\
在同一目录下建一个 donkey.ini 文件,用来写配置。给大家VC的配置简单参考一下
[server]
desc = 服务器介绍
name = 服务器名字
maxClients=70000#windows服务器7W差不多了,多了容易死机,量力而行
softLimit=4000
hardLimit=4000
thisIP=本机IP#服务器有多个IP的时候才需要这个配置
port=8080#端口
LOWIDpercent=100
nickcommunity=[chn]#名字带[CHN]的才能连,资源有限暂不考虑外国兄弟了,注意一定要都小写
maxstrangers=10000#最多允许多少个名字不带[CHN]的
maxnozlib=0
seedIP=58.218.179.163#这个选项是把自己的服务器信息告诉给别的服务器,这样用户其他服务器的时候就会更新到你的信息了
seedPort=8080
filter[0]=(#FORMAT met)
filter[1]=(#FORMAT part)

这样直接运行刚才那个exe,服务器就启动了。

为了保证服务器稳定运行,可以写个bat启动(今天自己写得,没想到dos还能用上……)
建一个runeserver.bat,内容如下,里面的路径记得自己替换掉,日志记录在eserver.log
@echo off
cls
del E:\eserver\eserver.log
:start
echo eServer 服务器正在运行,请不要关闭本窗口
E:\eserver\eserver-17.10.i686-win32.exe >> E:\eserver\eserver.log
echo -------------------%date% %time%------------------------- >> E:\eserver\eserver.log
echo 服务器于%date% %time%重启
echo ---------------------------------------------------------
goto start

这样就算OK了,算是很简单吧。一般规模的eserver对服务器硬件要求不高,希望有更多稳定的国内服务器出现。到时候我们会考虑加入到eMule的默认服务器列表中的。

PS: Linux系统的话也很简单,http://lugdunum2k.free.fr/kiten.html 上有详细介绍。
donkey.ini配置和windows是一样的。
对于eserver配置方面的问题,欢迎与我们交流。

eMule0.48a测试

2007年05月18日,星期五

试了一下0.48a( http://www.emule-project.net/home/perl/gen…amp;rm=download ),针对主要的4个更新:

1) Vista支持
他的支持方式,是增加一个选项,让用户可以选择把配置和下载目录分开存放还是直接存放在eMule安装目录下。
所谓分开存放就是自动把下载和临时目录设置到用户的My Document目录下,config目录存放在用户的Application Data目录下,这种方式符合Vista的规范。
直接存就和现在一样,在Vista下容易产生问题。(Vista默认不允许应用程序操作Program Files下的文件)
这个新增的选项会在用户的安装过程中出现,并会根据用户的操作系统给出推荐设置(估计,因为它在XP下推荐直接存的方式)
另外在程序的扩展设置中,会有这个选项,但改变设置会造成原有的下载文件和设置丢失(其实就是在eMule中看不见,实际还在)

事实上要解决Vista下的兼容问题,关键是要取消掉所有直接对Program Files目录下的文件操作。当然如果eMule被安装在Program Files文件夹之外,就没有问题。只是会不符合应用程序的规范。0.48a所采用的方式,应该是可行的。但我建议可以不需要让用户设置,直接根据操作系统来吧。

2) UPNP支持
在设置向导的连接端口设置那一步增加了UPNP按钮,点一下以后会开始尝试UPNP映射,如果成功,则这个功能以后就自动开启了(估计,因为在办公室不成功)。是否开启这个功能的选项也在连接设置里,扩展设置里还有几个相关的高级设置(不懂)。
打开eMule的时候,服务器连接会等UPNP尝试结束之后再开始进行。

3)搜索屏蔽
这个屏蔽和我们的屏蔽不一样,并没有预置的列表,也不是根据关键词来的,而是根据Hash屏蔽。
用户在搜索的时候,看到不爽的就结果,可以对那个文件点右键,选择屏蔽它。然后这个文件就灰掉,并且排到搜索结果的最后一位去了,以后搜索也是这样,除非再去右键取消屏蔽。
这个功能对我们来说好像也不是很实用……

4) IRC界面改进
跟俺们没关系了……

eMule在Vista下的兼容性问题

2007年01月22日,星期一

eMule在Vista下的兼容性问题,主要有3个表现,1是可能造成内容重复下载(即Temp目录中的内容莫名其妙的重复出现),2是设置的选项有时感觉会有回档,3是平时浏览Incoming目录下找不到文件,要点击工具栏上的“兼容性文件”按钮才能看见。
刚才简单研究了一下,本质是由于Vista启用了新的UAC(用户帐户控制)系统,所有的程序默认都是通过标准用户执行(没有管理员权限),没有权限对Program Files文件夹进行写入操作。而为了向前兼容,如果程序试图对Program Files写入,会被自动转到C:\Users\用户名\AppData\Local\VirtualStore\Program Files\目录下,实际文件都会被记录在那个目录。
而eMule默认不论是配置读写还是下载文件保存都在Program Files目录下,实际都被写入了C:\Users\Dash\AppData\Local\VirtualStore\Program Files\eMule。应该就是这个原因,造成了eMule在Vista下的兼容性错误。1、2所述的问题,可能是由于eMule或Windows为正常关闭引起的,最近似乎没有再遇到。

解决方案参考:
1. 执行eMule时,点右键,选择以管理员身份运行。(只能自己临时使用)
2. 在控制面板,用户帐户中,关闭UAC。(这样能解决所有兼容性问题,安全性回到XP时代,只能自己使用)
3. 文件下载目录默认不放在Program Files目录下,如FlashGet放在C:\Downloads,就没有这个问题。
4. 通过其他某些方法,使eMule强制以管理员身份执行。(利用漏洞达到目的可能性不高,不知道微软有没有提供什么方案)

参考资料:
http://www.bitscn.com/windows/system_secur…0612/84914.html
http://support.microsoft.com/kb/927387/zh-cn

eMule内网穿透原理

2006年12月25日,星期一

测试开始以来,效果不错,Low2Low成功率颇高。

关注了一下大家的反馈,有人担心内网穿透会增加HighID负担,这个理解得有所偏差,关于内网穿透的原理,比较成熟的帖子有: http://dev.csdn.net/article/79/79799.shtm

不过这个说的比较复杂,用我自己的浅薄理解,简单说来就是:

内网计算机(也就是LowID),都通过至少一层网关连接互联网,没有自己的独立IP和端口(别人看到的你的IP是网关的),所以别人无法主动与你建立连接,两个内网用户自然也就无法连通,更无法实现传输。

但是内网计算机可以主动连接其他有独立IP的外网计算机,再通过udp协议通讯的时候,因为udp是非持续连接的,所以网关那边会给你开一个临时端口,让你能够接受外网计算机返回给你的udp包,如果一段时间内没有传输,临时端口便会取消。

这个步骤就可有空子钻,比如A和B 两台内网计算机,都同时连接外网计算机C进行udp协议的传输,A和B分别用到了临时端口Ap和Bp,这个时候通过Ap就可以主动连接到A,Bp就可以主动连接到B,所以C所要做的,就是把Ap告诉B,把Bp告诉A。AB通过从C那里知道的Ap和Bp,即可实现UDP直连。只要连接不断,临时端口就一直有效,传输期间,C什么都不需要参与,这个过程,俗称打洞,C帮AB打好洞,AB就可以自己玩了。

当然我这个是最简单的讲法,根据不同的网关设备,还是有很多不同情况需要解决。

有人怕Low2Low会耗HighID资源,这个多虑了,不是说不耗,而是耗的根小,C只不过初期接受一下AB发来的UDP请求,并向双方返回一次数据,打洞成功之后就再也没事了。本身UDP传输就耗的资源很少,这一两次UDP传输相对于连接频繁的eMule,可以忽略不计了。

更要说明的一点就是,我们目前测试用的内网穿透eMule,都是连接的我们自己的一台服务器用来做“C”,帮LowID打洞,没有依赖任何其他HighID,而我们那台破PIII服务器,目前同时处理着几百个low2low的连接,也几乎没占多少服务器资源。

当然将来最好的方案,是可以让eMule的Low2Low基于Kad来进行,这样可以不依赖任何第三方的服务器,独立的发展下去。基本原理是LowID利用自己的buddy来做帮助打洞,每个HightID只会帮1个LowID做buddy,所以不会增加HighID的负担。这方面我们也作了研究,不日也准备进行测试。

内网穿透目前是一套成熟的方案,QQ,BC等都早已开始大规模使用。为什么eMule到现在为止才开始由我们开始测试内网穿透呢?主要是因为eMule的开发长期以来都由老外们主导,国外大都由公网IP,Low2Low对他们来说,太不重要。而我们自己也走了很多的弯路,去年尝试通过内置VNN来解决问题,但VNN相对eMule,是一套太大的解决方案,需要注册和安装虚拟网卡才能使用。虽然我们后来的版本自动完成了这2步,但是VNN的服务器还是无法拖起eMule这巨大的用户群进行这样复杂的应用。

所以这次痛定思痛,自己从头开始开发,主要就是让使用tcp协议传输数据的eMule可以利用到UDP直连,并且解决各种各样的细节问题(因为eMule之前都没考虑到low2low问题)。
国外也有个neo版本的eMule,尝试利用kad解决Low2Low的问题,但实际使用效果不好。我们在开发过程中也想参考,不过基本没参考成,代码太复杂太乱。最后还是根据自己的思路自己写的,会比neo的思路更清晰些。

这次的内网测试版本,是我们VeryCD软件开发组近几个月努力得来的一点小成绩,希望能够早日正式发布。我虽不是软件开发,但有幸参与这个过程。所以把自己所理解的东西向大家解释一下。虽然会有纰漏,但不熟悉相关技术的同志,应该更容易理解。

最后补充,eMule既然是开源软件,这项技术成熟之后,必然可以共用,对所有eMule用户,都能有所帮助。

flv视频转换和flash播放的解决方案笔记

2006年09月24日,星期天

凌晨2点洗澡的时候,突然决定把flv的视频转换和在线播放的问题研究一下。于是在之后花了2小时进行Google,并在睡觉前初步试验成功。今天晚上对这些信息进行了一下整理,分享给大家。

youtube火起来以后,国内外跟进的一大把,不过技术和流程上没有任何突破,基本上就是服务器自动对用户上传的视频进行压缩,压成可以用flash在线播放的flv,缩小尺寸并降低码率。然后再用Flash制作一个播放器,可以根据参数在线播放指定的flv视频,当然有些还会加上水印和跳自己网站等功能。

转换工具可以选择ffmpeg和mencoder,这2个都是gnu项目,并且可以非常完美的在linux/Mac/Win32等平台下使用。不过ffmpeg支持的视频格式较少(不能很方便的支持rmvb,mov等,不过据说Google Video用的是这个),而mencoder则不能进行截图,所以可以考虑2者结合使用,mencoder负责转换,ffmpeg负责截图。

关于下载和安装,ffmpeg烦一点,官方网站上只提供了svn,需要自己编译。具体可以参考这篇文章,Windows还需要装MinGW来MSYS模拟linux环境,偷懒的话可以直接找个编译好的版本,不过功能可能会不全。

mencoder则很简单,本来就是mplayer的一部分,会装mplayer就成。注意把codecs都装全了

首先通过mencoder把普通视频转化为flv格式,命令如下

代码
mencoder test.avi -o test.flv -of lavf -oac mp3lame -lameopts abr:br=32:mode=3 -ovc lavc -lavcopts vcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -srate 22050 -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -vf scale=350:-3 -sws 2

mencoder 的参数超级复杂,视音频压缩本身又是一门非常高深的学问,本人略知皮毛,下面只对自己了解的一些参数做些说明,详细解释请看手册

引用
test.avi
输入文件路径,是Mplayer能支持的格式即可

-o test.flv
输出路径

-of lavf
输出格式 lavf表示libavcodec

-oac mp3lame
输出音频编码方式,lame是最好的mp3编码器

-lameopts abr:br=32:mode=3
lame的选项
abr代表平均码率,相对于cbr(固定码率)和vbr(可变码率,貌似不支持)
br就是音频的码率,越高音质越好
mode=3,0-3分别代表Stereo,Joint Stereo,Force ms_stereo,Mono(默认为自动,事实上1和3对文件大小的影响并不是很大)
另外可选的还有 vol(音量,取值0-10,数值越大音量越大,不建议修改)等

-srate 22050
声音采样频率设置,也可以选11025,文件可以稍小一点

-ovc lavc
输出视频编码 lavc就是libavcodec

-lavcopts
lavc的的选项
codec=flv flv格式压缩
vbitrate=150 视频码率
其他几个选项一概不懂,请看手册(一般来说看了还是不懂)

-vf scale=350:-3 -sws 2
缩放视频,指定宽度为350,高度按比例来。质量由-sws选项控制,具体看手册

-ofps 23 设定帧数,缩小帧数对节约文件大小效果不明显,且可能造成画面声音同步。建议不设置

mencoder压缩后生成的flv缺少meta信息,会造成播放时没有进度条等问题,需要再用flvmdi修复一下

代码
flvmdi test.flv

生成后的flv通过MPC就可以预览。

ffmpeg截图

代码
ffmpeg -i test.flv -ss 10 -vframes 1 -r 1 -ac 1 -ab 2 -s 320×240 -f image2 test.jpg


-ss 10 就是说1秒后的那一帧

然后生成flash视频播放器的话,网上例子很多,自己对Flash研究也不深,也就不多说了,要自定义播放器界面的参考这里

唯一需要补充一下的是视频的smoothing属性,现在的在线播放器尺寸一般都回比实际压缩后的视频尺寸大一些,smoothing=true可以保证放大的质量(包括全屏后的),具体的文章见这里

很长时间没在技术方面做些研究了,难得在晚上可以清静些。我所了解的内容都已列出,也不会再作进一步研究,所以其他的问题就不要问我了,Google一下会比问我更有效率。

自建CDN服务

2006年04月8日,星期六

所谓中国特色的互联网,南电信,北网通,互通问题成了站长们心中的痛。
于是CDN(Content Delivery Network)开始流行,VeryCD之前就使用过51CDN的服务。
但是普通的CDN服务,由于DNS和cache服务器都不受自己掌控,可定制性差,安全性更无法控制。VeryCD之前遭遇的页面被恶意篡改事件直接导致了我们放弃第三方CDN服务。
今天下午开始用上了自己建的CDN,效果不错(网通的朋友可以看看速度有否增加),而且成本还不到第三方CDN服务的1/10。
CDN的实现原理并不复杂,可以简单的分为2层,DNS服务器用来将不同用户的请求分发到最近的节点;Cache服务器分布在各个节点上用来响应用户的请求。
DNS服务器可以用bind9来建,Cache则可以选squid。这2个都是linux平台下的开源软件,高效、免费,国内收费的CDN服务基本上也是依赖这2个软件。可惜的是linux平台相对复杂,而且之前中文文档太少,普通用户要架设起一套自己的CDN服务器还是非常麻烦。
好在声仔已经把bind9的安装说明以及区分电信网通用户解决方案整理过了,甚至还提供了免费的dnspod服务,直接免去了自己架设DNS服务器的苦恼。
Cache服务器所要用到的squid,基本原理是用它做反向代理。可以Google一下,也可以参考我的书签,不过相关的文档都已经较老,且没有大并发、大流量下的实践,对配置的叙述也较简单。回头我会把VeryCD使用squid以来的经验进行总结,并公布我们所使用的squid.conf参数,希望能够对大家有所帮助。

《极品飞车9最高通缉》安装方法

2005年11月19日,星期六

user posted image
  昨天把《极品飞车9最高通缉黑色特别版》下载了下来。下载速度很快,但从安装到进入游戏,却把我整得很崩溃。现在把正确的方式共享出来,避免其他网友走歪路。
  4CD的镜像文件下载好以后,先用D-Tool4.0进行虚拟光驱(注意一定要用4.0,我昨天用的3.x,可以进入游戏。但是到了今天居然就死活进不了了,升级到4.0,问题解决)。
  然后通过CD1进行安装,我在安装的时候碰到安装程序提示需要DX9.0c,一开始还以为自己的DX真有问题,删除安装了无数遍都没解决,最后发现只要对光盘中的autorun.exe按右键选择属性,将兼容模式设置为Win2000即可正常安装。不知道是不是EA的bug,是的话也太低级了。
  安装好以后还是不能进入游戏,需要将注册表中的HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi 部分全部删除,否则会提示插入CD。注:这个注册表中的Scsi,每次重启都会新建,所以也可以考虑去下一个自动修改注册标的程序,每次启动NFS之前删除一次。
  游戏的画面做的的确很炫,我还清晰地记得自己初次看到硬件加速下的NFS3效果时所感受到的震撼,一晃已经NFS9了,画面质量和硬件性能已经翻了n倍,hoho~ 就是阳光太刺眼了,看多了好累,呵呵

对抗垃圾邮件

2005年11月10日,星期四

  VeryCD的邮箱每天都要收到几十封垃圾邮件,而我收件用的Outlook的反垃圾功能又非常有限,每天删除这些没用的邮件浪费了我大量时间。
  今天痛定思痛,仔细研究了我们的邮件系统,想出了一套对抗垃圾邮件的方案。
  目前的垃圾邮件,基本上是利用机器人去抓搜索引擎中收录的email地址,收集好以后再进行群发。大家一般使用会使用一些方法来防止自己的email被搜索引擎收录(比如把@改为AT等),但是难免会有遗漏,比如我们的Cooperate@VeryCD.com,虽然在自己的网站上显示的时候都经过了处理,但是一旦被人贴到了别处就没有用了。而且email地址一旦被泄漏,垃圾邮件就会源源不断的发来。又不能老是变换邮箱,所以只能从如何过滤垃圾邮件这个方面来想办法了。
  由于垃圾邮件的地址都是机器自动收集的,所以今天我专门新建了一个邮箱junk@verycd.com,并且贴在VeryCD的网页上,等着垃圾邮件自投罗网。由于这个邮箱除了收垃圾邮件外不做任何其他用户,寄往这个邮箱的邮件,100%都是垃圾邮件。我们通过程序对这些垃圾邮件进行分析,一方面可以屏蔽这些邮件发送者的地址,另一方面可以自动分析这些垃圾邮件的内容,以后符合这些内容特征的邮件都会被过滤为垃圾邮件。让邮件系统不断的“自我学习”,垃圾邮件的识别能力就会越来越强 laugh.gif

分析一下用户帐号被盗的情况

2005年10月27日,星期四

VeryCD目前屡屡发生用户帐号被盗事件,在这里分析一下用户帐号被盗的原因,希望大家共同防治。
盗号情况主要分为三种:
一种是在公共计算机上登录,并记录了登录状态,离开的时候没有退出。
这种情况盗用者不可以修改密码或改邮件地址,但可以进行除此外的任何操作。
解决方法是被盗者在另外的计算机上登录,并修改密码,盗用者即会被踢出。
另外我们也会修改登录时的选项,把“记住我”的默认值改为否。

第二种是密码被别人猜出。我们的系统现在有完善的反暴力穷举功能,盗号者想要穷举出密码几乎不可能。但是仍然建议加强复杂密码复杂性(当然自己别忘了),切记不要使用生日之类的简单密码。
如果发现密码被修改,请马上使用“找回密码”功能,或与我们联系。

第三种情况是机器被人安装了木马。可以截获用户的所有键盘输入,以实现盗取密码的目的。这种情况除非杀除木马,否则即使找回了密码,下次仍然会被盗。
我们也会试着做一个软键盘,用户在网吧等公用计算机上,可以使用软键盘输入,防止被木马截取。

另外还有些情况,比如邮箱被黑,盗号者利用邮箱找回密码。或利用美女色诱骗出密码等等,不是我们所能控制,在此不作讨论tongue.gif

Google Talk的小技巧

2005年08月25日,星期四

1. 在对话中输入 D :P :) :( :-) :’( :o 等表情符号,会用蓝色表示。
2. 在文字两头加“*”文字就加粗,加“_”就变斜。
3. 右键点击 Google Talk 的通知栏图标,选择 About …,然后你会看到一串浅灰色的字样:“play 23 21 13 16 21 19 . 7 1 13 5″。如果用a代替数字1,z替换26,可以得到一句话:play wumpus game。Wumpus 是早期很著名的一个命令行的游戏,要玩家在20个房间中捉到叫做 wumpus 的怪物。要启动这个游戏,你要添加 wumpus.game@gmail.com 这个用户到你的联系人中来,然后发送 play 给他,就可以开始玩了!(我加了这个人,不过没反应)
4. GT双开,在启动命令(googletalk.exe)后加上/nomutex,可以打开多个Google Talk实例。
5. 按Shift+回车可以空行(输入框会因此变大),按Ctrl+鼠标滚轮,可以改变文字大小。
6. 自己的名字在 https://www.google.com/accounts/EditUserInfo?service=mail 上修改。

参考:
http://groups.google.com/group/fans/browse…b030cfd63be155b
http://www.neowin.net/forum/index.php?showtopic=363145