存档在 2015年9月

怎样部署织梦dedecms

2015年9月24日

【安装】

下载解压:

下载:http://www.dedecms.com/products/dedecms/downloads/

wget http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz
tar -zxvf DedeCMS-V5.7-UTF8-SP2.tar.gz && mv DedeCMS-V5.7-UTF8-SP2/uploads portal && rm -rf DedeCMS-V5.7-UTF8-SP2

目录权限:

改变主目录权限为777

chmod 777 portal

改变以下所有子目录的权限为777

cd portal
chmod -R 777 plus dede data a install special uploads

【安全】

DEDEDATA设置

1. 将data这个文件夹移动到程序上一层目录:与dedecms系统目录同级;
2. 修改系统目录/include/common.inc.php文件的第24行,修改DEDEDATA常量为新的目录。
3. 进入系统后台,在系统配置中修改模板缓存目录tplcache目录为你相对的目录,比如/../db/data/tplcache
4. 修改网站的首页文件index.php中第9行的/data/common.inc.php也为相对的目录,比如/../db/data/common.inc.php

【报错】

undefined function XSSClean()

症状是无法编辑软件,页面空白。奇怪的是新安装的没有此类问题。

Fatal error: Call to undefined function XSSClean() in dede/soft_edit.php on line 81

解决:注释掉81行

//    $arcRow=XSSClean($arcRow);$addRow=XSSClean($addRow);

参考:http://www.ucbug.com/jiaocheng/75161.html
参考:http://www.51zixuewang.com/article/jianzhanjingyan/zhimengdedecmsjiaocheng/228877.html
参考:https://www.douban.com/note/323262360/

需求:修改文档标题最大长度

在控制面板修改文档标题最大长度参数后,比如设置为100,需要手工修改数据表,修改简略标题的长度。

DEDECMS中的“简略标题”默认长度为36个字符,即18个汉字。

1. 修改数据库字段设置,找到dede_archives表,再找到shorttitle字段,将值由36修改为100。

2. 修改管理后台目录(默认目录为/dede/)下的核心文件,批量替换里面的源代码,把36修改为100。

archives_add.php
archives_do.php
archives_edit.php
article_add.php
article_edit.php
$shorttitle = cn_substrR($shorttitle,36);

【需求】

需求:希望织梦dedecms的文章ID从指定数字开始,至少8个数字,那么从10000000,预设容量900万条

方法:

1. 发布一篇文章
2. 在phpMyAdmin中打开dede_archives表、dede_arctiny表、dede_addonarticle表中此文章的ID为10000000。
3. 发布第二篇文章的ID即为100001。此时删除第一篇文章。

参考:http://www.55of.com/cms/dedecms/188
参考:http://www.bkjia.com/dedecms/339121

需求:希望织梦dedecms的文章ID在指定区间批量删除

在后台一条条的删除文章的话实在太慢了,可以使用SQL批量删除aid文章。

DELETE FROM dede_addonarticle_17 WHERE aid >= 10000000 and aid <=10000035;
DELETE FROM dede_arctiny WHERE id >= 10000000 and aid <=10000035;
DELETE FROM dede_archives WHERE id >= 10000000 and aid <=10000035;

参考:http://jingyan.baidu.com/article/414eccf63ab2e96b421f0a47.html

【安全设置】

常规设置

1. 修改管理目录dede的目录名称

2. 后台管理员不要使用admin或者其他易被猜到的账号

3. 使用最新版的dede cms建站,留意后台的升级信息

4. 如果你用不到会员功能,在系统设置里面关闭会员功能;或者直接请删除member这个文件夹;如果必须使用,请安装360安全补丁。

5. 织梦可删除目录列表:member会员功能,special专题功能,install安装程序(必删),company企业模块,plus\guestbook留言板,友情链接,以及其他模块一般用不上的都可以不安装或删除。总之就是减少别人往网站提交信息的可能。

6. DEDE后台管理目录下的以下文件是后台文件管理器(这俩个功能最多余,也最影响安全,许多HACK都是通过它来挂马的。它简直就是小型挂马器,上传编辑木马忒方便了。一般用不上统统删除)。

file_manage_control.php
file_manage_main.php
file_manage_view.php
media_add.php
media_edit.php
media_main.php

5. 不需要SQL命令运行器的将dede/sys_sql_query.php 文件删除。避免HACK利用。不需要tag功能请将根目录下的tag.php删除。不需要顶一下、踩一下功能的请将plus目录下的digg_ajax.php和digg_frame.php删除。

