Shell's Home

Dec 23, 2011 - 1 minute read - Comments

网络安全——你需要知道的东西

首先,我也不是专家,如果里面有什么错漏,欢迎补充。补充和转载请注明我的blog: http://blog.shell909090.org/blog/,我会根据你的发言在上面直接修改,没同步过去可不赖我。 要安全的使用网络/服务,你所需要注意的头两个问题就是你的安全级别和客户端的安全级别。对于零级密码,你随便在什么客户端上输入,都没有关系的。但是网银之类的最高级别密码,你不能在不可信机器上输入。什么叫不可信?别人的机器,你要相信这个人的技术和人品。自己的机器,你要在上面装了杀毒软件,没有执行过各种奇怪的程序/小游戏。这才叫可信的终端。如果你的密码在别人机器上用了,回来马上修改密码(不要在对方那里修改,没意义)。最好的方法,就是找一台旧电脑,专门装一个系统,装杀毒,用来使用网银和各种安全应用。别用深度定制版的操作系统,别人用过就重装。 当然,大多数的人都觉得,这样好麻烦啊。好吧,你可以无视这条规则——只要你对下面的各种病毒隔离和恢复措施做的够到位,对自己的技术够自信——至少我还没有这个自信。或者你可以认为我在危言耸听,彻底无视我的建议。大部分的情况下,你都是对的。这些事情都是徒劳的白做工。不过很低的概率下,你会中招——自己考虑。 其次,不要使用不可信的服务/产品。这条的执行力度自己考虑。一家公司,曾经做过流氓插件,你用不用他的产品?一家公司,曾经被央视曝光,你用不用他的产品?一家企业,敢于劫持客户的数据,将内容替换成自己的广告,你用不用他的服务?很多时候,我们都是别无选择,只能听天由命。不过当你有的选择的时候,尽量使用名声比较好的公司的产品。也许你觉得——这个不重要。好吧,Who care是最大的无力。 接下来,你要注意你的个人信息。被各个地方窃取使用个人信息已经很无奈了,你自己再爆出去就是无语了。你有没有在开心上公布手机号?有没有公布自己生日?有没有写自己的邮箱地址?有没有说过自己的家庭地址?这些信息都会被用于社会工程攻击,例如伪装你朋友的邮箱给你的邮箱写信,说借我二百。。。别笑,从开心上很容易收集这样的数据,伪装和发送也很自动。 后面一点对一些普通人可能比较困难——你要区分什么是可以信任的,什么是不可信的。下面的事情你权当笑话去听,是否照做自己判断。 1.来电号码是不可信的,来电无法验证身份,短信和电子邮件也不行。如果你的一个朋友来电或者发消息说让你干什么事情,认证身份的最低办法是打回去。更加通用和安全的方法是共同知识验证——哎,大学的时候,我们隔壁宿舍摔断胳膊那哥们当时干啥摔断胳膊来着?伪装者怎么知道TM那倒霉孙子胳膊是怎么断的?通常人人上也不会说这个吧——除非丢的正好是人人帐号。 2.传票是邮寄到家的,公安局找你都是上门或者通过街道。如果有人电话给你说是某法院/公安局,你不妨要他的电话和部门名称,然后打114查号,再打过去。通常情况下,不管也行——真有问题他们会上门找你的。 3.网站什么都不能说明,即使那个网站里面有所谓的标识。例如qq.c0m(假如这个注册的出来的话)不代表腾讯,这个上面有人说你中奖一点意义都没有。即使来源真的是qq.com,那也不代表事情是真的。同样,靠谱的方法是要他的号码和部门,114查证后打过去。 4.400电话打过去都不可信,你要是打一个400电话,和打一个民居没什么区别。对方有个声音很好听的小姐接听,还有——请稍等,我为您转接一位同事——也一点意义都没有。号码来自百度也没意义。 5.用114电话比用百度的好处是,百度给钱就可以瞎排,这个都上央视了。114目前我还不知道有什么竞价排名的东西,所以你找一个电话多数都是靠谱的。注意,这个不绝对。 6.手机这东西少借给别人,尤其是不熟悉的人。里面多个窃听器发信器你都不知道是谁干的。现实中没那么玄乎,也就是拿你的卡号申请动态令牌,申请前找你借五分钟手机而已。 7.软件怎么判别是否可信?通常来说,敢开源的都是比较可信的,毕竟里面干了些什么大家都看的到。闭源的软件和服务就看你是否信的过这家公司了。 8.对于别人推荐的玩意,尤其是朋友推荐的玩意,你最好确定一下确实是本人推荐的。即使是,我也保留的打开——技术上说,就是专门找台机器来运行。 9.有的时候,要敏感。你打给一家订票网站,他们需要你的身份证和信用卡号,给不给?实话说,这是个风险,而且不小。很多人的问题不是评判失误,而是根本没意识到这样做的风险。要知道,目前一代身份证还没有完全废弃,万一对方拿你的身份证号伪造了一张身份证,然后申请重置密码之类的事情。虽然能不能成两说,但是这两个号码同时泄露给一家网站总归是个风险。同样的还有携程——去年我曾经向他们的客户经理投诉,他们的电话语音系统居然要我人工报卡号,身份证之类的。我说如果是电话输入系统还好说,人工操作万一你的接线员记下来怎么办?这个你能保证么?今年大家打携程电话去看看?虽然我没有完全信任携程,但是电话系统比人工系统的安全性总是高那么一点点——除非他们故意在设计时捣糨糊,明明是电话录入系统,还是能让操作员看到全部卡号。 其实万千方案归结到后来都是八个字,多听多看,谨小慎微。会来看这篇blog的都是多听多看的,那么只要谨小慎微就好了。哪怕这谨小慎微有的时候显得有点小人和扭曲——不敢用别人的电脑上自己的帐号,不敢打开别人给的软件,不给别人玩自己的手机。到底多谨慎,看你自己觉得自己多重要。要是觉得一人吃饱全家不饿,就算全国密码泄露也与你无关。如果你觉得自己还是有点身家,有些该坚持的问题上还是要坚持一下。 最后说一点无奈的事情。即使你上面的事情全部做到,有很多事情还是无可奈何。例如携程的问题,他们有一个业务是只需要输入卡号后四位就可以订票,很明显,这是记录过全部的卡号才可以做到的事情。如果他们的数据库泄漏,攻击者是否就可以直接从中划帐呢?外推考虑这个问题,你会发现所有输入过信用卡号的公司,无论他们是否可信,你都要假定他们保存了你的卡号信息。所以事情就只能信赖银行的信用卡系统,包括大笔消费警告,未经手消费复核,先行赔付等等。只有消费后能够复核的信用卡公司,才是可以信赖的公司。 PS: 另外做一点广告。全国各家涉密公司,如果你们不希望你们的管理员/操作员随意接触高级管理帐号,希望能够审查谁接触过用户账户信息,你可以用我们的系统。http://www.shterm.com/。我们目前做的是堡垒机密码托管,除了一个最高管理者外,管理员都不知道自己使用账户的密码是多少。同时,访问过用户账户信息会留下无法清除的记录,事后可以审查。 注意:普通用户上这套系统没用!

