my blog my blog

Category: 网络杂记
KDJ随机指标学习

 

计算方法

KDJ的计算比较复杂,首先要计算周期(n日、n周等)的RSV值,即未成熟随机指标值,然后再计算K值、D值、J值等。以n日KDJ数值的计算为例,其计算公式为
n日RSV=(Cn-Ln)/(Hn-Ln)×100
公式中,Cn为第n日收盘价Ln为n日内的最低价Hn为n日内的最高价
其次,计算K值与D值:
当日K值=2/3×前一日K值+1/3×当日RSV
当日D值=2/3×前一日D值+1/3×当日K值
若无前一日K 值与D值,则可分别用50来代替。
J值=3*当日K值-2*当日D值
以9日为周期的KD线为例,即未成熟随机值,计算公式为
9日RSV=(C-L9)÷(H9-L9)×100
公式中,C为第9日的收盘价;L9为9日内的最低价;H9为9日内的最高价。
K值=2/3×第8日K值+1/3×第9日RSV
D值=2/3×第8日D值+1/3×第9日K值
J值=3*第9日K值-2*第9日D值
若无前一日K值与D值,则可以分别用50代替

特点

在反应股市价格变化时,J最快,K指标其次,D指标最慢。K指标反应敏捷,但容易出错;D指标反映稍慢,但稳重可靠。

应用

KDJ指标是三条曲线,在应用时主要从五个方面进行考虑:KD的取值的绝对数字;KD曲线的形态;KD指标的交叉;KD指标的背离;J指标的取值大小。
1.从KD的取值方面考虑。KD的取值范围都是0~100,将其划分为几个区域:80以上为超买区(买方力量大于卖方力量),20以下为超卖区(卖方力量大于买方力量),其余为徘徊区。根据这种划分,KD超过80就应该考虑卖出了,低于20就应该考虑买入了。
2.如果K、D、J值都大于50时,为多头市场,后市看涨;如果K、D、J值都小于50时,为空头市场,后市看空。
3.KDJ指标图形中,D曲线运行速度最慢,敏感度最低;其次是K曲线,J曲线敏感度最强。
4.当J大于K、K大于D时,即3条指标曲线呈多头排列,显示当前为多头市场;当3条指标出现黄金交叉时,指标发出买入信号。
5.当3条指标曲线呈空头排列时,表示短期是下跌趋势;3条曲线出现死亡交叉时,指标发出卖出信号。
6.如果KD线交叉突破反复在50左右震荡,说明行情正在整理,此时要结合J值,观察KD偏离的动态,再决定投资行动。
 

借用一篇经典文章来分析下实例

每一个成熟的操作者都有一套自己的交易系统,而对于大部分操作者来说,指标是一个完善的操作系统中必不可少的组成要素。很多人一提到指标就比较不屑,认为 那是骗人的东西;有一些态度相对客观的人说,指标只是个参考的工具。而我想说:指标就好比一件兵器,好用与否更取决于自己的功力。它固然是个参考,但参考 的前提是已经比较深刻的理解了指标的含义与特性,否则谈什么参考?还不如一味否定来的痛快。

好了,闲话不谈。今天来讲解一下KDJ。KDJ是一个超买超卖指标,所以在我看来,他的重要价值在于对股价高位低位的研判。第一:低位金叉、高位死叉老生常谈,但却不得不谈。作为一个超买超卖指标,当然研讨的就是股价的高低位,因而高位与低位的金叉死叉才更有价值。研究一个指标,一定要从以下几个方面来看:高位、低位、多空平衡点、背离、周期共振等。天下指标是一家。具体说到KDJ,20以下金叉买入具有很高的准确性,当KDJ在80以上死叉将会有巨大的跌幅。并且这样的介入点基本都是一波趋势的起始点,不至于很短暂。大道至简,但很多人会忽略这种金叉死叉,而去追求所谓的无所不能的指标。随便找个例子:600518康美药业