6. 将data、templets、uploads、a或html目录, 设置可读写,不可执行的权限

7. 将include、member、plus、后台管理目录 设置为可执行脚本,可读,但不可写入(安装了附加模块的,book、ask、company、group 目录同样如此设置)。

8. 文件夹权限不要设置777,data文件夹下的common.inc.php文件设置644属性等,

安装360检测中心提供的dedecms安全修复补丁

本安全补丁共修复12个高危漏洞,并且集成了360网站安全检测的后门查杀和漏洞修复功能。仅适合织梦DedeCMS v5.7 SP1正式版 (2013-07-15发布),对不满足此版本的用户,可以先去官方先升级至这个版本,然后使用补丁包覆盖安装。

注意,先验证网站所有权,再下载补丁包。

下载地址:http://webscan.360.cn/dedecms/about

安装360webscan后,因为需要修改“dede”目录为其他文件夹名,在系统管理时会出现报错:“输入内容存在危险字符,安全起见,已被本站拦截”。此时,需要修改360safe文件夹中webscan_cache.php代码的16行,把单引号之间的内容修改为当前后台文件夹名:

$webscan_white_directory='admin|\/dede\/'

参考:http://www.ithov.com/master/128947.shtml

【附件服务器设置】

参考:http://down.admin5.com/edu/dedecms/76542.html
参考:http://down.admin5.com/edu/dedecms/76542.html

怎样查看CentOS服务器硬盘和内存使用情况

2015年9月18日

1. 查看CentOS服务器硬盘情况

查看有几块硬盘

df -lh

输出:

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                     6.5G  692M  5.5G  12% /
tmpfs                 764M     0  764M   0% /dev/shm
/dev/sda1             485M   30M  430M   7% /boot

有一个sda1的scsi硬盘分区,还有一个lvs的卷。这里可以很显示的看出各硬盘的分区、挂载情况,还能看到分区的空间使用情况。

查看硬盘每个分区的详细情况

fdisk -l

输出:

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003bc52

  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        1306     9972736   8e  Linux LVM

Disk /dev/mapper/VolGroup-lv_root: 6987 MB, 6987710464 bytes
255 heads, 63 sectors/track, 849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/VolGroup-lv_swap: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

fdisk -l默认是查看所有的硬盘,如果只想查看sda盘的分区情况,可以使用命令:

fdisk -l /dev/sda

这样就不会列出VolGroup-lv卷的信息了。

输出:

I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

查看磁盘IO状态

iostat -d -x -k 1 10

查看某个目录占用空间的大小

当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢?

du -sh [dirname|filename]

以易读的格式显示指定目录或文件的大小,-s选项指定对于目录不详细显示每个子目录或文件的大小。

显示前10个占用空间最大的文件或目录:

du -s * | sort -nr | head

查看哪个目录占用了这么多的磁盘,如果找到后,依次进入那个目录,利用相同的办法,就能定位到文件上去。

用root到/目录下去利用命令:

du -s -h ./*

2. 查看Linux服务器内存使用情况

free命令

free -m

输出:

            total       used       free     shared    buffers     cached
Mem:          1526        182       1344          0         16         99
-/+ buffers/cache:         65       1460
Swap:         3071          0       3071

很清晰明白的显示出了总内存多少,已使用多少,还剩下多少。

top命令

top

输出:

Mem:   1563088k total,   186784k used,  1376304k free,    17444k buffers
Swap:  3145720k total,        0k used,  3145720k free,   101980k cached

vmstat命令

vmstat

输出:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 1376320  17452 101980    0    0     1     1    4    5  0  0 100  0  0

参考资料:《linux 下查找大于100M的文件 》

怎样使用火车头采集微信文章

2015年9月17日

意图:

微信公众号如何采集?比如 http://weixin.sogou.com/gzh?openid=oIWsFtyyNse80FUaTBNS00eEpg-0

结果:

仅在火车头论坛找到了采集指定微信文章的采集规则。但未找到有效获取文章列表的方法。

变通:

从知乎的一篇文章《如何收藏或保存微信公众帐号内的文章?》中看到:传送门 http://chuansong.me
如果你关注的账号传送门上没有的话,你可以在这里提交这个账号:http://chuansong.me/submit/account

那么,在没有分析出有效采集微信文章列表的规则之前,可以利用这个传送门服务,以之为桥梁,直接采集传送门中的指定微信公众号。

从V2EX的一篇文章《微信公众号历史文章获取?》中看到《微信公众号抓取思路》

微信公众号存在不少精彩的文章,如果善于挖掘,可以得到不少的收获。但由于微信对PC端的支持并不友好,虽然有搜狗搜索可以用,但其结果仍然不全,一些公众号发的不是文章类型的只是一段话,搜狗就不收录。想要得到一个账号所有的文章,还是要从爬虫着手。网上对于微信公众号文章爬取的方法几乎没有介绍,不过有几个网站,比如传送门就做出来了。这就告诉我们这个目标是可以达到的。废话不多说,直入主题。 要想得到一个公众号发送的所有文章,需要从微信手机端入手。点击公众号右上角小人图标,会有查看历史消息的链接。点了之后可查看所有历史文章。所以自然要从这里入手了。上抓包工具,Fiddler4,手机和电脑接入同一网络,手机wlan设置代理,指向电脑的ip地址,端口默认8888,这样在电脑上就可以监听手机的http流量了。通过抓包,在点击‘查看历史消息’选项时,请求的地址是:

抓包1

通过对多个账号进行抓包分析,可以确定biz这个14位的字符串是每个公众号的“id”,uin似乎与访问者有关,key也和所访问的公众号有关,可以在下面的抓取中得到这两个参数,其他的查询参数都可以去掉。 所以,必须得到三个参数才可以得到文章列表。这三个参数biz最容易获得,在搜狗的微信平台,搜索目标公众号,会有对应的文章列表,连接到相应的文章页面。解析文章列表,即可得到公共账号的biz。可以通过请求http://weixin.sogou.com/weixin?query=,填入目标账号名称,返回的结果里解析最新文章的url,里面包含biz。当然,模糊搜索会出现多个候选账号,这个就比较难办了。 现在,已知biz,如何继续?我曾经也困扰了好久,也算是偶然发现的。电脑登陆微信,在手机上访问某个公众号的查看历史消息页面,点击右上角,发送给朋友,发送给文件助手即可,电脑上查看。 如图:

似乎看到连接了,打开,果然跳转到了文章列表的页面!查看元素,这个存在span标签内,仔细观察,才发现坑爹啊,和刚才抓包看到的url是一样的!继续寻找,这个span是a标签的子元素,看这个a标签的href:

a

加上https://wx.qq.com的前缀,就可以访问了,最后301跳转到了span的内容那个url。多看几个不同的公众号,可以发现a标签的内容基本一样,不同的只是biz而已。所以可以把这个url记为raw_url,每次请求时,用不同的biz替换即可。当然,要带上ua,cookie的header。用request.get(url,headers=m_header,verify=False),因为请求的是https域,所以要加上verify=False,返回的内容文章列表的那个页面。分析那个页面,即可以找到uin,key,

uin

可以用正则表达式提取出来。紧接着下面就是这个页面的msgList,类似json的文本,当前页面就是通过这里的文本渲染的。

msglist

可以用正则提取出来直接解析出来,然后用json.loads方法就可以得到dict,里面的信息包括content_url,文章发表的datetime时间戳,摘要信息,文章的id编号mid,还有是否是一次发多篇is_multi等。 鼠标向下滚动,可以看到动态请求更久远的文章,抓包可得,是通过json返回的。请求的url就是类似

json

这种的,前面获取的参数就都派上用场了。只要这几个参数就可以抓取了,后面几个参数不要也可以。要获得一个公众号的全部文章,可以将frommsgid改到比他最新文章的id大一点的数字(实验证明若刚好取最新文章的id,则会忽略最新的那篇),count值设置大一点,比如5000,基本上就会把所有文章信息都返回了。 根据返回的json,从中解析出文章的url,然后就可以去爬取文章了,这个比较常规,貌似连cookie都不用带,就不赘述了。

接下来再说说获取文章点赞数,阅读数的思路。从电脑网页访问是得不到这些数据的,只能从手机上获得。需要的参数还是uin,biz,key,mid以及idx。其中idx是这篇文章所在的编号,比如一个人一天发了3篇文章,idx就分别对应1,2,3。这几个参数的名称可能有些不一样,有时叫mid,有时是appmsgid,是从这样的url里获得的http://mp.weixin.qq.com/s?__biz=MzA3NTEzMTUwNA==&mid=206110593&idx=1&sn=bbebeb601bec2cd9bb576f31601774c5&scene=4#wechat_redirect,可能要进行一些异常处理。提交的地址是http://mp.weixin.qq.com/mp/getappmsgext,参数是上面提到的,提交的header要伪装成手机的,主要是ua,host要不要用我忘记了,之前的代码里是注释掉这句的, readnum_header={‘User-Agent’:’Mozilla/5.0 (Linux; Android 4.4.2; sdk Build/KK) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/6.0.0.61_r920612.501 NetType/epc.tmobile.com’,#’Host’:’mp.weixin.qq.com’},然后返回的还是json,进行解析即可。

以上即是爬取的大致思路。

另外一篇爬虫策略分析《微信公众平台账号内容搜索引擎爬取技术实现》

有人问:游迹语音助手中的“微信精选”和 www.lewuxian.com 怎样实现对微信公众平台内容进行爬取的,不会是像诸多所谓的微信内容聚合站人工维护的吧。
首先可以肯定的是:游迹团队不是白富美,没有魅力与微信团队勾搭上关系,因此无法获得官方未开放的接口来实现公众号的搜索及爬取。游迹语音助手及 www.lewuxian.com 中所有与微信公众账号相关的内容都是爬虫自动化完成的,这里大致分享一下思路。
由于微信尚未有公开的搜索接口供第三方的搜索引擎爬取,而且微信也未提供官方权威的微信公众号的导航网站或推荐服务,因此指望完成对所有微信公众号的爬取并不现实,只能对指定微信公众号的内容进行爬取。
因此微信公众号的爬取主要分为如下一些步骤:
第一步就是获得需要爬取的微信公众号列表
微信公众号列表可以参考那些微信导航站的做法,人工维护维护行业精品微信号列表。当然也可以直接爬取那些微信导航站,但质量很差。好在真正高质量值得爬取微信公众号也就至多上万个。
第二部就是要获取每一个微信公众号的内容入口页面。
随便留意一下某个微信公众号,会发现每个微信公众号的“查看历史消息”中有此公众号已发布的所有微信内容,剩下的问题是怎样获取这个地址。
聪明的程序猿们肯定会通过抓包、反编译等手段来获取此入口地址。好消息是要获取此微信公众号的入口地址并不复杂,你会欣喜发现此入口地址是一个普通的网页。坏消息是:当你多测试一下,你会悲剧地发现:
1)、此入口地址并不是固定不变的,一天左右就会变化的,主要是里面的key值。因此指望通过人工手工抓包一劳永逸地获取的地址并无太多实用价值
2)、此入口页面对未关注的用户只能看第一页,需要关注后才能看后续页面,要获取后续页面,只能关注此账号,但要人工关注上万个来自更多账号的关注并不现实
3)、微信对一个账号关注的公众号数是有上限限制的
应对此难题最一劳永逸的方案当然是反编译代码,获取微信的通信协议,但就研究结果来看,成本过高,破解的可能性也不大。游迹团队对此也无兴趣。
剩下比较靠谱、可行的方案就是:怎样在需要爬取时候能够获取指定的微信公众号的入口页面的实际地址,然后去爬取其内容;
那怎样实现以上方案呢?具体的方案,你懂的!
概括一下方案:
1)、获得需要爬取的微信公众号列表
2)、自动化获取微信公众号的入口页面实际地址,实施爬取

搜狗微信搜索的URL分析

微信公众号主页URL:http://weixin.sogou.com/gzh?openid=oIWsFt_rkSTCP-ca8pcMNdwjfk8g
列表页微信文章URL:http://weixin.sogou.com/websearch/art.jsp?sg=CBf80b2xkgbZeHWfPcy0uro5n0c0bmkV68ysB1uPDvIFgw3EvCrhMXnKgJvNSBvR99gN6vRgr4_3tZ1-6xkNq_mQRTCQgxJdMbhypLjOyj3g0XV5A2kz-ineanHc8EgDpKupsNTn9TZa8i_hvC38eg..&url=p0OVDH8R4SHyUySb8E88hkJm8GF_McJfBfynRTbN8wh4CimdevN_HV3nFXwSqVGoM-zqhvKlj3fm2EZ3L4U5LGQ3JxMQ3374tc8UKS9o9c4m48dpVZls4BiUNFGblR-XVdhrZ2fbKwlYy-5x5In7jJFmExjqCxhpkyjFvwP6PuGcQ64lGQ2ZDMuqxplQrsbk
实际微信文章URL:http://mp.weixin.qq.com/s?__biz=MzA5NjM0MjMzMQ==&mid=210646739&idx=1&sn=1f623929befc11cd9584c7722ccf9658&3rd=MzA3MDU4NTYzMw==&scene=6#rd

采集微信文章的规则分析

方案下载:

方案A. http://bbs.locoy.com/forum.php?mod=viewthread&tid=140609

方案B. http://bbs.locoy.com/forum.php?mod=viewthread&tid=138973

参考C. http://bbs.locoy.com/forum.php?mod=viewthread&tid=140421

这个规则的格式是.ljobx,是采集规则文件。

导入火车头方法,右键选中分组,弹出对话框,点击最下方“导入任务到该分组”。参考《9SiR火车头采集器教程:[2]怎样导入规则》

采集规则的制作:

参考:《dz3.0免登陆接口使用教程》官方的使用接口:http://faq.locoy.com/q-804

内容采集规则标签务必等于或者多于发布接口的标签。

参考:《添加多级网址之手动填写链接地址规则》 http://faq.locoy.com/q-800

参考:《在线发布模块制作教程》 http://faq.locoy.com/q-726

参考:用抓包工具分析一下 http://www.locoy.com/Down/RelatedSoft/Fiddler

参考:http://bbs.locoy.com/forum.php?mod=viewthread&tid=137418&highlight=%E5%BE%AE%E4%BF%A1

1、可以搜索指定微信公众号的内容;
2、可以搜索包含关键词的微信文章(不指定公众号);

结果页的代码同样是被加密了,列表页没有上一页下一页代码,只有“查看更多”——

<div class="p-more" style="display:none;" id="wxmore"><a href="javascript:"><span>查看更多</span></a></div>

所以难点有两个,一个是解密,看到源代码,能够找到列表(采集源),第二个是能不断的翻页直到结束

下一页不需要从源码中获取哈,用批量页码即可。

怎样使用UltraEdit+正则表达式处理文本

2015年9月16日

【介绍】

UltraEdit是一款功能强大十六进制文本代码编辑器,支持C、Objective C、Javascript、XML、PHP、Perl、Python等多种编程语言,软件附有HTML标签颜色显示、搜寻替换以及无限制的还原功能。

【下载】

ultraedit-32 v23.0.0.59 烈火汉化绿色版
下载:https://www.cr173.com/soft/2315.html

ultraedit64位破解版 v25.10.0.62 中文版
下载:https://www.cr173.com/soft/170525.html

文本比较工具(UltraCompare Pro) v18.0.0.80 绿色汉化版
下载:https://www.cr173.com/soft/9631.html

Mac十六进制文本编辑器(UltraEdit) v18.00.0.22 官方最新版
下载:https://www.cr173.com/mac/123764.html

【使用】

用UltraEdit+正则表达式删除空行

1. UltraEdit打开文件,选择搜素(Search)菜单的替换(Replace)命令。
2. 在替换对话框中,选中正则表达式(Regular Exp ression)复选框,并在查找中输入:%[ ^t]++^p,留心 ^t之前有空格。该表达式字符意思与EditPlus的相对应。
3. 单击开始按钮,实行替换删除空行。

怎样部署DNS软件

2015年9月15日

【介绍】

DNS(domain name system)存储和关联域名的多组信息,最重要的是将域名与IP关联、将域名与邮件服务器关联。

参考:http://amon.org/dns-faq

【源码】

Knot DNS:

Knot DNS由捷克共和国国家顶级域.CZ注册管理局CZNIC对外发布,是一款高性能DNS服务器软件,支持所有DNS系统的关键特性,包括区传输、动态更新以及 DNSSEC等。

官网:http://www.knot-dns.cz
下载:https://www.knot-dns.cz/pages/download
介绍:https://en.wikipedia.org/wiki/Knot_DNS

以下是多个开源的DNS服务器及前端项目:

DNS服务器开源项目

BIND (Berkeley Internet Name Domain) is an implementation of the Domain Name System (DNS) protocols and provides an openly redistributable reference implementation of the major components of the Domain Name System.

Unbound:一个运行在 Linux 平台上的有效的、递归的、可缓存的的DNS解决方案。(Last Update: 2013-03-21)

DNSPod-SR(DNSPod Security Recursive DNS Server) :一个运行在 Linux 平台上的高性能的递归 DNS 服务器软件,具备高性能、高负载、易扩展的优势。

djbdns: a simple and secure DNS implementation created by Daniel J. Bernstein due to his frustrations with repeated BIND security holes.

dents:a server implementation of the Internet’s Domain Name System with a focus on security, maintability and extensibility via modules.

Xyria:DNSd:a high performance DNS server that supports only the most important features and resource records while being extremely fast and secure. It also supports round-robin load balancing.