my blog my blog

Monthly 1月 2013
订阅Youku视频那点儿事儿

 

自打上次发现Baidu的空间不可以订阅之后,就觉得挺没有道理的,今天发现youku的视频也无法订阅,直接就大汗淋漓了,订阅难道对流量来源没有推动作用么?不理解为什么都把订阅去掉了。查阅了一下,给出一个解决方案。

首先进入一个youku的个人空间,以今天奶牛想订阅的一人食的空间为例吧。进入空间,得到网址:

  1. http://i.youku.com/u/UNTQyODQyOTg4 

其中/u/后面的就是用户的id,但是是被加密过的,下面开始解密

首先将UNTQyODQyOTg4的开头的U去掉,得到NTQyODQyOTg4

这是一串经过base64加密的字段,解密之得到用户的数字id密文542842988

这个542842988并非是真实的用户id,这串数字/4才是真实的id,继id为135710747

然后直接用下面的地址进行订阅:

  1. http://www.youku.com/user/rss/id/135710747 

看看是不是你想要的个人专辑?

以上的方法来自网友,因为看到网上很多人都转载的此方法,源作者奶牛没有找到。对于这个方法中的base64加密在网络中还是很常见的,在碰到一些密文的时候朋友们不妨先用base64试试,base64是可逆的,而且对大多数人来说一眼看不出是个啥东东,当然现在一次加密的md5在强大的数据库字典下也显得跟可逆的似的了,那次刚发一微博就被网友朋友们抓住了,哈哈。

QQ手动抓对方IP测试成功

 

QQ是我们熟悉不过的IM软件了,一直以来都很好奇那些显IP的外挂是怎么搞成的,因为最近也在看计算机网络方面的书籍,昨天闲着没事儿就找了下网上介绍那些外挂是如何来做的。他们是通过对QQ的文件进行反汇编,然后分析代码做的,呃,这个奶牛真心搞不了,毕竟不是搞软件的人,下面奶牛就把自己的思路来分享给大家:

从抓包开始,工具wireshark

因为聊天的过程会有各种数据包,而数据包有ip,直接截取可行否?答案:否

不知道朋友们有没有注意到,腾讯现在已经提供7日内聊天记录可查询的服务,也就是说我们的数据包肯定不是直接发送到对方的pc,肯定是经过腾讯的服务器,所以此过程中腾讯做了中间人,他可以得到我们所有发送的内容,而且还经常帮我们分析一下,提醒用户涉及财物的时候请谨慎。

而实际的抓取过程中也证实了这一点,抓到的通讯中的ip并非对方的实际IP,估计应该是腾讯服务器的IP

那么可行方案有没有呢?有的,我们可以通过文件传送来进行抓取:

直接发送一个大文件,让对方接收,然后你就可以看到你的wireshark数据包猛增,这个ip就是对方的真实ip。腾讯不会浪费自己服务器的资源来截取这些对他们来说大多数无用的东西,所以文件传送肯定是点对点来完成了,实际测试中也得到了印证。

一些思考:腾讯QQ的文件传送过程中并没有使用奶牛预期的TCP传送,而是使用的UDP,这点挺出乎意料的。所以肯定在接收程序与发送程序之间有很多协议上的处理,对于丢包与重发机制上肯定有很多设计,因为文件传送必然需要可靠的传送。感兴趣的朋友可以自行测试下。

获奖感言

 

昨夜中奖,虽然只是个三等奖,但是也着实让自己高兴了一场哇。发表下获奖感言:

对于github被封事件,个人认为实属误杀,也不是针对程序员来的。

我们回忆一下这个过程:有人写了抢票的程序放github上,让github在所有人的视线中都成了焦点。之后github即遭短暂封锁。

封它估计也只是想保证铁路购票的公平性,而且这才是真正的出发点,而且不仅仅是对github下手,其它的抢票软件程序也一起都被警告撤回等措施来加以制止了。虽然对编程人员有影响,但从保证铁路购票公平性的角度出发还是可以理解的,而且也并非针对程序员,实属误杀。