第 二:K、D、J值J值是三根线中活跃性最强的,在见证拐点时,具有很好的导向性。一般来讲,J值在0以下拐头向上并上穿0轴,为短线买点;100以上拐头 向下并下穿100,为短线卖点。此外,K、D值作为J值的辅助条件,如果越过80线,将具有很强的高位警示意义。举例:002110三钢闽光2009年9 月至2010年1月

第三:解决钝化超买超卖指标都有一个共同的缺点,那就是会出现高位钝化和低位钝化,让人无所适从。实际上这个问题也比较容易解决。首先我们先分一下类,什么样的股票会钝化?在我看来,无外乎两大类:绵绵阴跌和强势逼空。先 讲强势逼空型,这种股票之所以造成KDJ的高位钝化,原因很简单,就是因为他在上攻的过程中波动比较小,一直上冲。但同时也导致在均线系统中很难破坏掉 MA5和MA10两条均线。所以当KDJ出现高位钝化以后,就要知道这种类型股票的性格,严格按照具体股票所依存的均线,参照MA5和MA10的数值和方 向来进行操作。举例:600536中国软件2009年3月到2009年4月中旬实现利润270%

绵绵阴跌型的股票实际上意思刚好相反,在对长期压制的均线实现有效突破之后才能验证行情的有效性。 举例:600331宏达股份2008年6月中旬到2008年7月中旬实现利润80%

第四:周期共振这 是所有指标都具有的特性。要了解周期共振,首先要理解周期共振形成的过程。举例就针对上面第一要点:中的低位金叉:一个月线级别的20以下金叉的形成,一 定经历了60分钟20以下金叉、日线20以下金叉以及周线20以下金叉这样一个过程,趋势的扭转都是从小周期到大周期蔓延的。这下大家就应该明白了,出现 大周期和小周期在同一点位20以下金叉共振的可能性太小了。所谓的周期共振,并不是说各大周期同时发出相同的买入信号,而在于各周期形态之间的协同度,现 汇总如下:

1、KDJ日、周、月线低位金叉——低位启动,坚决买进如 果选定的目标股日线KDJ指标的D值小于20,KDJ形成低位金叉,而此时周线KDJ的J值在20以下向上金叉KD值,或在强势区向上运动;同时月线 KDJ也在低中位运行,且方向朝上,可坚决买进。如果一只股票要产生较大的行情,必须满足周、月线指标的KDJ方向朝上,绝对没有例外!

2、KDJ日线金叉,周、月线高位运行——面临调整,不宜介入如果选定的目标股日线KDJ指标金叉,而周线J值在90以上,月线J值在80以上运行,这时,该股面临着中级调整,此时短线介入风险很大,不宜介入.

3、KDJ日线金叉,周线KDJ向上,月线KDJ向下——反弹行情,少量参与如果选定的目标股日线KDJ指标金叉,周线KDJ的运行方向朝上,而月线KDJ的运行方向朝下,则可能是反弹行情,可用少量资金参与.

4、KDJ日线金叉,周线KDJ向下,月线KDJ向上——主力洗盘,周线反转如果选定的目标股日线KDJ金叉,周线KDJ的运行方向朝下,而月线KDJ的运行方向朝上,则此时股价正在进行试盘后的洗盘,或挖坑,或主力刻意打压,可等周线KDJ方向反转后介入.

5、KDJ日、周、月线高位运行———风险在即,不宜介入如果选定的目标股日线KDJ的J值大于100,周线KDJ的J值大于90,月线KDJ的J大于80,风险就在眼前,不宜介入.

6、KDJ日线高位运行,周、月线低位运行——短线回调,二次金叉。

(1)周KDJ值在10以下;月J值在20以下;J值越低机会越大.

(2)J 值由低位向下转为向上;个股和大盘都有的机会!

(3)月KDJ低位—有大行情;周KDJ低位—有中级行情;日KDJ低位—有短线行情;

(4)月KDJ低位—选好股可重仓;月KDJ中位—选好股可中仓;月KDJ高位—随时轻仓到空仓.

