手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:google

新年快乐

祝看到我博客的各位朋友,新的一年里,

做人不兔不茹

工作兔气扬眉

生活前兔似锦

职业宏兔大展

Tags: 新年快乐

遭遇ISP劫持?

不得不承认,2345是个垃圾站。如果没有今天这个情况的出现,或许我还愿意承认这个站点,但现在,我非常愤恨。
登录自己的博客花了很久,主要原因就是发现在连接时候,居然多了个forward和proxy,因为不明白原因,所以google了一下,找到了这篇文章 :又被ISP劫持了,原来和我有同样问题的人在。
因为我没有仔细研究,也没精力来研究。我连登录都花了将近半小时。。。。所以就COPY上面说的那个链接的内容了。
----------start---------------

最近上网时遇到过几次访问域名跳转到http://221.231.148.195/forward.html?url=XXXXXXXX然后就没反应的情况,多次发生后不由得让人怀疑。今天查理一下221.231.148.195这 个IP地址是南京电信的。我访问的是一个英文博客,不知道是哪国的但肯定不是中国的。一开始以为DNS被劫持了,所以手动查询DNS,用 WireShark查看没有伪造的数据包。通过国外的线路查询得到的结果是一样的,检查返回的IP确实是对方网站的。Ping对方的IP不通,通过国外线 路可以Ping通,看来劫持是在网络层。

使用WireShark记录HTTP会话的内容,发现第一次访问时返回内容如下。

XML/HTML代码
  1. HTTP/1.1 302 Object moved  
  2. Location: http://221.231.148.195/proxy.html?e=xxxxxxxxxxxxxxxxxxxxxxxxxx  
  3. Content-Length: 20  
  4. Content-Type: text/html  
  5. Connection: close  
  6. Expires: 0  
  7. Cache-control: no-store, no-cache, must-revalidate, post-check=0pre-check=0  
  8.   
  9. <body> ... </body>  

 

浏览器自动请求跳转地址再次返回另一个跳转。

XML/HTML代码
  1. HTTP/1.1 302 Moved Temporarily  
  2. Server: nginx/0.7.65  
  3. Date: Thu, 12 Aug 2010 00:58:42 GMT  
  4. Content-Type: text/html  
  5. Content-Length: 161  
  6. Connection: close  
  7. Location: http://221.231.148.195/forward.html?url=原来请求的URL  
  8.   
  9. <html>  
  10. <head><title>302 Found</title></head>  
  11. <body bgcolor="white">  
  12. <center><h1>302 Found</h1></center>  
  13. <hr><center>nginx/0.7.65</center>  
  14. </body>  
  15. </html>  

 

但是在我的浏览器里这一次跳转没能再返回任何东西,如果能的话会是以下内容

XML/HTML代码
  1. <html>  
  2.     <head>  
  3.         <script type="text/javascript" src="/js/jquery.min.js"></script>  
  4.         <script type="text/javascript" src="/js/jquery.cookie.js"></script>  
  5.         <script type="text/javascript" src="/js/jquery.query.js"></script>  
  6.         <script type="text/javascript">  
  7.             $(function(){  
  8.                 var value=$.cookie('_GB_ADV_STATE');  
  9.                 if(value==undefined){  
  10.                     $.cookie('_GB_ADV_STATE',"1",{expires:1});  
  11.                     window.location.href="/index.htm?3007";  
  12.                 }  
  13.                 else{  
  14.                     window.location.href=$.query_reg("url");  
  15.                 }  
  16.             });  
  17. </script>  
  18. </head>  
  19. <body>  
  20. </body>  
  21. </html>  

 

可以看到如果没有_GB_ADV_STATE这个Cookie的设置Cookie并且会跳转到2345网址导航,如果有这个Cookie的就再跳转到原来要访问的地址。Cookie的有效期设置是一天。 另外在我的Cookie里发现了cnzz_eid的东西,2345网址导航里也嵌入了访问统计的脚本,怀疑2345网址导航在利用这种劫持手段骗取独立访问数。