然而,包括李开复等人一直对此事推波助澜,仿似要推翻什么一样,我反倒觉得这是积怨的表现。就像google twitter youtube G+等被封的时候,我们并没有能找到一个合适的理由来发泄一下,所以github是程序员的工具这个点被无限的放大了。但还是那句话,从出发点上看,这确实是属于误杀。

这个问题就此而至,再来说下那些针对复旦招聘gfw工作人员的事。这个就是你情我愿的事儿,没必要搞得跟对不起人民一样,真的没必要。真的没觉得封掉个youtube twitter对大多数人会有多大的影响。网络只是个工具,现在这个工具可以正常使用哇,你需要什么资料都可以查到哇,我没觉得你查个学术的东西有什么限制吧,这跟封闭自己也毫不相干吧,哪个人站出来说说到底封闭你什么了?你的思想还是你的自由?我到现在都理解不了那些说封闭我们的人到底怎么想的。网络依然是自由的,你需要的东西也都在云端,只要你想学习,网络这个工具依旧是好用的。

再说产品设计,youtube就比优酷或者土豆好么?推就比weibo要好么?如果你说你没有活不下去的话,只能说你的偏好太重或者更喜欢国外的style,就大多数人而言,twitter跟youtube对他们毫无意义,他们不会没事儿跑youtube上看那些听不懂的大英文片子去,优酷或者土豆在视频方面我觉得确实挺出色了,而且大多数人也不会去twitter上看那些话唠每天说着自己听不懂的东西,反倒大多数名人都选择了weibo这个平台,上面有很多优秀的普通人可以看懂的优质资源,在这种取舍上我个人认为没有必要舍近求远。

最后,感谢大家对奶牛的支持,讨论语言过激只是你很重视这件事的表现,可以理解。但每个人都有自己的想法,奶牛不苛求每个人都像奶牛这样子想,只是表述下自己的观点,很多事情上我都愿意保持中立,总归是婆说婆有理,公说公有理的事儿。

毒蛇废柴们请闭嘴

 

对于Github类似问题的解决方法。只做技术讨论,非法用途后果自负。

一.修改DNS

对于GFW的封锁,多数是使用DNS污染的方法,也就是说你们无法通过DNS解析出正常的网站域名对应的IP地址。所以更换没有被污染的DNS服务器是最简单的方法。

二.HOSTS手动解析方法

根据一些网友提供的HOSTS文件的方法也是可以解决此问题的,原理是将正确的服务器IP直接与域名想对应,因为无论win还是linux,都是可选hosts优先还是dns优先的,默认是hosts文件优先,所以把正确的解析结果直接保存在HOSTS文件中也是可行的。但是对于IP封锁此方法无效。

三.VPN方法

VPN只是一个广义的概念,有很多种具体的实现,比如pptp l2tp 还有open vpn等,具体差别自行搜索。VPN是将你本机连接至服务器所在的一个内网,然后服务器作为你的网关,也就是说你的访问都是通过服务器做路由的,所以VPN的出口IP就是你的服务器地址。

四.代理方法

代理的类型也分多种,比如socks5 、http等,具体过程是将你的数据包通过一条管道提供给服务器,然后服务器替你访问目标,并将结果反馈给你,跟VPN不同,代理大多数时候不是全局的,而vpn默认是全局的,当然也可以通过自定义route来更改。网上代理公布的网站多的是,自己测试。

五.tor

tor这个方法最近几年并不是那么火,tor是利用中继的方法来实现的,具体使用方法自行查找

六.SSH

ssh既然摆上来了,那我就给你们两种方案。一种是通过ssh直接登录到服务器,把需要的东西,直接命令行在服务器上实现。当然,很多接触ssh的可能只是一个nologin的帐号,可以将远程服务器的管道绑定到本地一个端口,然后将访问转到这个端口上来实现,跟代理的方法是相类似的。

七.借助已有软件实现自动化操作

收费的免费的,很多,都是集成好的,一般软件装完就会引导你正确使用,太多,不枚举。

 

对于上面的这些方法,不知道可否堵住你们这些毒蛇废柴的嘴巴。如果还不可以,那么我无言以对。

一个网络数据包的故事——理顺下网络数据包的传输(三)

 

接续接着上节“ 二.怎么找到你?” ,奶牛继续来说说这个网络数据包滴故事的第三节:你等着,我来了。