(5)月KDJ高位–有大级别调整;月J 值80以上;大盘和个股有暴跌风险!周KDJ高位—有中级调整;周J 值在90以上;大盘和个股有大跌风险,日KDJ高位—有短线调整;日J 值在100以上;大盘和个股有大跌风险.

(6)[月.周.日.KDJ]指标全部在80位死叉向下发散—-要彻底清仓!!

(7)[月.周.日.KDJ]全部在20低位金叉向上发散–满仓!

(8)[月KDJ]-[周KDJ]低位金叉向上;[日KDJ]高位死叉向下;逢低买入–

(9)[月KDJ]向上;[周KDJ]向下–有中级调整要空仓!耐心等[周KDJ]金叉.

(10)[月KDJ]向下;[周KDJ]向上–只有中短线行情;用少量资金介入。

第 五:骗线股市是一个斗智斗勇的地方,这就使得很多按图索骥的交易者很容易上当受骗。但话又说回来,骗线也是一种规律,如果能够用好的话,也算是比较实用的 技术手段。今天我要讲的KDJ骗线方法,就是所谓的中高位将死不死或者中高位死叉迅速拉回的操作模式。这一招式曾经使很多的右侧交易者狼狈不堪,下面我就 来给大家揭开它的神秘面纱。此方法要满足的条件是:

1、日KDJ金叉后,股价回档收日 阴线,最好有一定的回调幅度,然后重新放量上行。

2、日线K、D两线将要死叉或在50以上快速死叉,然后随股价上涨快速拉回。

3、60分钟线KDJ低位金 叉。最好对应股票的对应级别的三浪主升浪。此方法也可应用于日线-周线级别行情的研判,条件同60分钟线-日线相同。

举例一:上证指数 2010年7月16日日线图

60分钟图

举例二:600623 双钱股份周线

关于KDJ,还有很多其他的用法,比如背离、形态等等,但这些在另外一些指标上表现会更好,我今天只是把它的一些比较优良的性能加以概括,并呈现给大家,权当抛砖引玉,希望对大家有所启迪。

关于倒车影像闪屏无信号问题的原因及处理分析

 

新买的车子,安装的倒车影像恶心了自己小两周,问题就是挂倒挡之后导航和倒车影像界面来回闪屏,而且倒车影像只能显示第一帧,有时候是黑屏和导航来回闪屏显示无信号闪屏,去4S找了好几趟,结果都没有解决, 最后还是自己搞定的。

首先分析下问题发生的原因及处理。

1.4S说这个导航厂家配送过来只有行车记录仪,没有倒车影像,可能存在倒车影像不兼容的问题。刚开始我也深信这个说法,因为拆装换了好几次都没有结果。但是后来一查原理,恍然大悟,跟导航没有关系。倒车影 像是通过倒挡给信号,然后直接通过AV视频线来显示倒车摄像头的画面,所以跟导航啊系统啊都没有关系。

2.电压不稳,加了稳压器,发现有时候好有时候还是同样闪屏,大众车好有这种问题,但是在4s经过测量,电压12V+,也很稳定,大众车有的需要加继电器,但是那个闪只是画面闪动,倒车影像还是正常工作的。

3.接线问题。换了两家维修,接线都接了好几次,但是还是没有解决。但是,查过原理之后,发现问题出在了接地线上。摄像头的接地线应该是搭铁或者直接走后车灯的-级回路,但是现在很多安装倒车影像的都不接这跟地线,然后让摄像头的电流直接回导航,通过视频线,这样对导航是有电流冲击的(12v电压接一个小电阻摄像头,回负极的电流应该比较大),导致导航工作不稳定,这样子在摄像头那里把接地线接好就完美解决这个问题了。

 

Sublime Text 3 汉化插件安装教程

 

奶牛业用用Sublime Text编辑器,没用过,学习下。汉化进行如下。