Dec 22, 2011 - 1 minute read - Comments

关于密码——你们不知道的很多事情

1.hash密码安全么? 只要你的原始密码不大复杂,hash密码也完全没有安全性可言。不信?echo ‘abc’ | md5sum,去www.cmd5.com,看看有没有。同样,拿你自己的密码试试看? 注:null同学对此提出了异议,表示这个网站的可信性也值得怀疑,不要输入你自己的密码。我考虑过后觉得有道理。从基本安全性上说,网站只能收集密钥,无法收集用户,所以密码泄漏的风险不大。从我个人来说,一个网站如果爆出hash泄露,基本等同于密码泄漏。所以本质上避免问题的方法是一次一密。但是鉴于国内很多网站还是直接使用了hash(尤其是md5)保存了密码,在这个网站上输入了密码等于将自己的密码加入了字典,从而减低了安全性。 在此,向所有被我忽悠的同学诚挚致歉。如果你在里面输入过密码,建议你将密码改为一次一密。即每个网站使用不同的密码。通常一次一密的同学不会再把自己的密码到这个网站上进行搜索了吧? 2.国内哪些网站不是明文密码。 我说出来你信么?再说,配合1,这个问题重要么?一次一密,经常修改才是王道,长度和频率看这篇文章《密码管理规范》。另外,现在记得去公布出来的密码表里面搜一下自己的密码。 3.一次一密就安全了么? 差了远了去了。你有没有在别人机器上登录的经历?你可以信任他么?你自己家里装的一堆插件你都相信么?你确定他们对你的银行密码没有兴趣?你要知道,银行开发安全插件的人和做恶意插件的人是同一个圈子的人——不会攻击就不能防范么。而且我们阴谋论一点说,你就确定这些软件商没有接到上级指令要求加入后门?现在你还敢在自己家里的机器上装中国软件么?QQ,迅雷,这些都算大软件,看着的人比较多。你自己可以搜他们抓你行为上传的文章——用谷歌搜。其他小站点的各种软件呢?你装了多少? 4.还有哪些比较低级的情况? 当年,有一个网站,提供一个功能。你可以在他的网站上直接登录其他邮箱。相信我,这可比这次的问题严重多了,那可是一收集一批阿。 5.为什么我以前都不知道? 要和你说我们有安全问题,你还用不用了? 再说我和很多人说起过这些问题,他们当年的态度都是——没关系,反正没人会对我的信息感兴趣的。我估计这次,还有不少人会说——没关系,反正我没有CSDN帐号/人人网上面的数据看到就看到咯。 很多人第一次知道安全问题的严重性,都是在他们丢了钱之后。往往都是莫名其妙,钱怎么丢的? 6.那银行呢? 银行还是相对安全的,不过你要确认银行有以下几个功能。登录失败警告功能。五次登录失败自动锁定账户,要隔天由本人解锁,解锁后最好强制更换密码。关闭网银和电话银行功能,不拿着本人身份证经过24小时以上申请不能打开。密码丢失需要一周以上的时间才允许重设。大额取款通知用户功能。 听上去很麻烦?通常来说,越麻烦的银行越安全。以上功能都有了,并且使用了,那么银行本身而言,还是比较安全的。 7.可是我要用网银。 那你用U盾,而且不要用水货版的。我07年选择招行的理由是,招行是唯一当时我觉得没有安全问题的银行。现在这个列表应该加入浦发,并成为首选——对linux友好而且不容易破解。但是不要用只有手机动态密码的模式。 有些U盾就是密码文件隐秘的放入的一个U盘,这种U盾我都可以复制出一堆来。用上这种U盾,最多满足你自己的心理因素。 而且,更好的方法是对信用卡申请网银,而银行卡关闭(如果银行支持的话)。这样的话损失最大不超过一张信用卡可用额度,我目前的信用卡而言,最多一次损失几千——总好过几万的学费吧。同类的思路可以选择支付宝,你一次打个1000进去可以用一阵,丢了只有这1000。 8.你知道U盾的正确用法么? U盾应该在需要的时候才插上去,用完立刻拔出。虽然说不像拆炸弹,不过还是插入时间越短越好。 因为很偶尔的情况下,入侵者刚好在看你的电脑。发现U盾后,可以指挥你完成登录的网银系统进行交易。但是网银交易必须以U盾为基础,拔掉他们就干不了坏事了。 9.为什么手机不是安全设备。 手机安全是相对的,只能说比电脑安全。你以为手机就安全?首先,智能机上面已经满足了恶意软件存在的基础。例如小米——虽然我很喜欢他——你确定雷布斯没有在小米里面加入后门,截取你的密码再偷偷转发?现在没有——以后呢?同样,你确定你信得过苹果?将来苹果也不会出现安全漏洞? 即使退一步说,你的手机很安全。来,把手机给我,不要看它,然后告诉我,手机里有多少软件可以读取你的本机信息,有多少可以读取短信?即使是完全安全的系统,我只要写个小游戏,号称因为需要短信分享,需要操作你的短信。你会怀疑么?我趁着你不注意,读取你的手机,和泄露出来的卡号-手机信息交叉比对。对你的卡号申请动态密码,然后让我的程序偷偷的拦下来短信,不让你知道,发送到服务器端。你是不是丢钱丢的莫名其妙? 相信这条写到这里,九成九的用智能机的朋友已经满脸汗了——妈的这些程序能读取我的银行卡动态密码?技术上说,真可以。 普通手机用户也别高兴,我没记错的话,GSM协议已经被破解了。就是说,我可以在你旁边拿个设备直接接受你能收到的短信。这TMD叫安全设备? 10.那你说的keepass? 这东西能在手机和电脑上运行,就肯定不安全。数据文件放在硬盘上的时候没问题,即使入侵者拿到也没办法。但是你输入密钥的时候有keylogger就完蛋了。 所以我只在linux和android上用,虽然android不安全,但是目前我还不知道有keylogger。 11.妈的,我还有什么安全的。 这个真没有,RMS说过,安全是个笑话。让用户来完成安全更是笑话中的笑话。当然,没有用户的安全意识,银行/网站再努力也没用。但是本质上说,应当以侵犯隐私去起诉泄密单位,而且应该打下来是巨额赔偿。 然后这个事情就会变成,各家单位纷纷表示,我们不对免费用户的信息安全负责,并且推出免责条款。然后又是扯不清的糊涂帐——如同我们今天的EULA一样。 只是在景德镇,你连操作第一步的机会都没有。还是用脚投票,放弃一些实在不安全的公司吧。例如业界很知名的某个做恶意软件出身的公司,还有某个买了这个公司的前身的大搜索软件商。某个以动物作为Logo的公司,还有被国家大哥曝光多次的某家公司。凡是业界已经臭了名声的,最好都别用。 12.日子还过不过了? 淡定,我明天还会写一篇,你要注意的东西。虽然不说一定安全,不过普通用用问题不大的。