三.你等着,我来了。

这节呢,就是一个传输的过程,涉及比较多的就是网络层跟运输层的一些东东。其实前几天打算自己理顺下计算机网络是有原因滴,看鸟哥讲述的网络那部分有一些迷惑,主要是对于NAT问题的理解。这节我们将把自己藏身在一个最隐蔽的角落来讲述这个故事,我们是一个内网滴小主机,什么是内网呢,呃,就是说你没有public ip address,所以你没法直接在互联网上进行通信。那么怎么办哇,你可以走你的网关哇,那这个网关又是什么哩?我们这里就笼统滴把它当个路由器吧。路由器是在物理层、网络层、运输层上的东西,也就是说,我们发一个数据包出去的时候,除了具体的data内容不会被修改,其它滴很多东西都是重新封包处理滴。好啦,下面我们就一层层滴来解释。

首先第一个过程是判断我们的目的地址是不是内网的ip,如果是,直接ARP后直接用硬件地址通信(我们本来就没打算再继续这个过程,比较容易理解,只是提一下),如果不是哩,那么我们就会把这个数据包交给我们的路由器。这时候路由器有了这个数据包(仍旧以TCP为例),路由的NAT会自动将其中的源地址与源端口还有源mac(source ip && source port)地址都更新成为路由器自己的硬件地址,IP地址跟端口(路由器公网的IP跟端口),并且在NAT转换表中添加一条记录,这里记录的是路由器更新的内容以及目标主机的信息(目标IP跟目标端口)。这个就是NAT工作的一个很重要的作用,它将我们内网的主机完全隐藏在了自己的身下,然后把自己作为一个外交官,与外界进行通信。然后路由器将数据包运输到公网IP所在滴网络,再进行对目的主机的查找,如果没找到就继续往上一层网关传递数据包,直至找到目标主机,并将数据包传递上去。这里奶牛说的很简单,不想让大家很混乱,所以很多细节都避而不谈了,一般也不需要知道。

当目标主机发回数据的时候,目标ip跟端口就是我们第一层公网路由器的ip跟端口,因为那个ip跟端口已经可以定位一台主机了,所以那些在网络传输的过程中是不会变化的,唯一变化滴是mac地址,这里我们说下,数据包传递过程中mac地址是逐层变化的,一般就是本机的mac与上层网关的mac会每次都被修改,因为这个是硬件通信的要求,但是网络层跟运输层在公网的传递是不变的,直到数据又回到了我们的保护伞第一层路由器。这时候路由器看到:哦?终于等待的数据回来了。(因为我们刚才记录在NAT转换表中了目标ip跟目标端口哇,所以这里我们可以知道是我们想要的数据咯),然后我们要把这些数据换个头发回给我们的内网主机,这时候目标ip跟端口信息被更换为内网主机的ip跟端口,又发回给了内网主机,这时候内网主机就得到了自己需要的信息。

有何为证这就是我们想要的信息呢?1.因为我们在内网,所以这些数据包肯定发来时候的mac是网关的,直接arp就可以查到,你看看是不是。2.仍旧是那个ip跟端口哇,你看看是不是你要的不就是到了哇,汗一下。这里奶牛截取一下自己的通信包的一些信息给大家看下,增强下印象:

首先我们发送一个数据包的信息是:

  1. 源主机:192.168.1.100 
  2. 目标主机:220.181.111.147 
  3. 协议:TCP 
  4. Source port: 63516 (63516) 
  5. Source: QuantaCo_60:44:f1 (00:26:9e:60:44:f1) 
  6. Destination port: http (80) 
  7. Destination: Tp-LinkT_23:d7:9a (94:0c:6d:23:d7:9a) 

我们接收到的数据包的信息是:

  1. 目标主机:192.168.1.100  
  2. 源主机:220.181.111.147  
  3. 协议:TCP  
  4. Source port: http (80) 
  5. Source: Tp-LinkT_23:d7:9a (94:0c:6d:23:d7:9a) 
  6. Destination port: 63516 (63516) 
  7. Destination: QuantaCo_60:44:f1 (00:26:9e:60:44:f1) 

好吧,故事就讲到这里吧,如果朋友们看着还是乱,那就自己看下《计算机网络:自顶向下方法》这本书吧,写得很好,细致容易理解,作为入门书籍相当棒。