让我们大家一起谴责这种行为

  • 对方的服务器默认TTL用的是64,而劫持服务器返回的包到达我这里是2xx所以肯定不是原服务器的。TCP的建立时返回的SYN ACK包的TTL是5x,但是HTTP响应的第一个包是2xx。
  • 从代码判断,劫持设备只劫持短期内的第一次访问。不然会死循环。
  • 为什么这两天出问题了,一直死循环跳不到要去的页面了,难道劫持设备出错了?数据包显示在第二次访问时还是被劫持了。所以死循环了。

---OVER--
我没有找到上面的COOKIE,或许消失了(最后稍微正常了,果然发现了这个cookie)。或许有其他情况,反正我是在发现打开网站要很长时间后,我用firebug的net功能查看的,发现多了一个foward.html和proxy.html的记录。才想到用google搜索类似问题的。唉。什么时候有个清静的网络 ?你要做站你就做,你愿意花钱也没啥事,你不能拿普通站长的站来开心吧。我不能代表大多数人,我只能代表我自己谴责一下类似事件的发生。TMD,给我滚

Tags: isp, 劫持, 2345

通过javascript的匿名函数来分析几段简单有趣的代码

从PHP5.3起,也自带了匿名函数支持,只是它的支持并没有象js这样强大,风雪之隅测试过,可以查看:深入理解PHP之匿名函数,而这篇文章对于匿名函数和new Object以及new Function()的应用,作了较为详细的介绍和测试,如果你在开发中遇到这些问题,产生疑惑了,可以借鉴一下。

今天在园子里闲逛,看到wsxjr(很邪恶地联想到“我是下贱人”,晕)写的Javascript匿名函数的一种应用:封装一文,想起自己很久以前学习javascript的经历,也曾经碰到过几个由匿名函数造成的困扰(其中一个就是由闭包引起的),下面就整理几段简单代码讨论一下,让我们大家一起进步。
1、简单形式的封装调用

JavaScript代码
  1. var userName = function() { return "jeff wong" } ();    
  2. alert(userName);    
上面的代码确实简单,我们可以逐步分解成下面的写法:
JavaScript代码
  1. var anonymousFunc = function() { return "jeff wong" }; //匿名函数    
  2. var name = anonymousFunc(); //执行该函数 返回人名    
  3. alert(name);  
2、new 一下Function的形式(大写Function)
JavaScript代码
  1. var a = new Object();  
  2. var b = new Function();  
  3. //alert(typeof (a)); //object  
  4. //alert(typeof (b)); //function  
  5. alert(a); //[object Object]  
  6. alert(b); //匿名函数  
  7. //alert(a == b); //false  
  8. //alert(a === b); //false  

正如你所看到的那样,我们new一个Object,变量a弹出的是[object Object],而new一个Function(注意,是大写Function),b在弹出的时候,生成了匿名函数。 既然b是匿名函数,函数当然可以执行,我们可以继续试试下面的代码验证自己的猜测:

JavaScript代码
  1. alert(b()); //undefined  
  2. alert(a()); //脚本错误 提示“缺少函数”  

3、new 一下function也大有乾坤(小写function)
(1)、简单的空函数

JavaScript代码
  1. var func = new function() { };  
  2. alert(typeof (func)); //object  
  3. alert(func); //[object Object]  
  4. //alert(func()); //脚本错误 func不是函数  

其实上面的代码也就等价于下面的写法:

JavaScript代码
  1. function anonymousClass() { } //匿名类  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));//object  
  4. alert(instance); //[object Object]  

(2)、函数带个返回值的,也不是很难理解

JavaScript代码
  1. var func = new function() { return "jeff wong" };  
  2. alert(typeof (func));  
  3. alert(func);  
  4. //alert(func()); //脚本错误 缺少函数  

其实上面的代码也就等价于下面的写法:

JavaScript代码
  1. function anonymousClass() { return "jeff wong"; } //匿名类  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));//object  
  4. alert(instance); //[object Object]  

(3)、还是函数带个返回值的,写法稍微有点不同

下面的代码请注意和(2)中的区分一下,因为接下来要重点讨论的就是那一点点的不同书写形式:

JavaScript代码
  1. var func = new function() { return new String("jeff wong"); };  
  2. alert(typeof (func)); //object 意料之中  
  3. alert(func); //这里?!  
  4. //alert(func()); //脚本错误 缺少函数  