Dec 22, 2011 - 1 minute read - Comments

密码为什么明文存放

很早就写过一篇blog,说到过,你的密码应当一次一密,至少某些密码泄露时不至于波及太广。结果这次CSDN不幸中枪。我不去讨论多少人急急忙忙修改密码,多少人数据泄露,单说说为什么很多时候密码是明文存放的。 就我有记忆以来,我写应用就从来没有明文存放过密码。最起先是md5方式存放。md5可以让你找到hash值,有的时候也会被用于穷举。但是无论如何,md5密码本身比明文安全很多。后来改成了challenge-response验证模式,也是用md5做的hash后进行c-r的。再后来,md5的碰撞冲突的论文出来,后面用的多数都是sha256了。从头到脚,我就没做过密码明文存放,并且,我认为这是正常程序员最起码的修养。(当然,明文存放的代码不是没有,不过那是调试模式) 但是现在我所知,很多系统的身份验证都是密码明文存放的,为什么?其实我不大理解。不过有时候问起,有些人和我说了几个我觉得不是搪塞的理由,现在抄录如下,告大家知。 1.不用明文密码没法应付检查。大家知道互联网审查,有时往往会一个电话过来,要XX用户的密码。如果你没法给出,上头就认为你不配合,事情各种难搞。作为审查机构的老板,当然没必要知道明文密码的危害。他们只知道,我要密码,为什么不行。所以,悲崔的程序员们就往往会得到一条死命令,保存明文密码。 2.压根不知道明文密码有什么问题。中国的互联网有太多的没基础的新人,从石头的缝隙中顽强的生长出来。这不是坏事,坏事的是这些人往往会在一些基础问题上出现奇怪的毛病。例如有些程序员,写程序很快,但是居然从来不知道密码明文存放会导致什么问题。更神奇的是,这些人中,有一家银行… 3.自信暴棚的混帐。有些人的自信总比别人强,而且强在莫名其妙的地方。例如:我的服务器肯定是没问题的,所以我的密码一定要明文存放。如果不,就是质疑我的技术。 实话说,这种人真是少数中的少数。 4.遗留系统。很多系统设计的时候因为某个其他理由,使用了明文密码。等后来这个理由不存在了,密码系统升级成了一个困难。因为密码系统太重要了,所以在没有太大利益的情况下,总是倾向于不修改系统。但是有什么足够利益来推动系统修改呢?用户安全问题在发现前不是一个问题——好比这次的CSDN,不是被暴出来的话就根本不会被当作一个问题。系统的管理者,每个人都没有足够的动力去修改系统。 5.世界的阴暗角落。有的时候,程序员/老板明文存放的理由,是为了方便盗窃用户其他网站资料。例如我所知的某钓鱼案例,你注册网站,就提供很多免费服务,网站看起来也很靠谱——除了后来突然爆出这家网站其实暗地中用你的生日/密码猜解信用卡/银行卡密码,大家才突然发现,这家网站其实根本没有在美国注册,而是一个听都没听说过的国家。 而且很多网站提供从其他网站导入之类的功能,更加的危险。以前经常爆出twitter密码被窃取,主要就是因为OAuth开放以前,twitter上的第三方应用需要提供原生密码,导致很多小应用的目的其实就是收集密码… 6.为了给用户提供方便。这个理由和上一个很类似,不过不是为了某些险恶的目的。而是客户经常要求——为什么我不能做XX事,为什么我不能blahblah。好吧,为了让你能,我们就必须保存明文密码。 明文密码的保存原因很多,不过结论都是一样的。在任何网站/服务上,你绝对不能使用同一个密码,零级密码除外。尤其请注意,不要在两家银行使用同样的银行卡密码/网银密码,原因不说。 从未来进化的角度说,密码的未来进化趋势是核心授权体系。就是你要向某个网站验证身份,只需要向身份验证商验证,剩下自动完成。现在的openid就是一种解决方案。密码都没了,还谈什么泄露呢?同时,实体交互和授权的精细划分也是一个趋势。某个网站访问别的网站的数据的时候,会形成一个访问令牌。这个令牌对需要访问的内容详细写明,并且需要用户授权。OAuth就是这个趋势的代表。另外一个趋势是利用某个足够安全的设备作为以上两者的终端载体。目前这个设备用的是手机,可是——手机不是一个足够安全的设备。也许这会是下一个XX门的隐患吧。 参考:《密码管理规范》

