西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > ecshop教程 >

如何作ECShop指纹识别版本判断代码

时间:2014-12-19 14:41来源:未知 作者:好模板 点击:
ECShop指纹识别只是从以下三个入手: 1.meta数据元识别 2.intext:powered by ECShop 3.robots.txt 我们打开一个ECShop网站,看看页面中这几方面的特征。 1.我们现在看看meta标签中有什么特征。下面

ECShop指纹识别只是从以下三个入手:

1.meta数据元识别

2.intext:powered by ECShop

3.robots.txt

我们打开一个ECShop网站,看看页面中这几方面的特征。

1.我们现在看看meta标签中有什么特征。下面是我截取的一段HTML。

如何作ECShop指纹识别版本判断代码

 

可以看到,这个网站对meta标签没有处理,保留了ECShop的原始meta。网站是ECShop及其版本是2.7.2。此处也是做版本识别的地方。

 

2.再往下查看网页

我们发现在footer中有Powered by ECShop

如何作ECShop指纹识别版本判断代码

 

可以看到,这个网站对ECShop的footer没有修改,保留了ECShop的原始的footer,此处我们可以识别ECShop及其版本。由于一般网站修改此处的较多,这里就不做版本识别了。

 

3.对robots.txt内容的检查

robots.txt文件是一个文本文件。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。

当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

那么这可以被我们利用,以识别ECShop,看下面截图,我们发现有些文件是ECShop特有的,比如:/affiche.php、/good_script.php、/feed.php。那么,如果存在这几个特征,我们可以基本确定这就是一个ECShop CMS了。

如何作ECShop指纹识别版本判断代码

 将ECShop指纹单独保存为识别字典

ecshop_feature.py

 

[python] view plaincopy
 
  1. #coding=utf-8  
  2. ''''' 
  3. web-fingerprint plugin 
  4. 1. robots.txt detecting 
  5. 2. Powered by Ecshop detecting 
  6. 3.meta 
  7. '''  
  8. matches = {  
  9.     'robots_for_ecshop':  
  10.            ["Disallow: /cert/",  
  11.             "Disallow: /templates/",  
  12.             "Disallow: /themes/",  
  13.             "Disallow: /upgrade/",  
  14.             "Disallow: /affiche.php",  
  15.             "Disallow: /cycle_image.php",  
  16.             "Disallow: /goods_script.php",  
  17.             "Disallow: /region.php",  
  18.             "Disallow: /feed.php"],  
  19.     'intext':['<a href="http://www.ecshop.com" target="_blank" style=" font-family:Verdana; font-size:11px;">Powered by <strong><span style="color: #3366FF">ECShop</span> <span style="color: #FF9966">v2.7.',  
  20.               '<a href="http://www.ecshop.com/license.php?product=ecshop_b2c&url='],  
  21.     'meta':['ECSHOP v2.7.3','ECSHOP v2.7.2','ECSHOP v2.7.1','ECSHOP v2.7.0','ECSHOP v2.6.2','ECSHOP'],  
  22.     'title':['Powered by ECShop',]  
  23. }  
下面是识别主程序,输入回车分割的域名文件

 

 

[python] view plaincopy
 
  1. #coding=utf-8  
  2. import re  
  3. from ecshop_feature import matches  
  4. import urllib2  
  5.   
  6. ''''' 
  7. Ecshop 指纹识别 
  8. 1.meta数据元识别 
  9. 2.intext识别 
  10. 3.robots.txt识别 
  11. '''  
  12. class EcshopDetector():  
  13.     '''''构造方法,将域名改成URL'''  
  14.     def __init__(self,url):  
  15.         def handler(signum, frame):      
  16.             raise AssertionError  
  17.         if url.startswith("http://"):  
  18.             self.url = url  
  19.         else:  
  20.             self.url = "http://%s" % url  
  21.         try:   
  22.             httpres = urllib2.urlopen(self.url, timeout = 5)   
  23.             self.r = httpres  
  24.             self.page_content = httpres.read()  
  25.         except Exception, e:  
  26.             self.r = None  
  27.             self.page_content = None  
  28.   
  29.     '''''识别meta标签,版本识别'''  
  30.     def meta_detect(self):  
  31.         if not self.r:  
  32.             return (False,None)  
  33.         pattern = re.compile(r'<meta name=".*?" content="(.+)" />')  
  34.         infos = pattern.findall(self.page_content)  
  35.         if infos:  
  36.             for x in infos:  
  37.                 for i in range(0,5):  
  38.                     if x == matches['meta'][i]:  
  39.                         return (True'%s' %matches['meta'][i])  
  40.                         break  
  41.                 if x == matches['meta'][5]:  
  42.                     return (True,None)  
  43.                     break  
  44.             return (False,None)  
  45.         else:  
  46.             return (False,None)  
  47.   
  48.     '''''ecshop robots.txt,考虑到其他网站也可能用robots.txt中文件名,故必须有两个以上文件名相同'''  
  49.     def robots_ecshop_detect(self):  
  50.         if not self.r:  
  51.             return False  
  52.         robots_url = "%s%s" % (self.url,"/robots.txt")  
  53.         try :  
  54.             robots_content = requests.get(robots_url,timeout=10).content  
  55.         except Exception, e:  
  56.             return False  
  57.         robots_feature_ecshop = matches['robots_for_ecshop']  
  58.         robots_list = robots_content.split("\n")  
  59.         count = 0  
  60.         for x in robots_feature_ecshop:  
  61.             for y in robots_list:  
  62.                 if(x == y):  
  63.                     count +=1  
  64.         if count >= 2:  
  65.             return True  
  66.         else:  
  67.             # not ecshop  
  68.             return False  
  69.   
  70.     '''''检测网页中的ecshop字样'''  
  71.     def detect_intext(self):  
  72.         if not self.r:  
  73.             return False  
  74.         text_feature = matches['intext'][0or matches['intext'][1]  
  75.         if self.page_content.count(text_feature) != 0:  
  76.             return True  
  77.         else:  
  78.             return False  
  79.   
  80.     '''''判别方法'''  
  81.     def get_result(self):  
  82.         if not self.r:  
  83.             return (False,'Not Ecshop!')  
  84.         res = self.meta_detect()  
  85.         is_meta = res[0]  
  86.         version_info = res[1]  
  87.         is_ec_robots = self.robots_ecshop_detect()  
  88.   
  89.         is_intext = self.detect_intext()  
  90.         if is_meta or is_ec_robots or is_intext:  
  91.             # print 'Find Ecshop!'  
  92.             if version_info:  
  93.                 return (True,'%s' % version_info)  
  94.             else:  
  95.                 return (True,'Unknown')   
  96.         else:  
  97.             return (False,'Not Ecshop!')  
  98.   
  99. if __name__ == '__main__':  
  100.     ''''' 
  101.     ecshop_site.txt是以回车分割的域名文件 
  102.     '''  
  103.     fobj = open('ecshop_site.txt''r')  
  104.     fwobj = open('result.txt','a')  
  105.     for url in fobj:  
  106.         url = url[:-1]  
  107.         print url  
  108.         ecshopdetector = EcshopDetector(url)      
  109.         ret = ecshopdetector.get_result()  
  110.         if ret[0]:  
  111.             fwobj.writelines('Site:%s\tVersion:%s\n' % (url,ret[1]))  
  112.         else:  
  113.             pass  
  114.     fobj.close()      
  115.     fwobj.close()  

下面是程序得到的部分结果

 

如何作ECShop指纹识别版本判断代码

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(3)
100%
------分隔线----------------------------