一个网络数据包的故事——理顺下网络数据包的传输(二)

 

接续接着上节“ 一.我在哪里?你又在哪里?” ,奶牛继续来说说这个网络数据包滴故事。

二.怎么找到你?

你可能会疑问,上一节我们不是说了你在哪里哇,那还用找哇?当然,我们这节就是要弄清楚我是怎么知道的你在哪里。

关键词:ARP DNS

先来说ARP

  1. ARP(address resolution protocol):地址解析协议是获取物理地址的一个TCP/IP协议。
  2. 某节点的IP地址的ARP请求被广播到网络上后,这个节点会收到确认其物理地址的应答,这样的数据包才能被传送出去。 

那ARP解析的究竟是什么呢?让我们看一下:

  1. arp -a 
  2.  
  3. 接口: 192.168.1.100 --- 0xb 
  4.   Internet 地址         物理地址              类型 
  5.   192.168.1.1           94-0c-6d-23-d7-9a     动态 
  6.   192.168.1.255         ff-ff-ff-ff-ff-ff     静态 

奶牛查询了下本地的arp,我们可以看到,奶牛是在路由器的环境下,网关就是IP:192.168.1.1,它的硬件mac地址是94-0c-6d-23-d7-9a ,这记录在我们的arp表中,而192.168.1.255就是广播地址啦,如果我们的路由器下还有一台机器的IP是192.168.1.2,如果我们知道它就是我们的目标,我们就要把数据包发送给它,那么我们就需要首先利用ARP来查询到192.168.1.2的硬件MAC地址,然后将这个地址封在我们的以太网帧中,这样子才能把数据通过硬件发送出去,因为最终归结到最后,所有数据包还是要通过硬件来完成传送的。

再来说说DNS

  1. DNS(Domain Name System)是域名系统的缩写
  2. 它是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库
  3. 能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。  

从定义来看,DNS就是将IP与域名进行互相映射,我们可以通过dns查找一个域名对应的IP,也可以通过IP查找这个IP下的域名。对于域名,我们这里也来说一下,域名是指abc.com  nenew.net或相类似形式的名称,而www.abc.com  www.nenew.net只是一个子域名,跟blog.nenew.net哇wiki.nenew.net哇是同等地位的。当然子域跟IP也是对应的。

  1. nslookup nenew.net 8.8.8.8 
  2. 服务器:  google-public-dns-a.google.com 
  3. Address:  8.8.8.8 
  4. 非权威应答: 
  5. 名称:    nenew.net 
  6. Address:  65.49.24.75 

用nslookup命令来查询nenew.net的IP地址,可以得到奶牛现在用的服务器的IP,当然,这里跟我们说的数据包的故事有些远了,我们继续绕回去,有了域名,我们就不用去记忆一整串的IP地址了,因此,如果你想与一台服务器进行通信,传送数据包,有时候也会用到DNS来帮助我们解析出目标的IP,这样子我们就知道了IP包中的目标地址了。

对于TCP或者UDP的表头中的目标端口,我们一般还是以默认的知道的情况下才好进行数据包的传送,比如我们要浏览一个网页,那么默认的端口一般就是80,这个是公认的,小于1024的端口一般都被赋予了相应的功能跟意义,虽然我们也可以手动进行修改,但是很多东西是约定俗成的。

综合一下上面:

以太网帧的表头中的目的地址是mac硬件地址,使用arp将目标IP解析成硬件地址

IP数据包的表头中的目的地址是IP,这个IP可以是我们事先知道的,也可以是通过DNS查询得到的。

TCP包的表头中的目的端口是目标的端口号,一般是默认定义好的(比如web的80端口ftp的21端口)也可以是事先知道的。

通过这三点,我们就可以确定出你在哪里,并且知道我是怎么找到你的。

数据包的故事继续,下节继续说数据包的传输过程:你等着,我来了。

一个网络数据包的故事——理顺下网络数据包的传输(一)

 

昨晚半夜看鸟哥,看网络数据包那章的时候,有一些东西很零乱,有一些问题也没有具体来说明,昨晚想了一脑子浆糊,主要是纠结于nat这层,今天查了一些介绍,算是能理清楚了。整理一下,讲述下一个网络数据包的故事。