Dec 21, 2011 - 1 minute read - Comments

Py 有什么缺点?!

在 2011年12月21日 下午2:24,Zoom.Quiet 写道: > 在昨天内部分享交流中,俺回顾了 PyCon2011China 中透露出的 Py 最新使用/发展和体验; > 最后有同学问: > Python 有什么缺点!? > 直接HOLD 住了俺的思路… > - 是也乎!? > - 世界上没有完美的语言 > - Python 相比各种开发语言也有缺点,当然的! 可是,是什么呢?! > > - 没有 {} ? > - 不支持多CPU ? > 大家在学习使用过程中,对 Python 有什么失望的地方?! > - 兼听则明 现在不满意的,就是我们努力的方向.. > > PS: > - 俺现场憋出的回答是: > - 由于 Py 历史上积累的好用模块太多,会导致开发人员更加懒惰,不思进取,不论什么都可以直接搜出可用的现成模块来! – > 人生苦短, Pythonic!

Dec 21, 2011 - 1 minute read - Comments

小米手机入手体验

很好很强大 LTN和我说的时候,开头用的词就是,我的小米不打算卖你了。既然前面有“我的”两字,可见东西差不到哪里去的。入手之后感觉很好,起码比g2强多了(233)。我把一些直观体验说一下吧。 手感不错,性能优异 机器的手感沉实,屏幕贴上膜后手感流畅,g2上的光膜也很滑,但是偶尔沾水就阻力大了。小米的膜很少出现这种现象,而且触感很灵敏——当然,太灵敏了也是个问题,经常手不小心碰到返回键,然后程序就没了。 程序滑动很流畅,不愧是双核的。内存足够大,ROM也够了。我完全不折腾app2sd之类的问题,也不管内存回收,每个程序都跑的很流畅。这种表现让人用着很省心。 周边齐全 我到小米的官网上,看到了后盖,保护壳,贴膜,背贴,耳机,数据卡的官方销售。虽然和小米2000元的价位比,这些周边并不便宜,但是他们很方便。作为智能机爱好者,往往会买一些国外的水货机,这时你就知道我在说什么了。往往表面膜坏了,只能买第三方的膜,偶尔尺寸还不匹配。还有的时候线控坏了,买一个很贵,还不知道好不好用,有时候还没地方买。后盖摔坏了,也没地方配,只能去店里花大价钱修。这些问题,每个都不大,但是解决起来很麻烦,不解决很恶心。 一些问题 屏幕偶尔会卡死,大约三秒后恢复。猜测是双核cpu全部耗尽,导致失去响应。更进一步猜测,还可能内存耗尽——虽然看起来不大可能。 原配膜为了保证使用,尺寸精度相当精确,只要错一点,就没法贴上去。我自己贴了半个小时,结果满脸青春痘。没办法,只能出钱找了个专业人士。其实卖的时候,完全可以让客户选择贴好了发出来。 ROM版本控制的隐患 在一周的周期上,说这个并不合适。不过我入手后,ROM自动升级。然后就出现了有时突然没有信号的问题,只能重启。 我肯定这个问题不是真的没信号了。将手机切入飞行模式,返回后有一瞬间信号是恢复的,过三秒左右信号就没了。而且手机状态中有信号数据,但是手机打不通。这个问题反复出现,经常是在某处没有信号,重新恢复信号后就出bug,死活保持无信号状态。 按照我前一个手机的经验(G2),这个往往和手机的ROM或者基带有关。我前一个手机的所有ROM中,有两个有这个问题的,有两个没有。而按照网络上一个帖子的说法,楼主在降级后问题也消失。反复印证下来,推测很可能是因为最新升级的ROM有这个问题,而我升级后就出现了问题。 这个属于ROM版本控制和测试的不严密,在一周不到的时间内我无法确认这点。但是我希望不是,因为一旦是ROM版本控制问题,将来后续问题还会层出不穷。个个都是莫名其妙的出现,没有精力一个个的跟。

