kuaipan_uploader开发分享

390

PS:将原来的一篇文章拆开了,上篇是安装使用讲解,这篇是开发过程讲解。

以前使用dropbox的linux客户端备份VPS上的文件和数据,但是近来dorpbox在国内越来越难访问,加上dropbox本身的容量只有几G,于是有了自己动刀写一个网盘的客户端,首先想到的是百度网盘,2T的巨大容量肯定是够用了!

没想到这个决定却是悲剧的开始,按照百度PCS的API文档写了半天,没想到PCS开通居然审核了一周多还不通过! 联系客服,没想到他们的PCS API已经不审核新的申请了!再次吐槽下,你不审核,申请的时候就不能给个提示么!!! 遂放弃!

然后就想到了还是用金山快盘吧,前段时间刚被迅雷收购,速度方面应该是没有问题。找到金山快盘的官方开放平台,看了看文档似乎是…有点麻烦啊。不过本着有难度才有挑战的原则,还是开搞了。下面介绍下开发过程中遇到的一些问题。

首先就是快盘的授权机制,本来是不太复杂,但是它的授权流程签名并不支持PLAINTEXT明文文本格式,只支持了一个HMAC-SHA1加密方式。为了处理这个签名倒是走了一些弯路。

拿到授权token的过程可以总结为三歩走:

  1. 获取未授权的临时 token;
  2. 用户登陆并授权你的应用;
  3. 根据临时 token换取真实的 access_token。

图示如下:

授权流程

 

 

 

 

 

 

在每次请求中,下面几个参数是必须的

Name Required Type and Limit Description
oauth_consumer_key Y string 第1步的 consumer_key
oauth_signature Y string 本次请求的签名,生成方法请参考附录-签名生成算法
oauth_timestamp Y int 时间戳,正整数,和标准时间不超过5分钟
oauth_nonce Y string [ 0-9A-Za-z_ ]随机字符串,长度小于32字节。每次请求请使用不同的nonce

oauth_consumer_key可以在你创建应用的时候拿到,oauth_timestamp为标准的unix时间戳格式,oauth_nonce每次都生成一个随机数,这几个参数都非常好处理,主要就是oauth_signature这个费些周章。

官方的OAuth签名生成讲的比较具体,其实获取签名的方式也非常简单:

  • 计算串基
  • 根据串基按HMAC-SHA1获取签名并使用bash64和url_encode 转码

生成签名的时候,如果是申请request_token 那么HMAC_SHA1加密的key 就是你的consumer_secret+&,其他都是consumer_secret+&+oauth_token_secret!

Linux shell中处理url_encode 没有太好的办法,我索性就写了一个函数用sed处理了,代码如下:

#url encode
function url_encode
{

	url=$1
	echo -n $(echo -n "$url" | sed 's/\%/\%25/g'|sed 's/&/\%26/g' |sed 's/:/\%3A/g' |sed 's/\//\%2F/g'| sed 's/=/\%3D/g' |sed 's/ /\%20/g' |sed 's/@/\%40/g' |sed 's/+/\%2B/g' |sed 's/\*/\%2A/g')
	
}

拼接字符串基可归结为:请求方式&url_encode(请求URL)&(url_encode(参数1+参数2… ))

使用bash获取签名处理方法如下:

function get_signature
{
	method=$1
	url=$2
	data=$3
	token_secret=$4
	baseUrl="$1&$(url_encode "$2")&$(url_encode "$3")"
	signature=$(echo -n $baseUrl | openssl dgst -sha1 -binary -hmac "$APP_CONSUMER_SECRET&$token_secret" |base64)
	
	echo -n $(url_encode $signature)
}

《阅读全文…》

linux版快盘上传下载脚本

1,378

PS:将脚本的开发过程移动到了这里。想了解下开发步骤的可以参考~~

安装使用

此脚本适用于大部分bash环境,已经在cygwin,ubuntu14.04,debian,centos6,mac-osx等环境通过测试。

1.依赖项
使用此程序前请确认你的Linux或者Cygwin支持如下命令:

curl sed awk basename date grep tr od openssl base64

2.配置

如果你想使用自己的app_key你需要首先注册一个金山快盘账号,然后到这里地址创建一个你自己的应用并把得到的 consumer_key、consumer_secret填写到脚本相应位置。
当然此步骤可以略过,你可以直接使用脚本中填写好的consumer_key、consumer_secret,我创建的应用名称all4fun.

3.安装

wget https://github.com/wujiwh/kuaipan_uploader/archive/master.zip
unzip master.zip
cd kuaipan_uploader-master
#或者 :
git clone https://github.com/wujiwh/kuaipan_uploader.git
cd kuaipan_uploader
#上面两种方式选择一种即可
#赋予脚本执行权限并执行
chmod a+x kuaipan_uploader.sh
./kuaipan_uploader.sh