一.我在哪里?你又在哪里?

这个问题很哲学,我在哪里?你又在哪里?呃,如果你不知道我在哪里你怎么找我?我不知道你在哪里我又怎么找你呢?那我们就来看看一个数据包的结构吧(以TCP为例):

|<–           MAC数据包总长度           –>|

|         |<–       IP数据包总长度       –>|

|                 |<–   TCP数据包总长度  –>|

| MAC数据包表头 | IP数据包表头 | TCP数据包表头 | 实际内容 |

这里不难看出,数据包的层次关系来,MAC数据包包包裹着IP数据包,IP数据包又包裹着TCP数据包,TCP数据包里面是要传输的内容。下面来说说这个MAC IP TCP都是神马东东。

  1. MAC(Medium Access Control) 
  2. 媒体介入控制层,属于OSI模型中数据链路层下层子层。 
  3. IP(Internet Protocol) 
  4. 网络之间互连的协议的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。 
  5. TCP(Transmission Control Protocol) 
  6. 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。  

MAC也表示网卡滴硬件地址,就是你滴网卡那串00:11:22:33:44:55:66形式滴硬件地址。下面说说各个包的表头里面都有一些什么重要滴东西(当然,这里只介绍那些最重要的东西)。

MAC的表头里面标明了目的地址与来源地址,这两个地址都是硬件MAC地址,因为MAC帧在数据链路层,这层是整个OSI的物理层之上,也就是物理层是直接负责将这些数据进行网卡之间的传输滴,所以这里的地址是硬件地址。MAC从硬件上说明了我在哪里与你在哪里。但是这个MAC的表头会跟随数据的传输而逐步变化。

IP的表头里面也有类似的目标地址与来源地址,这里的地址是用IP表示的。当然,无论你是私有IP还是公有IP,这里的IP地址也是会变化滴,正向发出的时候目标IP是不会变化的,返回的时候,来源IP也不变化,也就是说你要访问的那个IP地址在传输过程中并不会改变,变化的是源地址source IP。

TCP的表头里面没有地址,只有端口,分目标端口与来源端口。这个端口多数是随机产生的,当然,目标端口一般不是随机产生的,比如你要访问一个web服务,那么目标端口一般就是80咯,关于端口的知识各位可以百科下。这里跟IP很相似,目标端口不会变化,但是来源端口会跟随着路由变化。具体为什么变化哩,奶牛在下节中回来跟大家说明。

好了,这样子,“我在哪里?你在哪里?”的问题基本上就有了一个明确的定位,虽然上面看着有些零乱,而且有很多变化,但是,我们可以知道一些变化的,一些不变化的,而且这里我们也可以想到一个问题,TCP/IP是协议簇,为啥他俩这么暧昧哩,因为他俩在一起可以确定一条传输的路径哇,有些联系在一起密不可分滴关系里,暧昧暧昧哇~~~

好了,如果感兴趣滴朋友就期待奶牛滴下一节吧~~~

【底价¥100】域名拍卖:linuxman.me

 

RT,出自己去年买下的一个域名linuxman.me.

价格没打算要高,带价来就可以~

给我你觉得自己可以出的最高价格,如果合适域名就归你了。

如果你只是想拥有一个像奶牛博客这样子的博客,可以免费提供空间代购+博客搭建服务(前提你是linuxman.me的购买者)

联系方式可以微博私信,也可以Q奶牛

现在已经改成拍卖方式,底价¥100,谁要谁拿走。地址http://item.taobao.com/item.htm?id=18704511783

手机屏幕清晰度指标之一PPI介绍

 

今天跟朋友们聊聊手机的屏幕清晰度,很多人经常认为分辨率高的话屏幕就会清晰,那么分辨率低了屏幕就一定不清晰么?

回想下,我们在五年前用的手机,上面的点的感觉特别明显,但是近几年的手机屏幕已经有了很大质的提升,奶牛今天想说的是一个叫PPI的指标,先说定义:

  1. PPI即每英寸所拥有的像素数目。pixels per inch所表示的是每英寸所拥有的像素(pixel)数目。 