Dec 20, 2011 - 1 minute read - Comments

某日的一点小事

三四年前,尚在前一家公司上班。晚上加班到9点,坐9点半的末班车回家。从漕杨路开出没一站,还没到中潭路,我看到旁边有个MM,打扮入时脸庞明丽。奇怪的是,晚班车上人不多,座位都有空,她却不坐,只是在门口站着。晚上灯不好,看不出什么表情。再过一站,到了镇平路,这MM要下车了。迈开两步,不知道怎么回事,身子一软直接摔了下去。我当时就蒙了,什么情况? 开始我也没有反应过来,只当是MM一个步子不稳摔在地上,等到MM摔到了地上,一动不动,才发现情况好像不对。晚上加班,身无长物,对着一个MM也不怕抢劫。何况车上人也不少,又是封闭站台内。我当时一没结婚二没女友,多少还有点英雄救美的情节。刚刚打算去扶,MM却在地上抽了起来。这一下又把我吓了一跳,迈出去的步子也缩了回来。一个MM倒在地上抽搐,这——是什么情况? 那时已经知道了彭宇案件,车撞上老人是不敢扶的。可是事发突然,脑子到也没转到这方面去。反倒是在为什么抽搐上,我心存疑惑。是癫痫发作?有些外伤性癫痫会在年轻人身上发作,症状的却包括抽搐。还是毒品反应?毒品反正中好像没包括急性抽搐的。药物中毒?记得一氧化碳中毒或者氰酸化合物中毒都有抽搐反应。还是疾病?狂犬病和病毒性脑炎也有急性抽搐反应。大家别笑,在步子迈出去再收回来的一瞬,我真的想了数种急性抽搐的可能。想到癫痫,氰酸化合物,狂犬病,病毒性脑炎,这些词在脑海里盘旋。别的感觉没有,净感到害怕了,背上凉嗖嗖的。 然后,下面一个小女孩,抱住了倒下去的MM往外拖。我也不知道这个小女孩多大,我在看女性年龄上向来没有什么眼光,一倍左右的差距是很正常的。大概猜猜,最小不小于10岁,大的话,我知道某些30多岁的MM还是能冒充10岁小女孩的。不过身材较小毋庸置疑,刚刚倒下的MM个头不算大,小女孩却拖不动。我想想,是福不是祸,是祸躲不过。走上去,和小女孩换了个位置。因为还是害怕,也为了避嫌,没敢抱MM,直接从背后穿过腋下,抓起MM的两只上臂往外拖了一把,小女孩抬了一把脚,旁边也有个阿姨来托了一把。最后我们把这个MM抬出了车厢。 然后,就是比较让我放松的事情了。在站台上把MM放下,站台工作人员就走了过来。估计是刚刚看到了情况,和列车司机打了个招呼。MM倒下的位置正好在门上,要是关门,虽然不至于伤人,但也不是很恰当。工作人员看了看情况,一个小女孩,一个胖子(那时候还没减肥),一个50多岁的阿姨,把一个MM拖出来,看上去也不像是偷东西的样子(主要是小女孩衣着干净整齐,像是邻家小妹去补习班的样子,我也是一副死程序员的样子,还带着上班用的电脑包——他当然不知道包里面是空的,上海阿姨就更不说了,地球人已经不能阻止他们了),就没多留心我们,去查看这个MM的情况。小女孩和阿姨还是不放心的样子,继续陪着。我上班上累了,加上也怕麻烦,就回到了车上。不过一分钟,车就关门继续行驶了。 车门一关,事情抵定,中国人天生的好奇心和凑热闹情节就冒出来了。我想,顶好刚刚顺手去看看热闹,那个MM到底为什么倒下呢?但是转念细想,要是撞上麻烦,无论是惹上官司还是染上疾病,都很麻烦的样子。加上今天加班也累了,明天过来还要继续。也就随他去了。 这事情我一直没想起来,直到小悦悦的事情发生后,我才想起。在我过去的日子里,还有这么桩事情。也不知道那个MM是什么情况,怎么样了。小女孩为什么敢去帮忙,现在好不好。不过,这至少不是一个悲剧,无论从哪个角度来说。

Dec 19, 2011 - 1 minute read - Comments

linux tty部分源码阅读