上面代码的等价形式依然简单:

JavaScript代码
  1. function anonymousClass() { return new String("jeff wong"); }  
  2. var instance = new anonymousClass();  
  3. alert(typeof (instance));  
  4. alert(instance);  

已经运行看到结果了吗?没错,第三种写法我们在弹出func或者instance的时候,都出人意料地得到了一段字符串"jeff wong"。细心比较(2)和(3)中的代码,除了return处的写法稍有不同之外,两处代码几乎完全一致,所以我们推断,毫无疑问,是new String的形式让我们的函数产生了意想不到的效果。 为什么会这样呢?

     原来,在javascript中,只要在new表达式之后的constructor返回(return)一个原始类型(无return时其实是return原始类型undefined,如(1)),比如第(2)种写法,那么就返回new创建的匿名对象;而如果new表达式之后的constructor返回一个引用对象,比如对象(Object),函数(function)及数组(Array)等等,那么返回的该引用对象就将覆盖new创建的匿名对象。现在再来分析(3)中的写法,由于new String会构造一个字符串引用对象,它就覆盖了new所创建的匿名对象,而new String的所指向引用值是“jeff wong”,所以弹出的必然是当前new String所分配的值。

  最后,留个思考题,大家看看下面的代码返回什么结果:

JavaScript代码
  1. var func = new function() { var str = new String("jeff wong"); return str; };//再换种写法  
  2. //alert(typeof (func)); //object 意料之中  
  3. alert(func); //猜一下这里应该是什么结果?  

原文来自于:http://www.cnblogs.com/jeffwongishandsome/archive/2010/06/27/1766207.html
作者:Jeff Wong

 

 

 

 

 

 

 

 

 

Tags: 匿名函数

typecho 插件开发(二)

纠结在写typecho的dbbackup这个插件上很久了,主要是为了两件事:
1、不想让用户设置的变量,无法自由设定(关于这点,我其实很能理解,不需要用户设置的变量,如果不在config类里被定义,那么在deactitave的时候,是否能够被正常删除?)

2、Db config 无法获取(本来我以为备份sqlite是最简单的事情,只要把db文件打个包,当成附件发送一下就完事了。但事实上,我无法通过程序获取到这个Db文件,因为_config变量是protected的,也没有任何函数可以重新获取这个$_config变量)

所以现在,我还是决定

1、设置变量,但要求用户不要修改。或者允许他们置为空(置为空的时候,直接就是相当于执行备份操作)

2、不管是sqlite 还是 mysql 都采用PHP导出成sql文件的方式,然后再打包发送

当然,还只是构思,并没有实现,尚在慢慢实现中。。。因为要期末考试了,时间也不多,还得带孩子。oh oh oh ....

顺便,sluke说的页面关键字高亮,我以为是有这个插件的,看了一下是Tag高亮,其实也差不多。其实,也就是在搜索的时候,我支持一下Referer就可以实现了。

Tags: typecho, 笔记, 插件, dbbackup

Scala分类建立

最近被人忽悠着学这个,试了一下,感觉也还行,所以就建了一下这个分类。
估计以后会有一部分时间是在玩这个了。
语法也有点简单,不是特别需要每个地方都定义变量。感觉有点象javascript的结构,但又不全是(当然不是,不过正因为有点象,所以我才选择了这个)

桌面应用好象不多,实在不行,我就用来当脚本跑喽。毕竟类库多一点,而且,用JVM的话,性能上或许也有一点点的保障(现在都不太清楚。只是乱猜测,不过,真要用PHP跑后台脚本24小时跑,不太放心,xmpp协议,用PHP跑的话,效率应该不能保障)

我仅想用它来做一些PHP做起来有点累的事情,目前还没有想到什么,但我想我应该有应该可以被用到。

朋友的网游是用java连接数据库,然后PHP调用接口。我当然不会无聊到BLOG也用scala来连接数据库,再用PHP调用,只是想着可能在以后会经常用到这门语言,那就够了。

权当,混饭吃吧。

Tags: scala

Records:4012345678