记录一次被攻击勒索(redis“未授权访问”漏洞)

背景 话说,我开了一台腾讯云服务器跑redis-server,并将其配置为无须密码对外开放,方便我本地调试代码。 今天下午却意外发现云主机被关机了,上午我还用来调试代码呢,重新开机并登陆查看系统日志发现有个俄罗斯的IP地址登陆了系统并关闭了我的redis-server且关机。系统日志如下: #/var/log/auth.log: Dec 9 14:41:32 localhost sshd[25235]: Accepted publickey for root from 185.153.198.57 port 36148 ssh2: RSA SHA256:SdMM2Kh/nCGqWmXuFENkv7FV1ED4sXqlohMIfGmXLl8 #/var/log/syslog: Dec 9 14:41:32 localhost systemd[1]: Started Session 58722 of user root. Dec 9 14:41:35 localhost systemd[1]: session-33891.scope: Killing process 12706 (redis-server) with signal SIGTERM. Dec 9 14:41:35 localhost systemd[1]: Stopping Session 33891 of user root. Dec 9 14:41:35 localhost systemd[1]: Stopping User Manager for UID 0... Dec 9 14:41:35 localhost systemd[1]: Stopped target Graphical Interface.

esri默认底图的加载

以satellite为例 方式一: var map = new Map({ basemap:”satellite” }); 方式二: var EsriSatelliteWebtilelayer = new WebTileLayer({ urlTemplate:”https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{level}/{row}/{col}” }); 方式三: var EsriImglayer = new WMTSLayer({ url:”http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/WMTS”, serviceMode:”RESTful” }); 方式四: var EsriSatelliteTileLayer = new TileLayer({ //attributionDataUrl:”https://static.arcgis.com/attribution/World_Imagery”, url:”https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer” }); 方式一: 依次请求 https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?f=json https://static.arcgis.com/attribution/World_Imagery?f=json // https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tilemap/1/0/0/32/32 https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/1/0/1 // https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tilemap/2/0/0/32/32 https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/2/2/2 方式二: 直接请求切片:https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/1/1/1 方式三: 依次请求 元数据:https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/WMTS/1.0.0/WMTSCapabilities.xml 切片:https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/WMTS/tile/1.0.0/World_Imagery/default/default028mm/1/1/1.jpg 方式四: 是方式一的实际实现方式 二、比较特殊的非srcgisserver服务: 1、osm(openstreetmap),默认第一种加载方式为直接加载图片 所以,需要利用WebTileLayer进行加载(注意col和row的顺序,注意调整) var EsriOsmlayer =new WebTileLayer({ urlTemplate:”https://b.tile.openstreetmap.org/{level}/{col}/{row}.png” }); 2、vector tile矢量切片服务 //以dark-gray-vector为例 var EsriDarkgrayvectorlayer =new VectorTileLayer({

codemirro 设置提示信息

我们公司用的是自己的开发的sql视图工具,实现sql自动提示功能的时候用到了codemirror编辑器,看了一些资料就着手开发,但遇到提示信息设置的时候,遇到难题了,查了度娘,没有找到codemirror相关的设置提示信息的属性,而官网提供的api我只想说太rubbish codemirror官网:http://codemirror.net/ javascritpt爱好者:http://www.hyjiacan.com/codemirror-basic-usage/ 有中文的文档 皇天不负苦心人吧最好还是找到了解决办法 hintOptions: { tables: source } 这个属性是设置提示的信息 var source={app: [“name”, “score”, “birthDate”],version: [“name”, “score”, “birthDate”],dbos: [“name”, “population”, “size”]}; 这样就能提示source中的信息 我用的mode是sql 这里有我自己弄的demo,大家可以看着学习:http://download.csdn.net/download/j_cxn/10151541

Cannot complete the install because one or more required items could not be found解决办法

Eclipse安装springide,出现如下所示的错误: Cannot complete the install because one or more required items could not be found. Software being installed: Spring IDE Security Extension (optional) 3.7.3.201602250914-RELEASE (org.springframework.ide.eclipse.security.feature.feature.group 3.7.3.201602250914-RELEASE) Missing requirement: Spring IDE Live Beans Graph 3.7.3.201602250914-RELEASE (org.springframework.ide.eclipse.beans.ui.livegraph 3.7.3.201602250914-RELEASE) requires 'bundle org.eclipse.zest.core [1.0.0,2.0.0)' but it could not be found Cannot satisfy dependency: From: Spring IDE Core (required) 3.7.3.201602250914-RELEASE (org.springframework.ide.eclipse.feature.feature.group 3.7.3.201602250914-RELEASE) To: org.springframework.ide.eclipse.beans.ui.livegraph [3.7.3.201602250914-RELEASE] Cannot satisfy dependency: From: Spring IDE Security Extension (optional) 3.

python爬虫之反爬虫情况下的煎蛋网图片爬取初步探索

本次爬虫网址:http://jandan.net/ooxx 前言: 前段时间一直在折腾基于qqbot的QQ机器人,昨天用itchat在微信上也写了一个机器人,相比webqq,微信的web端功能比较丰富,图片、文件等都可以传输。今天闲来无事准备给写个爬虫丰富微信机器人的功能,就想到了爬煎蛋网上面的图片。 说做就做,打开浏览器一看,渲染前的源码里是没有图片地址的。这个很正常,首先想到的就是异步请求去获取例如json格式的图片地址,然后渲染在页面上。于是用Chrome的全局搜索功能尝试搜了一下某一张图片的地址,结果居然是没有搜到。早就耳闻煎蛋被爬虫弄得苦不堪言,看来也开始采取一些措施了。于是去GitHub上搜了一下jiandan关键词,按时间排序,发现靠前的几个项目要不就没意识到煎蛋的反爬从而还是在用原来的方式直接处理源码,要不就是在用selenium(web自动化框架,可参考我的这篇文章:点击打开链接)进行爬虫。看来这个简单的这个反爬机制是最近一个月才用上的,很不凑巧被我撞上了。用selenium确实是一种万能、省力的方式,但实在太耗费性能。我在我阿里云的服务器上放了一个selenium+chromeheadless的微博爬虫,每次爬虫运行的时候服务器都非常卡。加上对煎蛋的反爬机制挺好奇的,于是我就准备通过分析js来找出图片的请求地址。 正文: 首先查看js渲染前的html源码,发现放图片的位置是这样的 本该放地址的地方赫然放着blank.gif,并且在onload属性上绑定了一个jandan_load_img函数。这个jandan_load_img就成为本次爬虫的突破所在了。继续ctrl+shift+F全局搜索,找到这个函数 function jandan_load_img(b) { var d = $(b); var f = d.next("span.img-hash"); var e = f.text(); f.remove(); var c = f_K1Ft7i9UekcAhptpgQlLRFFKpzH6gOr0(e, "n8DpQLgoyVr2evbxYcQyFzxk9NRmsSKQ"); var a = $('[查看原图]'); d.before(a); d.before(" "); d.removeAttr("onload"); d.attr("src", location.protocol + c.replace(/(\/\/\w+\.sinaimg\.cn\/)(\w+)(\/.+\.gif)/, "$1thumb180$3")); if (/\.gif$/.test(c)) { d.attr("org_src", location.protocol + c); b.onload = function() { add_img_loading_mask(this, load_sina_gif) } } } 果然就是这个函数在处理图片相关的标签,写在一个单独的js文件里。容易看到,第7、8行将a标签插入到img之前,查看源码看到a标签就是是查看原图的链接,也就是我们接下来爬取的时候用到的地址了。第6行f_后跟着一长串字母的这个函数(简称f函数)返回的就是图片地址。第7行中replace函数的作用是当图片为gif时替换中间的一个字符串为large。 那么接下来的任务就是分析f函数到底是怎么获取图片的地址的。首先看参数,第一个参数e为img-hash标签的text,第二个参数则是一个常量。这个常量我实测是会变化的,所以需要我们去请求这个js文件然后用正则去匹配到该常量。js文件的地址则写在了html源码里,文件名应该也是会变化的,也是用正则去匹配到。拿到常量之后接下来仍然使用chrome全局搜索(注:最好是打上断点跳过去,同一个js文件里的第605行和第943行有两个f函数可能会造成干扰,参见本文评论区),找到f函数,我发现此函数只是在做一些md5、base_64加密等操作,并不算复杂,可以将js代码转为python运行。当然也可以选择直接运行js,不过应该也是比较耗费性能的。我在转化成python代码的过程中,在base64解码上耗费了较长时间,也说明了自己在字符编码方面的知识比较薄弱。 下面是我对转换的一点解释,把一些无意义的ifelse等代码精简掉,再把代码分成五块之后,f函数长这样: var f_K1Ft7i9UekcAhptpgQlLRFFKpzH6gOr0 = function(m, r, d) { var q = 4; r = md5(r); var o = md5(r.

UE4为组件Component注册事件时没有效果的问题解决

按照UE4的教程: .h文件: // 在 Project Settings 的 Description 页面填入版权声明。 #pragma once #include "GameFramework/Actor.h" #include "FPSProjectile.generated.h" UCLASS() class FPSPROJECT_API AFPSProjectile : public AActor { GENERATED_BODY() public: // 设置该 actor 属性的默认值 AFPSProjectile(); // 游戏开始时或生成时调用 virtual void BeginPlay() override; // 每帧调用 virtual void Tick( float DeltaSeconds ) override; // 球体碰撞组件。 UPROPERTY(VisibleDefaultsOnly, Category = Projectile) USphereComponent* CollisionComponent; // 发射物运动组件。 UPROPERTY(VisibleAnywhere, Category = Movement) UProjectileMovementComponent* ProjectileMovementComponent; // 在发射方向上设置发射物初速度的函数。 void FireInDirection(const FVector& ShootDirection); // 发射物命中物体时调用的函数。 void OnHit(UPrimitiveComponent* HitComponent, class AActor* OtherActor, class UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit); }; cpp文件:

通达OA 2017 绿色版 破解 下载安装

本地下载 点击下载 通达OA2017 绿色版 网盘下载 下载密码:txm9 最新下载链接地址: https://pan.baidu.com/s/1yxmwJqXt5E2EczP51aS-KQ 提取码: 3vg4 将MYOA.rar解压到磁盘根目录,如D:/MYOA。双击运行“安装.bat”即可 安装完成后浏览器访问地址http://127.0.0.1 外网访问服务器IP地址,如有端口IP后加端口,如:http://192.168.1.100:80 默认登录账号admin密码空 注意不要启动office_task服务 服务控制中心.bat可监控服务是否启动。MySQL5_OA,Office_Web必须启动,其他服务如不影响使用可不启用 安装完成后第一步修改单位名称 第二步 新建部门 新建用户 系统管理 – 界面设置 也可以自定义登录界面,例如把自己公司的LOGO替换原来图片。2017版登录界面主题文件在X:\MYOA\webroot\static\templates\2017_01,将logo.png修改为自己的即可。

离线安装ruby,以及发现版本信息显示不对问题

linux做Redis 集群,离线安装ruby出现问题及处理 1.离线安装ruby 在命令行中输入 ruby -v 在后面的安装过程中发现,啥时候安装已存在ruby,且由于版本比较低,无法满足后面项目中需要安装的redis gem的要求,,重新安装了ruby。 下载ruby-2.4.2.tar.gz压缩包 解压安装文件, tar -xvf ruby-2.4.2.tar.gz 进入文件夹, cd ruby-2.4.2 ,随后进行安装三部曲 配置, ./configure -prefix=/usr/local/ruby 编译, make 安装, make install 修改环境变量,$PATH ruby -v,存在版本信息且正确 [root@master ruby-2.4.2]# ruby -v ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] 2.离线安装rubygems 为了redis,需要先安装gem,rubygems安装就比较简单了 参考rubygems官网上介绍,https://rubygems.org/pages/download ,先下载rubygems安装文件 rubygems-2.7.3.tar 解压之后,会有rubygems-2.7.3目录,进入这个目录。 执行命令, ruby setup.rb 安装完成之后,输入命令, gem -v 会看到如下信息, 2.7.3 ,看到这些信息,就说明已经安装成功了。

凶险、罪恶还是自由?暗网到底是什么?

提起暗网,中文的读者对它的印象一般不太好,觉得里面充满了罪恶和犯罪。这些印象基本来自几篇热文,追根溯源,这几篇文章又是一两篇英文文章的改头换面和重新拼接。但是大概因为内容过于猎奇黑暗,给人留下的印象根深蒂固,以至于我在之前的文章提到“暗网更接近于互联网创始者们创造的那个网络”的时候,很多人留言骂我给犯罪分子洗地…看起来暗网在中文里面已经被默认等于罪恶了。 除此之外,也有很多人读过那些文章之后觉得疑点众多,也问过我这些文章可信度如何,以及暗网到底是什么。 要回答这个问题,不需要背景知识,只需要逻辑推理即可。总结那些文章的要点,大致是: 我们使用互联网只是表层网络,暗网的规模远远大于表层网络,甚至有几倍大。 暗网充满了恶性犯罪,贩卖军火、雇佣杀手、贩卖人口… 暗网隐藏的很深,普通人难以访问它。 这些观点本身就是矛盾的。如果3是真的,普通人难以访问它,那么这极少数人如何能创造一个规模更大的网络的?这是不合逻辑的。 如果去掉3,只留下1,2两条,那么就意味着暗网充满了恶性犯罪,并且有如此巨大的规模,岂不是说明我们身边危机四伏,每个人都在干着非法的事情,那么普通人遭遇恶性犯罪的数量岂不是比在朋友圈刷到猫照片的机会还大?这也不符合我们正常的生活体验。 为什么会出现这些矛盾?答案很简单。作者搞错了。 从第一篇持这种论调专心猎奇的英文文章开始,作者就搞混了好几个概念,没弄清楚 Darknet、Deep web、Dark web之间的区别。英文这几个词的样子非常相似,一不小心就会写错,混淆不意外。等变成了中文,情况就更糟糕了,Darknet和Dark web如果按照字面直译,都会被翻译成暗网,没法区分。那些四处抄袭和搬运的作者不知道历史渊源,很容易就把它们当作同一种东西,拼拼凑凑放到同一篇文章里面,这样混淆了之后倒是显得更加骇人听闻,阅读量自然不少,除了并不真实之外几乎没有缺点了。 在这篇文章里,我来从历史开始,试着来把这些名词的区别、存在的意义、风险说清楚。 一 Darknet 暗网 Darknet是这三个概念中最广泛一个,历史也最长。它的历史比我们今天使用的商用互联网还长远的多。众所周知,ARPANET是我们今天使用的互联网的前身,1969年开通的ARPANET实验网络,只是连接了西部的四个大学,见下图: 随后1970年东西海岸网络连通,一直到1975年,才把美国东西南北各家大学和研究机构连起来。在这个过程中,和ARPANET并行发展的网络还有很多,这个联网过程实际上是把各个已经存在的局域网按照固定协议连接到一起的过程。有一些没有来得及接入或者因为各种原因不想接入的现存网络,就被人们称作Darknet,也就是暗网。它最早的含义应该是在ARPANET这个主干网络上看不到它们,也连接不到它们。相当于在明面上的主干网络,它就显得“暗”了一些,这里面并无贬义。 图:ARPANET联网过程,左上角是1969年的状态,右下角是1975年的状态。 随着时间的发展,我们现在使用的互联网席卷世界。全球联网人数逐渐增加,人们开始利用电话线或者有线网络,通过一家商用互联网运营商接入互联网。但在这之外,仍然有很多其他网络存在,比如公司为了降低成本(早期的互联网服务费极其昂贵),自己建立局域网,供公司员工使用。为了方便员工在公司之外使用公司网上的资源,一些公司还设置了基于电话的拨号链接方式。这一样被算作暗网的一部分。 互联网继续发展,联网成本逐渐下降,永不断网成为可能。这时候设置一个自己的拨号接入系统就不那么必要了,拨号也很麻烦。于是大家开始把公司局域网也链接到了商用互联网上,让员工通过VPN等等方式连接到公司内部。基于VPN链接起来的虚拟网络,仍然被算作暗网。到今天,一些更小规模的公司已经不再维护自己的办公网络,也不再使用VPN。他们的办公系统都通过公开的互联网服务组件搭建,比如文档放在网盘,代码放在Github,沟通使用Slack或者干脆省事用微信…到这个阶段,企业应用和个人应用的界限变得模糊,这时候这种企业就不再依赖自己的局域网或者虚拟网了,他们脱离了暗网(Darknet)。 在办公需求之外,还有很多人不满意于目前商用互联网的发展模式,现在互联网的模式中有两个关键角色,一个是运营商负责网络接入(联通、电信…),另一个是服务商负责提供服务(微信、微博)。这两类关键角色构成了普通人使用互联网的路径,通过接入商联网,然后使用某个服务商提供的服务。 按照几十年前互联网创建时期的观念,现在这种模式是有问题的。它让本来是分布式的互联网变成了集中式。人们最早创建互联网,创建TCP/IP,是为了创建一种高稳定性系统,当年的说法是“就算部分节点被核打击摧毁,其余的节点仍然可以交换数据”。今天的商用互联网背道而驰,干掉接入商,大部分人就不再能联网,干掉服务商,大部分人就不知道能在网上做什么。 经典的互联网模式是每一台设备上都有自己的数据,联网的目的是交换数据,而不是到一个中心去发送和接受数据。用更形象一点的说法,联网的目的是我可以给你发送消息,但不是联网之后到微信发一条消息给你。于是世界各地都有人在号召建立所谓的DIY网络,就是临近的社区居民通过自己架设线路,或者使用无线中继的方式,大家自主联网,不通过运营商接入,也不接入互联网。这样的网络社区曾经在世界各大城市都存在过,但随着互联网的发展,越来越少的人愿意接受这么麻烦的方式,所以这样的社区一个个消亡了。到今天只在很少的几个城市还存在,比如旧金山,多伦多,蒙特利尔…都还存在小规模的“混合网络”,即互联网和私人网络混合接入的模式。 早期DIY网络的拥护者中很多是因为上网费用过于昂贵,现在参与者则很多是为了“网络中立”,网络中立是另外一个话题,这次先不展开讨论,只说一个案例。2005年,加拿大三大运营商之一的Telus封杀了加拿大电信行业工会下属的一个网站,理由是对方号召罢工,会影响用户的电信使用。这个事件引起了强烈的社会反映,人们关心于运营商是否可以按照自己的好恶封杀网站,如果可以的话,运营商岂不是成了互联网世界权力最大的公司?这个事件最终成为了奠定加拿大网络中立原则的里程碑之一,但它带来的额外思考是依赖运营商联网的模式是不是正确的,人们是不是应该维护一个完全不依赖运营商的自建网络。基于类似的担心,无数小规模的自建网络仍然存在和活跃,这些网络也都是暗网的一部分(Darknet)。 在运营商这个层面之上,人们还有更多的担心。比如,离开网盘我们是否还可以交换文件,离开微信我们是否还可以发送消息,离开几大搜索引擎我们是否还可以检索信息?按照现在商用互联网席卷一切的状态看,答案很可能是“不能”,至少对大多数人是不能。另外一些人为了避免对几大互联网服务商的依赖,开始寻找其他去中心网络的解决方案。比如在自己家里的NAS上搭建owncloud来代替网盘,用BT软件来和朋友分享大文件(注意BT是合法软件,它可以传递任何文件,而不是仅仅能用来下载盗版电影),自建聊天服务器…这些服务通常也建立在VPN连接的虚拟网络上。还有更高级的应用,一些朋友甚至通过VPN把自己家里的局域网和朋友家的连起来,互相利用对方的计算机做数据备份,访问对方局域网上的资源和协作。这个过程有点像过去ARPANET建立的过程,只不过没有物理联网的麻烦,而是在普通商用互联网上再建立一层虚拟网络完成的。在这些网络里面,服务提供者也是参与网络建设的成员,最理想的情况是所有参与者都负担一部分流量和存储,这样就形成了真正的去中心网络,不用担心一个中心被破坏之后损失数据或者导致服务停止。这是更符合最初互联网设计的模型。 今天还在使用和建立Darknet的人,大多数是极客。他们只是为了自己的方便和防备不时之需而架设这些网络,比如在我自己的案例里,商业服务很少能提供我需要的ZFS快照备份,我只能把我家的局域网和朋友家的连起来,使用各自局域网上运行的FreeBSD服务器互相保存快照备份。考虑到所有自建网络、基于VPN的应用,各种P2P文件分享应用,都算作Darknet的一部分,它承载的流量巨大并不奇怪,但这个流量巨大和犯罪活动没有关系。如果追究的细致一点的话,Darknet上最大的违法活动应该是下载盗版影视和软件,但这种活动在中文互联网太普遍了。 二 Deep web 深网 Deep web是另外一种划分方式。它跟Darknet有一部分重合,但关注的方向不一样。Deep web指那些不能被搜索引擎直接检索到的页面,这个词出现的比较晚,是通用搜索引擎普及之后的年代才有的。移动互联网发展之前,搜索引擎是最大的流量入口,在那个时代,人们甚至认为“在搜索引擎里面搜索不到的网页,就几乎可以被认为不存在了”。没有搜索引擎的指引,人们无法从天文数字的网页中找到自己所需的那个。于是因为各种原因无法被搜索引擎索引的页面,就构成了另外一个隐藏的世界。如果把被搜索引擎索引的页面看作表层网络,那么不能被检索的就是水面之下的深层网络,Deep web(深网)这个概念就来自这个意义。 就算在搜索引擎是最大的流量入口的年代,仍然有很多网站不愿意被搜索。有的是小型私人兴趣社区,不愿意被外人干扰,有的是技术原因,比如内容放在Flash里面或者完全用Javascript渲染,搜索引擎的爬虫无法解析,但站长也不想改版。另外一些是因为权限、安全、法律、利益等原因。比如前面说的那种运行在互联网上的办公系统,这种内容是需要对应的权限才能访问的,不该被无权限的人看到,也就不能被搜索引擎收录。如果真的不小心被收录了,那就是权限系统出漏洞了,匿名用户也可以浏览,这是重大安全事故。 出于利益的争端更有趣, 比如几乎所有的SNS系统都不愿意让搜索引擎检索,他们希望把用户留在自己的生态圈之内, 如果要检索内容,他们希望用户通过自己的站内搜索代替。Facebook通过设置默认权限来禁止Google检索它的大部分页面,twitter曾经和Google有协议,允许google索引它,但是到期之后协议就不再继续了。淘宝和天猫几年前禁止百度索引,一直到最近才开放了一小部分页面给百度…这些内容都没法被通用搜索引擎索引,都算是深网的一部分。 在搜索引擎发展的年代,网页逐渐替代了软件占有了更多内容,必须使用软件客户端访问的服务只占了很少一部分,搜索引擎没法索引这些软件中的内容,也不是太大问题。但在移动互联网之后,整个形势发生了变化,越来越多的内容被封闭在App之内,搜索引擎无法检索,这些App形成了一块块互相不连接的领地,传统的互联网Web的“页面-链接”体系完全崩溃了。最典型的例子比如微信朋友圈,上面的照片和文字都没法被搜索引擎检索,即使当事人希望其他人可以搜索到,也无能为力。这些内容也沉积在了深网中。 当然,前面所说的Darknet包含的绝大多数内容也同时属于深网,Darknet中很多内容甚至和互联网都是隔绝的,自然不可能被搜索引擎索引。 可见,搜索引擎能检索的内容,只是人类创造出来内容中很少的一部分。很多年前搜索引擎索引量一直在上升,越来越多的页面被搜索引擎收录。但是移动互联网发展起来之后,页面已经被App替代,这种索引量上升的势头明显放缓了。人们对搜索引擎使用的频率也在下降,到目前为止,搜索引擎还是检索信息和知识的重要方式,但未来会发展成什么样,很难预测。 三 Dark web 这个词在中文也被翻译做暗网,这是造成混淆的原因,所以关于Dark web,在本文中直接使用原词,不翻译 Dark web 和 Darknet 以及 Deep web都有一点点关联。但是也一样是完全不同的东西。它指的是那些通过特殊协议或者特殊授权才能访问的应用。这个范围相当大,它包括各种P2P服务,从BT到电驴甚至比特币之类的加密货币,又包括需要授权的VPN虚拟网络上的内容,还包括特殊的P2P服务建立的网站,比如洋葱路由或者Zeronet,几乎所有没法拿浏览器直接访问的东西都可以算进去。 Darknet这个概念主要强调网络层,Dark web指的是网络之上的应用。如果Dark net对应运营商,Dark web可以对应成互联网服务商。运行在Darknet上的服务,哪怕是一个普通页面,也可以算作Dark web。除此之外,Deep web里面很大一部分服务,也算Dark web,这三者的关系错综复杂又互相重叠。 Dark web的概念可以指很小的应用,小到在自己的VPS上装一个gitlab服务,和几个朋友共同开发一个业余项目,大到遍布全球的Tor洋葱路由,都可以算作Dark web。更有意思的是人们发明这个概念的时候,从来没想到全球互联网会被切分成几个部分这件事,按照今天的形式看,Dark web的概念已经超过了发明这个词时候的预期。比如中国大陆用户必须通过某些特殊软件才能访问Facebook之类的国外互联网服务,这些服务对于中国用户也可以算作Dark web。反过来,中国大量服务必须使用手机号注册不允许匿名访问,手机号又必须实名购买,对于其他国家的人来说,没办法用普通方法直接使用这些服务,于是这些服务也可以算Dark web…

Tor网络突破IP封锁,爬虫好搭档【入门手册】

本文地址:http://www.cnblogs.com/likeli/p/5719230.html 前言 本文不提供任何搭梯子之类的内容,我在这里仅仅讨论网络爬虫遇到的IP封杀,然后使用Tor如何对抗这种封杀。作为一种技术上的研究讨论。 场景 我们编写的网络爬虫全网采集的时候总会有一些网站有意识的保护自己的网站内容,以防止网络爬虫的抓取。常见的方式就是通过身份验证的方式来进行人机识别。也就是在登陆(查询)的入口增加或者加固防御。这些防御有那些呢?我目前见到的有:各种验证码、参数的加密、在前端JS挖坑、访问频率限制(IP黑名单)等。 其实前面的几种我们在某些情况下都是有办法解决的,我一一举例: 1、加密参数。其实老司机们都知道了,在客户端加密参数并没有什么卵用。因为爬虫完全可以将前端的js丢到一个游览器的内核环境中去执行js,这样的话,无论你怎么加密,都没有用,因为这和在游览器中运行没有什么区别,是无法进行人机识别的。 2、前端在Js脚本中挖坑。这是一些小聪明了,毕竟被抓取的网站方是这场战争的游戏规则制定者,他们能够自己制定规则,然后在没有什么漏洞的情况下,爬虫只能按照对方指定的规则一条条的来,一个坎一个坎的去跨。 这种情况下,网站开发人员在一大堆的js中藏着一小段预警js作为地雷。毕竟一般情况下,爬虫都是直接请求后得到的响应是一段html的文本,并不会执行其中的js。那么这样就区分出来了,网站方可以在页面加载后执行一段js,这段js不用和服务器通信,就是默默的执行。若是这段js执行了,说明访问者很可能是人,若是没有执行,那么这个访问真绝对是爬虫了。我们在正文请求中附带上的cookie中加上一个特定的标记。告诉服务器这个请求不是人发起的。服务器得到这个消息后,针对IP标记,但是这次请求是允许通过的(隐藏我们的判断依据)。下次或者这个IP访问几次后,就将这个IP拉入黑名单。 3、验证码,这东西是主要防御手段,这里不多说,我博客里面也有一篇关于这个文章。但是,只要技术能力足够,验证码还是会被突破的。君不见,12306验证码防御也没什么用。 4、IP黑名单,这个是依赖于上面的一个后台防御策略。但是再某种情况下,这种策略确实很有效,而且无解。 比如:有一个查询类的网站,通过限制IP的访问次数、频率就完全可以封锁或者限制爬虫,因为爬虫的意义就是自动化的、高效的得到数据。 IP黑名单突破的方案 针对于采用黑名单的网站,我们可以使用的策略就是代理了,我们用各种方式弄到一大批的代理IP,然后通过使用这些代理IP去发起请求,IP被封锁了,就换下一个。 我们的主题,Tor网络也就用在这里了。 首先来科普一下: 关于Tor网络 官网:https://www.torproject.org/ Tor是什么 Tor是互联网上用于保护您隐私最有力的工具之一,但是时至今日仍有许多人往往认为Tor是一个终端加密工具。事实上,Tor是用来匿名浏览网页和邮件发送(并非是邮件内容加密)的。今天,我们要讨论一下Tor的是如何工作的、它做什么、不会做什么,以及我们该如何正确地使用它。 Tor的工作原理是这样的 当你通过Tor发送邮件时, tor会使用一种称为“洋葱路由”的加密技术通过网络随机生成的过程传送邮件。这有点像在一叠信中放了一封密信。网络中的每个节点都会解密消息(打开的最外信封),然后发送内部加密的内容(内密封的信封)至其下一个地址。这导致如果单看一个节点是看不了信的全部内容,并且该消息的传送路径难以追踪。 在Windows上使用Tor windows上安装tor很简单,去Tor的官网下载安装洋葱游览器就可以了。 当然,我们可以只安装Tor核心,不安装任何其他附属,然后我们去找个Tor控制器,去操作Tor就可以了。 我这里有两个版本Tor控制器,Windows的Vidalia和OS X版本的Arm(Anonymizing Relay Monitor)这东西就Python开发的,可以完成Vidalia的绝大部分功能。 windows上的Vidalia: Mac上的Arm: 目前我使用的也就是在Mac上操作的Arm。我也是重点说Arm的。因为Window下的Tor通过C#或者Python控制都不行,不得已的情况下,换到了OS X/Linux的环境下来控制Tor。 安装Tor、Arm 首先我们得下载安装了,好消息是,Arm和Tor大部分的包管理器都有,我们可以直接下载。通过包管理器下载后,会自动安装,并完成初始化配置。 例如我在Mac上的安装以及配置: brew install tor brew install arm 我们另外需要安装Privoxy,需要通过Privoxy来将Socks5转换成Http。 brew install Privoxy 最后,我们还需要一个前置代理,因为Tor网络,在国内是不能访问的。所以我们需要一个在国外的前置代理,目前我自己已经搭建好了一个位于加拿大的VPN,这里可以直接用的。 配置Tor、Arm 我们需要做一些配置,我先给一张我的配置图: 这是从已经配置好的Arm看到的。如上图,绿色的字体就是我给torrc配置文件增加的内容。 我们修改配置就是在 /Users/ Likeli/.arm/torrc 路径(Mac下的路径)。完成以上修改。 关于重要参数的说明: 参数 说明 ControlPort 控制程序访问的端口(重要) Socks5Proxy 前置代理端口 SocksProt 外部程序访问Tor的端口 MaxCircuitDirtiness 自动切换Identity的时间间隔 除了这些参数,其实还有很多的备选参数,详细说明请查看tor帮助文档,以上配置也是我从tor的官方帮助文档中找到的。 man tor 好了,配置完成了,现在去出去启动Arm,完成初始化。