1.事情从file开始 file的定义在include/linux/fs.h中,其中有两个field,一个叫file_operations *f_op,一个叫void *private_data。file_operations定义了所有file能够进行的操作,在tty这个层面而言,drivers/tty/tty_io.c能看到有个叫做file_operations tty_fops的东西,下面有个叫console_fops的东西。两者区别不大,就是write函数进行了一下包装而已。从这里可以看出,系统将某个file的读写操作,转包给了tty_io.c这个文件。这个转包的手法非常类似虚函数。如果将tty_io.c里面的函数看作一个类的所有成员,那么tty_fops就是虚函数表,而f_op就是虚函数指针_v_ptr。 2.tty_io的二转包 tty_io做了什么?他直接转包给了ldisc来处理这个事情。从tty_struct的结构我们能够看到,有这么一个field,tty_ldisc *ldisc。而tty_ldisc.h文件里面,我们能看到这个结构又有这么一个成员,tty_ldisc_ops *ops。同样手法,第二次使用。目标是tty/下面很多n_开始的文件,例如n_gsm,估计是处理手机的。我们的目标看起来像是n_tty.c中的tty_ldisc_ops tty_ldisc_N_TTY对象。 3.n_tty做了些什么 n_tty也做了很多转包,例如对于n_tty_write而言,他使用了tty->ops->write这个函数。我们从struct tty_struct中可以看到这个field,tty_operations *ops。目标是谁?看起来像是pty.c,他里面有很多定义,例如tty_operations master_pty_ops_bsd,tty_operations slave_pty_ops_bsd,tty_operations ptm_unix98_ops,tty_operations pty_unix98_ops。 4.pty总不转包了吧 以write而言,pty.c做的很简单,就是tty_insert_flip_string而已。不过之后调用了tty_flip_buffer_push,这个又会调用flush_to_ldisc,这个里面会调用ldisc->ops。从上文中我们知道,这个函数的实体在n_tty.c的n_tty_receive_buf。 5.n_tty_receive_buf做了些什么 这个函数对每个字符依次处理,如果是普通字符,就调用n_tty_receive_char。这个函数会调用put_tty_queue,经过两次转手,最终,这个字符进入了read_buf。这是一个循环队列。

Dec 16, 2011 - 1 minute read - Comments

android几个常识