然后根据提示完成API的授权流程,得到授权Token。脚本会自动保存得到的授权信息到CONFIG_FILE 变量对应配置文件,默认为~/.kuaipan_upload.conf 

4.使用说明

KuaiPan Uploader v1.1.0
wangheng - wujiwh@gmail.com

Usage: /usr/bin/kuaipan COMMAND [PARAMETERS]...

Commands:
         upload   [local file]  <remote file>
         download [remote file] <local file>
         delete   [remote file/remote dir]
         list     <remote dir>
         info
         relink

For more informations, please visit  http://wangheng.org.

其中[XXX]内的为必填参数,<XXX>内的为可选参数

比如执行 ./kuaipan_uploader.sh upload a.txt

后面的<remote file>可以不填,不填写的话,默认上传到网盘根目录或者应用程序根目录的同名文件。 (跟你创建应用的时候选择的选项有关)

其他,下载和删除都是类似如上…

  • 注意:如果上传到远程某个目录内的话,请务必保证此目录已存在!

执行 ./kuaipan_uploader.sh info 可以查看网盘的用户名,总容量和可用容量。

执行 ./kuaipan_uploader.sh list 可以查看网盘内已经存在的文件以及目录(非结构化)。

执行 ./kuaipan_uploader.sh relink 可以删除网盘授权信息并重新授权

5、卸载

此工具为绿色软件,使用时候复制到执行目录并赋予执行权限即可。

如果想卸载删除此工具,请连带删除 CONFIG_FILE 变量后面的配置文件,默认为~/.kuaipan_upload.conf 

许可证

Kuaipan Uploader 基于GPL第二版或以后版本发布。详见LICENSE文件

项目开源在我的Githubhttps://github.com/wujiwh/kuaipan_uploader

ubuntu 14.04安装配置denyhosts

365

DenyHosts是使用Python语言写的一个程序,它会分析sshd的日志文件(/var/log/auth.log*),当发现大量重复的攻击时会记录IP到/etc/hosts.deny文件,从而达到自动屏攻击者IP的功能。

目前官网最新版本是2.10,记得以前的ubuntu版本(<=12.04LTS)中好像直接apt-get install denyhosts 就可以了,在最新的发行版不知为何不见了。

安装

你可以前往官网http://sourceforge.net/projects/denyhost/ 选择一个你喜欢的版本下载,或者直接运行下面的命令下载。

cd /tmp/ && wget http://jaist.dl.sourceforge.net/project/denyhost/denyhost-2.10/denyhosts-2.10.tar.gz
#解压
tar xzvf denyhosts-2.10.tar.gz
#切换到目录
cd denyhosts
#安装
sudo python setup.py install

《阅读全文…》

1,592

wiring Pi 是专门为树莓派打造的类似于arduino下的wiring驱动库,安装好这个库后可以直接调用函数配置和控制GPIO功能。

我买的树莓派B+版本,如图:

raspberry_b+_version

可见共有个40pin的扩展 gpio,电源IO包含3.3v  5v  ,接口定义如下图所示:

gpio_detail

一、首先我们先安装开发环境

#首先安装依赖包
 sudo apt-get install libi2c-dev
 sudo apt-get install git-core
#获取安装包
 git clone git://git.drogon.net/wiringPi
 cd wiringPi
 git pull origin
#切换到编译目录
 cd wiringPi/
#编译并安装
 ./build
#检查安装
 gpio -v
 gpio readall

执行完 gpio readall 会显示当前板子的接口定义!如下图:

《阅读全文…》

写博客免不了贴代码,但是每次使用syntaxhighlighter 贴代码弹出的窗体总是慢的要死,加上wordpress本来也不快,卡上加卡终于无法忍受。

wordpress现在越来越臃肿常常打扰我的思路,这也是我平时经常随手将一些笔记直接扔到了vimwiki中的缘由。

查看了一下网络请求,果然又是google font的问题。好吧,活在我大天朝,只好逆来顺受了。

难道每次贴个代码都要等四五十秒。。。还是自己开刀改一下网站插件吧,祭出神器chrome网页debug工具,一顿调试之后找到原来是在tiny_mce_popup.js 这个文件的65行出现请求超时,跟进去找到对应的css 是这个

wp-includes/js/tinymce/plugins/compat3x/css/dialog.css

编辑器打开,果然啊,第一行就是:

@import url(//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600&subset=latin-ext,latin);

/* Generic */
body {
font-family: "Open Sans", sans-serif;
font-size:13px;
background:#fcfcfc;
padding:0;
margin:8px 8px 0 8px;
}

找到问题就好办了,删掉第一行,将Sans字体改成Consolas,这下次终于顺畅了!

《阅读全文…》