也就是说每英寸所含的像素的数目,我们知道我们手机都有一个分辨率,分别表示横向跟纵向的像素数目,我们还知道我们的手机都有一个屏幕尺寸是多少多少英寸,这个尺寸是屏幕斜边的长度,这样子我们就可以利用公式来计算一款手机的PPI了。

  1. ppi=(横向分辨率²+纵向分辨率²)½ / 屏幕尺寸 

计算出来一个指标,因为人肉眼能分辨的最大ppi是300,所以越接近三百,屏幕的显示效果应该越清晰,颗粒状越不明显。比如iphone4达到了326。当然,250+的个人感觉就已经相当棒了。ok,不多解释了,下次选手机的时候自己可以算下PPI来评价下屏幕的清晰度。此清晰度并不涉及色彩神马的,只是一个参考指标,比如很多中屏幕都有各自的显示优势,有的黑色像素可以完全不发光做到节能等,需要自己再查找资料。

HTC ONE S解锁ROOT刷Recovery刷CM10教程

 

舍友新入手一台HTC ONE S,今天折腾了一个下午,虽然刷机这种事儿都是轻车熟路了,但是还是有一些问题,把解决过程放出来,大家参考下吧。

1.解锁

目前木有S-OFF相关的刷机资料,好像还需要机器来解,所以,方法就是官方解锁。官方解锁就直接去http://htcdev.com/bootloader/注册一个帐号,然后一步步来,在HBOOT那里最后显示S-ON 但是UNLOCKED就可以了。具体教程网上泛滥,自己搜下htc官解

2.刷recovery

先去ClockworkMod下载相应型号的recovery,网址:http://www.clockworkmod.com/rommanager

手机进入HBOOT,然后进入fastboot(按一下电源键就可以了),然后连接到电脑。驱动跟软件点此下载

手机与电脑链接正常后会在手机提示USB链接,然后进入CMD或者linux已经安装的fastboot执行命令

  1. fastboot flash recovery recovery.img 
  2. //其中的recovery.img是你下载的recovery的镜像名称,后缀是img的 

3.如果是只想root下原机系统的话自行搜索一个刷机包,然后用recovery写入。奶牛这里是直接刷的cm10,默认有root,省一步不详细写了。

4.HTC ONE S刷CM10

首先去recovery中给系统做个备份,然后开机进入系统,把备份拷贝出来。以后会用得到,如果你想用官方的ROM的时候。

之后是下载CM10的htc one s 刷机包与google app的补丁包。

CM10下载地址:http://get.cm/?device=ville

Google App补丁包下载地址:http://goo.im/gapps

注意:CyanogenMod 10.0.x 对应Android版本4.1.x,CyanogenMod 10.1.x 对应Android版本4.2.1,下载GApps的时候要注意,nightly的应该是4.2的,而stable的是4.1的,建议使用stable的rom。

将ROM跟补丁包放在手机的/sdcard目录下以供使用,备份完成后再进入recovery,双wipe后将rom刷入,再直接刷入Gapp不用wipe。这时候不要退出,否则退出也无法正常启动,因为HTC ONE S的HBOOT的关系,boot.img不能正常刷入,需要手动刷,解压缩ROM文件夹下的boot.img,用fastboot刷入,命令:

  1. fastboot flash boot boot.img 

注意:这个boot.img是从CM10的ROM里面提取的,原先我们用recovery备份的那个原机备份中也会有一个boot.img,恢复的时候也要手动刷入才可以正常恢复。

这时候开机后就可以正常启动了,但是,开机第二屏幕会有红字显示:

  1. This build is for development purpose only 
  2. Do not distribute outside of HTC without HTC's written permission. 
  3. Failure to comply may lead to legal action 

这个原因是因为我们替换可原厂的boot,应该是有验证没通过,所以提示,但是不影响使用,看了下好像是PJ75IMG.zip的原因,因为没有s-off,而且也不知道这个如何去做替换,暂且搁置,如果有解决方案希望可以留言下,谢谢。

最后可能是CM10的一个小bug,发短信不能正常载入联系人,解决方法是:先将联系人备份,系统设置-应用-联系人存储 清除数据 然后回联系人里导入列表就可以正常了,已测试。