内存问题 首先,总内存量需要被各种CPU划出部分使用,剩余才是系统可用内存。这个概念差不多相当于电脑上的共享显存,系统对划走的内存是没有管理能力的,因此在/proc/meminfo中找不到这部分内存。这部分内存既不能优化也不能使用,因此其实是不可使用内存。厂家出厂内存(标称内存)和可使用内存一定存在差,具体多少看各种机型。htcg2是288m标称191m可用,p81hd是512m标称288m可用。 可用内存是linux kernel能管理的内存,这部分再会被划出一些供系统使用/服务使用/常驻程序使用。这部分是可以优化的,少编译一些ko模块,少开一些服务,少一些常驻程序,内存就会节约一点。 最后,剩下来的内存才是程序实际能用的量,htcg2和p81hd都在100-150M上下。不过程序退出时,内存并不交还给系统。而是当系统内存不足时(memory threshold,通常24m),由系统分析目前内存中,使用频率最少的一块,然后去释放这个内存。通常而言,你在系统中开了三五个程序,然后按Home退出到桌面,再进入时程序还处于退出当时所处的状态,这就是因为还在内存中没有释放的缘故。而当你开的程序比较多,例如十多个程序,也是由Home退出到桌面,再进入最老的一个程序时,程序已经处于初始的状态。这就是因为内存不足,系统帮你杀了这个程序的缘故。如果用Back键退出,程序会直接关闭,内存释放,这个无关系统是否有空余内存。 所以,对android而言,内存只代表两件事情。一个是所能运行的最大的程序。如果总内存不足,一些一次性需要内存比较大的程序就会无法运行,特征是一运行就退出,系统没有提示错误。另一个是同时在内存中不关闭的程序的数量。内存越大,在机器中就可以保持越多的程序处于打开状态。对于新打开程序(此时内存请求较多),或者程序突然申请大量内存,系统就开始释放其他程序,此时系统会稍慢。但是在考虑是否需要使用内存优化软件的时候,不妨这么想。内存优化软件运行的时间,一般比直接kill进程还长呢。 如果觉得自己内存不足,想要优化的话,需要非常注意系统中的服务。系统中一般会有很多服务在运行,很多都是消息通知类的,例如fackbook的新消息,twitter的新消息通知,google plus的消息通知,还有微信,等等。这些消息通知每个大概都是5-10m内存不等。有的时候,如果你不需要消息通知,关闭消息通知可以有效关闭服务,例如ubersocial的消息通知是可以关闭的,而google plus和facebook就没有这个选项。如果你觉得这两个的消息浪费内存,那只有卸载他们。至于微信,你可以使用程序中的退出功能关闭微信。一旦关闭,通知服务会自动关闭。 内核模块问题 一般而言,系统内核会编译进很多东西,但是也有不少东西是不编译进去的。这些可以动态载入的东西,就叫内核模块。对android而言,其实普通用户没必要在意到底机器内的某个模块是模块形式还是编译进入了内核,所以下面统称内核功能。无论是模块还是内核形态,只要能用,就称这个功能打开。 内核常用的几个功能有,cifs,tun。 cifs是用于smb挂载的内核模块,如果内核中有这个东西,你就可以把你的某个samba服务器当作机器本地的sd卡来用。samba服务器可能听起来很陌生,不过windows文件共享就是一种samba服务器。也就是说,拥有cifs,可以将windows下面的文件当作机器的本地sd卡来随意读写。这对于家庭内使用android是个很方便的事情。 不过cifs现在用的比较少,因为ES文件管理器有个功能,可以把远程文件转换成一个http流。视频之类可以以http流模式工作的文件就可以直接远程打开。 tun是一个很重要的内核模块,因为openvpn/anyvpn都需要使用这个东西来工作。没有tun模块,这两个程序将无法工作。 存储形态问题 任何一个android设备都一定会搭配一块存储。这块存储会被切分为多个区域,模拟成一个硬盘的多个分区来使用。我们来看一个内核的启动参数,以下数据来自我的P81HD。 console=ttyS1,115200n8n androidboot.console=ttyS1 init=/init initrd=0x62000000,0x800000 mtdparts=rk29xxnand:0x00002000@0x00002000(misc),0x00004000@0x00004000(kernel),0x00008000@0x00008000(boot),0x00008000@0x00010000(recovery),0x00078000@0x00018000(backup),0x0003a000@0x00090000(cache),0x00100000@0x000ca000(userdata),0x00002000@0x001ca000(kpanic),0x00080000@0x001cc000(system),-@0x0024c000(user) bootver=2011-08-05\#2.06 firmware\_ver=0.2.3 能明显看出,存储使用的是nand,编译是针对rk29xx的,所以模块叫做rk29xxnand。mtdparts里面规定了rk29xxnand的分区特性,每组三个数据,第一个是大小,第二个是起始位置,第三个是分区名。其中userdata实际大小256m,表上面写的是1m,因此1相当于256字节。下面可以再看一下mount表。 /dev/block/mtdblock8 on /system type ext3 (ro,noatime,nodiratime,data=ordered) /dev/block/mtdblock6 on /data type ext3 (rw,nosuid,nodev,noatime,nodiratime,errors=continue,data=ordered) /dev/block/mtdblock5 on /cache type ext3 (rw,nosuid,nodev,noatime,nodiratime,errors=continue,data=ordered) 可以看出存储编号是从0开始的。分区后,存储的内容即是以ext3格式存储。 系统组织问题 android的系统组织很有意思,并不是按照FHS来组织的,却部分兼容于FHS。 android最基础的一个分区是system,这个分区被mount到/system。/etc一般都是直接link到了/system/etc下面,由此可见这个分区的重要性。这个分区一般存放所有系统内置的,不能更改的程序和数据。例如系统的内置app,framework,java基础库,so库,系统程序,等等。一般的刷机包里面,都是以zip格式打包了system的新内容。一旦这个内容被替换,系统就有了新特性。一般一个system的大小是200m-500m,不会全部用满,会留出一些方便后续的升级改造。 data里面是系统内置的存储区域,这个区域常常被误叫为手机内存。实际上内存是ram,这块类似于rom。一般是500m上下,程序安装后就是装到了这个,包括数据也保存在这里。如果这个区域不足,系统就不能安装新程序。因此有些人想出了app2sd的把戏,说白了,就是通过bind,把sd卡上的一块区域映射到这个区域的某个目录下,使得某个app的数据可以存储到sd卡上。当然,这个能够转移过去的只限于数据,代码好像是不能转移的。而且,mount需要时间,sd的读取一般也比rom更加慢和麻烦。因此app2sd后,系统启动速度会变慢,程序运行也会变慢。 一个更好的扩充data的方案(当然,也更危险)是,通过修改刷机包,将上面kernel参数改变掉,并且重新分区nand。这样,data区的大小可以增加到1g左右,而user区的大小会减小相应的量。这样处理后,手机上可以安装更多的程序,而且没有什么后遗症。 cache里面是缓存,这个直观感受并不多,也很少用满,所以不解释。程序里面一般会列出,使用多少缓存,就是指的这个区域。 权限管理问题 android手机的权限很有意思。和macbook有点类似,但不完全相同。 android手机的每个程序,都有一个权限和他相关。规定的事情可以做,不规定的不能做。估计是给程序新建了一个身份,可以做的事情做成组,然后对身份加组。但是其中,有一类特殊的权限,正常情况下是任何程序都无法申请的,即是sid权限。学过linux的应当知道,就是可以切换成root身份的权限。 android的root,基本方法都是通过某种方法将/system改成可读写,然后用自己做的su替换/system/bin/su文件。自己做的程序,会以一些方法验证某个程序是否具有su的权限(一般是弹出对话框确认),然后让他们可以拥有最高权限。可以su的程序,他们的权限表就没有意义了。 adhoc问题 adhoc是一种常见的wifi形态,特征是没有一个ap(常见的路由器即是一种ap),全部由普通的客户端电脑来进行网络连接。 android的wpa_supplicant文件做过一些修改,过滤了adhoc网络的essid。所以,如果你使用adhoc模式共享了网络,你的android设备将无法使用。 但是android是可以做出adhoc的。这是很悖论的一个事情,android自己做出的网络分享,另一台android是无法使用的。

Dec 12, 2011 - 1 minute read - Comments

家庭网关,三网融合