1.ctrl+` 快捷键或者 View > Show Console 菜单打开命令行,输入

  1. import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)  

然后系统过一会儿会提示一个出错需要重启。

2.下载此文件并置于Preferences > Browse Packages菜单打开的目录下的Installed Packages文件夹,重启软件。

3.执行Preferences/Package Control,然后点击Package Control:Install Package,,然后在弹出的命令界面,输入Chinese,选择ChineseLocalization,安装结束后界面就变成中文了。

已安装的附加组件因未经验证而被 Firefox 禁用的解决方法

 

每每firefox就自动升级,升级之后还把很多附加组件给禁用了,真的让奶牛比较头疼,直接把它这个功能禁用了吧。

1.在地址栏输入about:config

2.搜索xpinstall.signatures.required

3.点击下使布尔值true变为false

4.重启浏览器,看看咱的附加组件是不是又回来了

HP v219g U盘修复记,量产比优盘修复工具更给力

 

前几天U盘写东西的时候卡死了,然后忍不住直接拔了,谁知道再插上之后就是一个劲儿的提示需要格式化,但是格式化后拔出来插上又还是提示格式化,最后用了一些修复工具之后发现连格式化都失败,最后的解决方案:

先找到chipgenius检测U盘的主控。

然后找主控的量产工具。

低格量产,修复完毕。

hello 2016

 

say bye to 2015 and hello 2016.

博客有好久好久好久没更新了,可能心不在此,也便没得可写了,脱离技术圈儿太久太久了。

2015年并没有太多值得纪念的,工作两年半,结婚了,日子虚度的很快,也越来越迷失了自己。

除了一眼可以看到头的工作,和永远打不到尽头的游戏,我不知道自己这一年都有什么长进,用一句话来概括吧:

生于忧患,死于安乐。

 

想哭 来试探自己麻痹了没

全世界 好像只有我疲惫

无所谓 反正难过就敷衍走一回

但愿绝望和无奈远走高飞

 

希望,乘着梦还没破,能有展翅的一天。

[mp3 auto=1]http://www.nenew.net/wp-content/uploads/2016/01/endoftheworld.mp3[/mp3]

Linux下shell小数运算的笔记

 

首先,linux shell下默认变量的计算小数都省略掉了,也就是0.99999其实就是0,这个很不好,有时候我们需要统计小数的。

好了,用echo + bc的组合可以实现。

  1. echo "scale=4; $BYTES_SENT/1024/1024"|bc 

scale可以设置小数点后保留4位。

但是问题又出来了,如果是0.9999则显示的是.9999,小数点前面的0又不显示了,bc也是够了逗比了,好吧,继续折腾。

  1. echo "scale=4; $BYTES_SENT/1024/1024"|bc|awk '{printf "%.4f", $0}' 

这样子下来,用awk再来格式化下,只怪奶牛shell学得很渣,但是很多东西查到了还是很好学习的,记录下。

autoproxy改版for firefox下载

 

autoproxy在firefox新版本中很多无法使用订阅功能,用这个改版还是比较好的选择。

下载地址:http://www.400gb.com/file/114503453

使用方法:下载后直接拖动文件到firefox的地址栏即可安装。

Ubuntu下shadowsocks多用户后端manyuser+前端sspanel搭建教程

 

好吧,很多东西还是有个前端管理起来比较方便,奶牛今天也配了个,写下过程记录下。

安装shadowsocks支持

  1. apt-get install python-pip python-m2crypto
  2. pip install cymysql

安装LNMP

  1. wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp

后端安装配置

  1. git clone -b manyuser https://github.com/mengskysama/shadowsocks.git 
  2. cd ./shadowsocks/shadowsocks 
  3. vim Config.py 
  4.     #Config 
  5.     MYSQL_HOST = 'localhost' #这一行是服务器IP,127.0.0.1表示本机 
  6.     MYSQL_PORT = 3306 #数据库端口号 
  7.     MYSQL_USER = 'nenew' #数据库用户名 
  8.     MYSQL_PASS = 'nenew' #数据库密码 
  9.     MYSQL_DB = 'shadowsocks' #数据库名称 
  10.  
  11.     MANAGE_PASS = 'ss233333333' 
  12.     #if you want manage in other server you should set this value to global ip 
  13.     MANAGE_BIND_IP = '127.0.0.1' 
  14.     #make sure this port is idle 
  15.     MANAGE_PORT = 23333 
  16.  
  17. python server.py 

在mysql数据库中新建数据库shadowsocks,并添加用户nenew,导入manyuser中的sql文件,然后执行python server.py。如果没有异常,则表示已经安装成功后端。

前端安装:

  1. lnmp vhost add 

添加虚拟主机,然后进入虚拟主机目录

  1. wget https://github.com/orvice/ss-panel/archive/master.zip 
  2. unzip master.zip 
  3. rm master.zip 
  4. mv -f ss-panel-master/* ./ 
  5. mv lib/config-simple.php lib/config.php 
  6. vim lib/config.php 

编辑配置信息,然后将lib文件夹下的sql文件都导入到nenew数据库中。

添加守护进程supervisor:

  1. apt-get install supervisor 
  2. echo_supervisord_conf > /etc/supervisor/supervisord.conf 
  3. vim /etc/supervisor/supervisord.conf 

将文件最后添加

  1. [program:shadowsocks] 
  2. command=python /root/shadowsocks/shadowsocks/server.py -c /root/shadowsocks/shadowsocks/config.json 
  3. autorestart=true 
  4. user=root 

其中的目录自己根据实际情况设置,重启即可。

前端github:https://github.com/orvice/ss-panel

后端github:https://github.com/mengskysama/shadowsocks

顺带广告,ss服务器150元每年,需要者联系,联系方式见杂货铺。

PPTP VPN之日志功能实现【记录登陆用户、登陆时间、登陆IP、在线时间、流量统计等信息】

 

其实以前也搞过PPTP VPN的配置,但是当时都是存在于建立,很多细节的方面并没有做好。今天来搞下这个日志系统吧,主要实现是通过ip-up 和ip-down两个脚本来实现的。这里说下原理吧,原理是通过pptp建立连接的时候都会执行ip-up,然后断线会执行ip-down。首先看看man pppd里面的一些内容:

  1. SCRIPTS 
  2.        Pppd  invokes  scripts at various stages in its processing which can be 
  3.        used to perform site-specific ancillary processing.  These scripts  are 
  4.        usually  shell  scripts,  but  could  be executable code files instead. 
  5.        Pppd does not wait for the scripts to finish (except for the  ip-pre-up 
  6.        script).  The scripts are executed as root (with the real and effective 
  7.        user-id set to 0), so that they can do things such  as  update  routing 
  8.        tables  or  run  privileged  daemons.   Be careful that the contents of 
  9.        these scripts do not compromise your system's security.  Pppd runs  the 
  10.        scripts  with standard input, output and error redirected to /dev/null, 
  11.        and with an environment that is empty except for some environment vari- 
  12.        ables  that give information about the link.  The environment variables 
  13.        that pppd sets are: 
  14.  
  15.        DEVICE The name of the serial tty device being used. 
  16.  
  17.        IFNAME The name of the network interface being used. 
  18.  
  19.        IPLOCAL 
  20.               The IP address for the local end of the link.  This is only  set 
  21.               when IPCP has come up. 
  22.  
  23.        IPREMOTE 
  24.               The IP address for the remote end of the link.  This is only set 
  25.               when IPCP has come up. 
  26.  
  27.        PEERNAME 
  28.               The authenticated name of the peer.  This is  only  set  if  the 
  29.               peer authenticates itself. 
  30.  
  31.        SPEED  The baud rate of the tty device. 
  32.  
  33.        ORIG_UID 
  34.               The real user-id of the user who invoked pppd. 
  35.  
  36.        PPPLOGNAME 
  37.               The  username  of  the  real  user-id that invoked pppd. This is 
  38.               always set. 
  39.  
  40.        For the ip-down and auth-down scripts, pppd  also  sets  the  following 
  41.        variables giving statistics for the connection: 
  42.  
  43.        CONNECT_TIME 
  44.               The  number  of  seconds  from  when the PPP negotiation started 
  45.               until the connection was terminated. 
  46.  
  47.        BYTES_SENT 
  48.               The number of bytes sent (at the level of the serial port)  dur- 
  49.               ing the connection. 
  50.  
  51.        BYTES_RCVD 
  52.               The  number  of bytes received (at the level of the serial port) 
  53.               during the connection. 
  54.  
  55.        LINKNAME 
  56.               The logical name of the link, set with the linkname option. 
  57.  
  58.        CALL_FILE 
  59.               The value of the call option. 
  60.  
  61.        DNS1   If the peer supplies DNS server addresses, this variable is  set 
  62.               to the first DNS server address supplied. 
  63.  
  64.        DNS2   If  the peer supplies DNS server addresses, this variable is set 
  65.               to the second DNS server address supplied. 
  66.  
  67.        Pppd invokes the following scripts, if they exist.  It is not an  error 
  68.        if they don't exist. 
  69.  
  70.        /etc/ppp/auth-up 
  71.               A  program  or  script which is executed after the remote system 
  72.               successfully authenticates itself.   It  is  executed  with  the 
  73.               parameters 
  74.  
  75.               interface-name peer-name user-name tty-device speed 
  76.  
  77.               Note  that  this  script  is  not  executed  if the peer doesn't 
  78.               authenticate itself, for example when the noauth option is used. 
  79.  
  80.        /etc/ppp/auth-down 
  81.               A program or script which is executed when the link  goes  down, 
  82.               if  /etc/ppp/auth-up was previously executed.  It is executed in 
  83.               the same manner with the same parameters as /etc/ppp/auth-up. 
  84.  
  85.        /etc/ppp/ip-pre-up 
  86.               A program or script which is executed just before the  ppp  net- 
  87.               work  interface  is  brought  up.   It is executed with the same 
  88.               parameters as the ip-up  script  (below).   At  this  point  the 
  89.               interface  exists  and  has  IP  addresses assigned but is still 
  90.               down.  This can be used to add  firewall  rules  before  any  IP 
  91.               traffic can pass through the interface.  Pppd will wait for this 
  92.               script to finish before  bringing  the  interface  up,  so  this 
  93.               script should run quickly. 
  94.  
  95.        /etc/ppp/ip-up 
  96.               A program or script which is executed when the link is available 
  97.               for sending and receiving IP packets (that  is,  IPCP  has  come 
  98.               up).  It is executed with the parameters 
  99.  
  100.               interface-name       tty-device      speed      local-IP-address 
  101.               remote-IP-address ipparam 
  102.  
  103.        /etc/ppp/ip-down 
  104.               A program or script which is executed when the link is no longer 
  105.               available for sending and receiving IP packets.  This script can 
  106.               be used for  undoing  the  effects  of  the  /etc/ppp/ip-up  and 
  107.               /etc/ppp/ip-pre-up  scripts.   It  is invoked in the same manner 
  108.               and with the same parameters as the ip-up script. 
  109.  
  110.        /etc/ppp/ipv6-up 
  111.               Like /etc/ppp/ip-up, except that it is executed when the link is 
  112.               available for sending and receiving IPv6 packets. It is executed 
  113.               with the parameters 
  114.  
  115.               interface-name   tty-device    speed    local-link-local-address 
  116.               remote-link-local-address ipparam 
  117.  
  118.        /etc/ppp/ipv6-down 
  119.               Similar  to /etc/ppp/ip-down, but it is executed when IPv6 pack- 
  120.               ets can no longer be transmitted on the  link.  It  is  executed 
  121.               with the same parameters as the ipv6-up script. 
  122.  
  123.        /etc/ppp/ipx-up 
  124.               A program or script which is executed when the link is available 
  125.               for sending and receiving IPX packets (that is, IPXCP  has  come 
  126.               up).  It is executed with the parameters 
  127.  
  128.               interface-name       tty-device       speed       network-number 
  129.               local-IPX-node-address  remote-IPX-node-address  local-IPX-rout- 
  130.               ing-protocol  remote-IPX-routing-protocol  local-IPX-router-name 
  131.               remote-IPX-router-name ipparam pppd-pid 
  132.  
  133.               The local-IPX-routing-protocol  and  remote-IPX-routing-protocol 
  134.               field may be one of the following: 
  135.  
  136.               NONE      to indicate that there is no routing protocol 
  137.               RIP       to indicate that RIP/SAP should be used 
  138.               NLSP      to indicate that Novell NLSP should be used 
  139.               RIP NLSP  to indicate that both RIP/SAP and NLSP should be used 
  140.  
  141.        /etc/ppp/ipx-down 
  142.               A program or script which is executed when the link is no longer 
  143.               available for sending and receiving IPX  packets.   This  script 
  144.               can  be  used  for  undoing  the  effects of the /etc/ppp/ipx-up 
  145.               script.  It is invoked in the same  manner  and  with  the  same 
  146.               parameters as the ipx-up script. 

这就是ppp的脚本内容,里面当然有变量咯,这些变量就是我们需要的。

好了,那么开始进行日志整理吧,首先是ip-up

  1. vim /etc/ppp/ip-up 
  2. #!/bin/sh 
  3. # This script is run by the pppd after the link is established. 
  4. # It uses run-parts to run scripts in /etc/ppp/ip-up.d, so to add routes, 
  5. # set IP address, run the mailq etc. you should create script(s) there. 
  6. # Be aware that other packages may include /etc/ppp/ip-up.d scripts (named 
  7. # after that package), so choose local script names with that in mind. 
  8. # This script is called with the following arguments: 
  9. #    Arg  Name                          Example 
  10. #    $1   Interface name                ppp0 
  11. #    $2   The tty                       ttyS1 
  12. #    $3   The link speed                38400 
  13. #    $4   Local IP number               12.34.56.78 
  14. #    $5   Peer  IP number               12.34.56.99 
  15. #    $6   Optional ``ipparam'' value    foo 
  16.  
  17. # The  environment is cleared before executing this script 
  18. # so the path must be reset 
  19. PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin 
  20. export PATH 
  21.  
  22. # These variables are for the use of the scripts run by run-parts 
  23. PPP_IFACE="$1" 
  24. PPP_TTY="$2" 
  25. PPP_SPEED="$3" 
  26. PPP_LOCAL="$4" 
  27. PPP_REMOTE="$5" 
  28. PPP_IPPARAM="$6" 
  29. export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM 
  30.  
  31. # as an additional convenience, $PPP_TTYNAME is set to the tty name, 
  32. # stripped of /dev/ (if present) for easier matching. 
  33. PPP_TTYNAME=`/usr/bin/basename "$2"` 
  34. export PPP_TTYNAME 
  35.  
  36. # If /var/log/ppp-ipupdown.log exists use it for logging. 
  37. if [ -e /var/log/ppp-ipupdown.log ]; then 
  38.   exec > /var/log/ppp-ipupdown.log 2>&1 
  39.   echo $0 $@ 
  40.   echo 
  41. fi 
  42.  
  43. # This script can be used to override the .d files supplied by other packages. 
  44. if [ -x /etc/ppp/ip-up.local ]; then 
  45.   exec /etc/ppp/ip-up.local "$@" 
  46. fi 
  47.  
  48. run-parts /etc/ppp/ip-up.d \ 
  49.   --arg="$1" --arg="$2" --arg="$3" --arg="$4" --arg="$5" --arg="$6" 
  50.  
  51. # if pon was called with the "quick" argument, stop pppd 
  52. if [ -e /var/run/ppp-quick ]; then 
  53.   rm /var/run/ppp-quick 
  54.   wait 
  55.   kill $PPPD_PID 
  56. fi 
  57.  
  58. /sbin/iptables -t nat -A POSTROUTING -s  172.16.36.0/24 -j SNAT --to-source "serverip" 这里设置每次登陆时候都设定一次路由转发,避免失效。 
  59.  
  60. echo "****************************************************" > /var/log/pptpd-${1}.log 将所有内容导入到pptpd-${1}.log,以防多用户登陆时候造成日志混乱 
  61. echo "username: $PEERNAME" >> /var/log/pptpd-${1}.log 
  62. echo "clientIP: $6" >> /var/log/pptpd-${1}.log 
  63. echo "device: $1" >> /var/log/pptpd-${1}.log 
  64. echo "vpnIP: $4" >> /var/log/pptpd-${1}.log 
  65. echo "assignIP: $5" >> /var/log/pptpd-${1}.log 
  66. echo "logintime: `date -d today +%F_%T`" >> /var/log/pptpd-${1}.log 

然后是ip-up的处理:

  1. vim /etc/ppp/ip-down 
  2. #!/bin/sh 
  3. # This script is run by the pppd _after_ the link is brought down. 
  4. # It uses run-parts to run scripts in /etc/ppp/ip-down.d, so to delete 
  5. # routes, unset IP addresses etc. you should create script(s) there. 
  6. # Be aware that other packages may include /etc/ppp/ip-down.d scripts (named 
  7. # after that package), so choose local script names with that in mind. 
  8. # This script is called with the following arguments: 
  9. #    Arg  Name                          Example 
  10. #    $1   Interface name                ppp0 
  11. #    $2   The tty                       ttyS1 
  12. #    $3   The link speed                38400 
  13. #    $4   Local IP number               12.34.56.78 
  14. #    $5   Peer  IP number               12.34.56.99 
  15. #    $6   Optional ``ipparam'' value    foo 
  16.  
  17. # The  environment is cleared before executing this script 
  18. # so the path must be reset 
  19. PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin 
  20. export PATH 
  21.  
  22. # These variables are for the use of the scripts run by run-parts 
  23. PPP_IFACE="$1" 
  24. PPP_TTY="$2" 
  25. PPP_SPEED="$3" 
  26. PPP_LOCAL="$4" 
  27. PPP_REMOTE="$5" 
  28. PPP_IPPARAM="$6" 
  29. export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM 
  30.  
  31. # as an additional convenience, $PPP_TTYNAME is set to the tty name, 
  32. # stripped of /dev/ (if present) for easier matching. 
  33. PPP_TTYNAME=`/usr/bin/basename "$2"` 
  34. export PPP_TTYNAME 
  35.  
  36. # If /var/log/ppp-ipupdown.log exists use it for logging. 
  37. if [ -e /var/log/ppp-ipupdown.log ]; then 
  38.   exec >> /var/log/ppp-ipupdown.log 2>&1 
  39.   echo $0 $@ 
  40.   echo 
  41. fi 
  42.  
  43.  
  44. echo "downtime: `date -d today +%F_%T`" >> /var/log/pptpd-${1}.log 
  45. echo "bytes sent: $BYTES_SENT" >> /var/log/pptpd-${1}.log 
  46. echo "bytes received: $BYTES_RCVD" >> /var/log/pptpd-${1}.log 
  47. echo "connect time: $CONNECT_TIME" >> /var/log/pptpd-${1}.log 
  48. echo "****************************************************" >> /var/log/pptpd-${1}.log 
  49. cat /var/log/pptpd-${1}.log >> /var/log/pptpd.log
  50.  
  51.  
  52.  
  53. # This script can be used to override the .d files supplied by other packages. 
  54. if [ -x /etc/ppp/ip-down.local ]; then 
  55.   exec /etc/ppp/ip-down.local "$@" 
  56. fi 
  57.  
  58. run-parts /etc/ppp/ip-down.d \ 
  59.   --arg="$1" --arg="$2" --arg="$3" --arg="$4" --arg="$5" --arg="$6" 

最后就可以通过/var/log/pptpd.log文件进行查看PPTP VPN日志了。日志形式如下,需要更美观的自行修改代码:

  1. **************************************************** 
  2. username: nenew 
  3. clientIP: XXX.XXX.XXX.XXX 
  4. device: ppp0 
  5. vpnIP: 172.16.36.1 
  6. assignIP: 172.16.36.2 
  7. logintime: 2015-08-03_17:06:05 
  8. downtime: 2015-08-03_17:06:23 
  9. bytes sent: 164143 
  10. bytes received: 51606 
  11. connect time: 18 
  12. ****************************************************