Sunny Sunny<sunnyboyme@gmail.com>: 要做一个关于home gateway的论文,讨论不同服务下的 Service Level Agreement (SLA),带宽,延时,数据包 schedule 策略 等等。不知大家有什么好的 想法/Question/Hypothesis,或者 以往的使用体验。 希望来个 头脑风暴,呵呵 ~~ shell: 我好像全都部署了,就是不整那么多名词而已,不知道你要干啥。 出口是光纤,20M下行/1M上行。路由器是dir-825,上面部署iptables arptables 还有tc。可以控制端口进出,还有控制机器的访问权。tc负责控制QoS。 后面主要是两台机器,一台atom,上面放2T硬盘,作为NAS/开发服务器/电视的长期支撑设备/家里的定时通知机器/闹钟/将来准备接个摄像头做更好玩的应用。 另一台amd x955 8G,两个人用。一个DVI连接显示器,一个HDMI连接电视,可以看看高清电影,开发也很舒服,一般开虚拟机干各种应用。 其余设备都走了网线或者无线,最近考虑装一个网络电话。 电视是三星的,上面集成了一个简单的android,就是app market是专用的,里面没有vnc/rdp客户端,否则我连atom都不需要登录就可以直接访问各种服务器了,更方便。 电话,电视,网络,全部走在了ethernet上面,不知道算不算三网融合。不过我吐槽过一篇文章,这年头不知道要电视和电话干吗用。给我视频网站和手机就能很high了。 在 11-12-11,Sunny Sunny<sunnyboyme@gmail.com> 写道: 哇咔咔,不错不错,可以拿来当模板用~~ 不知道你的电视和电话走网路时候用的是什么协议?或者说,用的哪家公司的服务? 电视走网络(IPTV?)会带来巨大流量,相比普通电视/数字电视有什么优势? 在 2011年12月12日 上午9:16,Stone Zhang<kelxzhang@gmail.com>写道: 其实,我感觉三网融合现在最大的问题是,在三层没有连上的时候,如果可以打电话。 就是说,在断网时(就是物理连上,但拿不到IP )普通用户如何能够打电话。 还是就是收费问题。 何必走专用协议呢?现在中国没有一家服务是大到可以称为标准协议的。 电话我还在考虑,用SIP还是skype。前者有很多现成的网关,也很容易和普通电话通话。后者看样子也不差。反正我手头有atom服务器,用skype长期开机也是没什么问题的。 电视更简单,直接上youku/tudou/verycd搜索就好。其实你本心的想一想,我们到底是为了解决问题而发明标准还是为了制造问题而发明标准?使用目前已经存在的服务能解决需求就好了。这些点播唯一的缺陷是还缺少一些连续播放的视频DJ/选材制作,我在吃饭的时候看节目往往还要自己挑。所以目前我吃饭的时候都在看电影,atom机器一天能下N部高清下来,就是我怕现在的导演们没那么多时间去拍。。。 视频走网络有什么好处?论广播能力,格式兼容性,不如RF。论节目,也比电视台差了很多。但是电视走网络胜在制式可以几乎无限上升,目前我看1024x768已经觉得不够清楚了。你觉得目前的IPTV,就算加上数字电视机顶盒,能够到多少分辨率? 至于电话问题,断网是极端情况。虽然网络比电话线不稳定,但是也不是天天断的。有网络用网络,没网络用手机。android加上sipdroid也可以当作sip客户端用。如果手机都走不了,那问题就不在三网融合的设计上了。 你可以想想,网络电话到底有什么优势?电话到底干吗用的?在我们业务类型大幅变化的时代,讨论如何将上个世纪的业务完全不差的照搬到网络时代真的有帮助么?我们真的需要在网络时代,等待一个前向兼容的标准么?实话说,这是中老年业务。我家里没有普通电话,外婆和岳母说要装一个,我和老婆都没什么兴趣。因为除了多交钱,没有任何帮助。要找我们,手机总能找到。手机找不到,电话也找不到。 传统认为,使用可以容忍的语音标准,提供持续而稳定的服务是电话服务的第一要素。实话说,在网络时代,这个可能要改为低成本,高可用性。网络(尤其是中国网络)已经把我们训练的很有抵抗力,对无法服务的系统基本可以接受,只要这个系统大部分时候能跑通。让我选择十年保证故障在1小时以内的普通电话服务,我宁可选择一年保证故障在五小时以内的网络电话服务,只要这个电话服务可以: 1.大部分时候打的通,比移动/联通打不通的机会低。 2.便宜,我可以和远程一聊数小时,甚至干脆保持一两天不断线。 3.功能集成,例如视频电话?多人电话? 为什么不选择后者呢?我正在准备把老婆家里的设备做一下定制,让她的电脑可以很方便的视频保持和我服务器的连接。这样岳母可以通过她家里的电脑和我这里保持持续通讯几个小时,甚至可以一边吃饭一边聊天,双方还能互相可见——免费。我不觉得普通电话业务能够提供这种优势,更不提昂贵的话费。 另一个例子是我一个朋友,也在shlug里面。他十月去日本,带的是一台iTouch。在日本可以很容易的连上wifi,速度还很快。通过skype打电话回家,价格便宜服务稳定。如果是我,我更希望带一个3G设备,直接用当地的3G接入保持持续通讯。你觉得带传统手机出国然后办理套餐需要多少手续和多少钱?这是一个移动电话被网络服务比下去的例子。也许有人说中国的网络没这么好——好吧,看看五年前的网络,看看今天的,想想看五年后,这个论点还有没有优势。 同样,在网络时代抱着电视不放也将会是种无谋。目前网络视频还是替换不了普通电视,不过这天总会来的。