4月 12

socket5代理安装并简单配置

需要登陆google的邮件、doc等服务,但是被墙了。所以要租一台在境外的主机做代理。
操作系统使用CentOS6。
socket5工具的官方网站 http://ss5.sourceforge.net/project.htm

一、安装比较简单,首先安装依赖包。然后下载sockt5的源码包编译安装。
# yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel
# wget http://iweb.dl.sourceforge.net/project/ss5/ss5/3.8.9-6/ss5-3.8.9-6.tar.gz
然后是 ./configure && make && make install

二、修改配置文件
编辑配置文件 /etc/opt/ss5/ss5.conf
set SS5_CONSOLE
auth 0.0.0.0/0 – u
permit u 0.0.0.0/0 – 0.0.0.0/0 – – – – –
注:-不用认证,u代表用本地passwd文件
permit格式
permit/deny < source port>

编辑配置文件/etc/rc.d/init.d/ss5 可以自定义监听端口,默认为1080。如使用默认可以不改。
daemon /usr/sbin/ss5 -t $SS5_OPTS -b 0.0.0.0:1088

编辑配置文件/etc/sysconfig/ss5 中,取消以下行的注释。
SS5_OPTS=” -u root”

添加验证用户及密码,由于密码是明文的,注意控制权限。
# cat ss5.passwd #一行一个用户+密码
test 9999
注:密码要为数字

# chmod 700 /etc/rc.d/init.d/ss5
# /etc/rc.d/init.d/ss5 restart
Restarting ss5… Shutting down ss5…
done [ OK ]
doneting ss5… [ OK ]

使用netstat -antp查看监听是否启动,如果监听则为可用。

更多配置,参见官方文档http://ss5.sourceforge.net/examples.htm。

3月 31

用户自行修改svn密码的简单服务

svn做好,最基础的使用方法。将来用户要修改密码或忘记密码总要来问还是挺麻烦。不想处理这种简单问题。所以在python+tornado的框架上写了个页面,直接python跑起来。省了自己不少的事。

#!/bin/python
#-*- coding:utf-8 -*-
# Filename:    websvn.py
# Revision:    
# Date:        2014-03-27
# Author:      simonzhang
# web:         www.simonzhang.net
# Email:       simon-zzm@163.com
### END INIT INFO

import tornado.ioloop
import tornado.web

import smtplib
from email.mime.text import MIMEText 

from string import strip

# base set
webport = '88'
passfile = '/program/svn/conf/passwd'
# svn start comm
svn_start_comm = '/program/svn/bin/svnserve -d -r /program/svn/ --listen-port 59999'
# use send user info
mail_host = 'smtp.simonzhang.net'
mail_user = 'test@simonzhang.net'
mail_pwd = '123456'

def mail_send(content, mailto):
     msg = MIMEText(content.encode('utf8'), _subtype='html',  _charset='utf8')
     msg['From'] = mail_user
     msg['Subject'] = u'svninfo'
     msg['To'] = mailto
     try:
         s = smtplib.SMTP()
         s.connect(mail_host)
         s.login(mail_user,mail_pwd)
         s.sendmail(mail_user,[mailto],msg.as_string())
         s.close()
     except Exception ,e:
         print e 

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        index_html = '''
用户名 老密码 新密码 再次输入
用户邮箱
''' self.write(index_html) class EditPassHandler(tornado.web.RequestHandler): def get(self): # 清理临时文件 try: import os os.remove('%s.tmp' % passfile) except: pass # 是否重启的状态 reboot_status = 0 user = strip(self.get_argument('user')) oldpass = strip(self.get_argument('oldpass')) newpass1 = strip(self.get_argument('newpass')) newpass2 = strip(self.get_argument('newpass2')) if (len(user) == 0) or (len(oldpass) == 0) or \ (len(newpass1) == 0) or (len(newpass2) == 0): html = '输入信息错误' else: user_info_list = open(passfile, 'rb').readlines() tmp_file = open('%s.tmp' % passfile, 'wb') # 如果是用户配置则查看是否为用户,如果不是直接写入临时文件 for li in xrange(len(user_info_list)): if user_info_list[li].find('=') > 0 : u = strip(user_info_list[li].split('=')[0]) p = strip(user_info_list[li].split('=')[1]) #e = strip(user_info_list[li+1].split('#')[1]) if (u == user) and (p == oldpass): tmp_file.write('%s=%s\n' % (u, newpass1)) # tmp_file.write('#%s\n' % (e)) reboot_status = 1 # li = li+1 else: tmp_file.write(user_info_list[li]) else: tmp_file.write(user_info_list[li]) if reboot_status == 1: import os import shutil shutil.move('%s.tmp' % passfile, passfile) os.system("killall svnserve && %s" % svn_start_comm) html = '处理完成请重试' self.write(html) class SendUserInfoHandler(tornado.web.RequestHandler): def get(self): email = self.get_argument('email') user_info_list = open(passfile, 'rb').readlines() # 循环读取每一行 html = '没有找到相关信息' for li in xrange(len(user_info_list)): context = user_info_list[li][:-1] # 如果有用户配置的则分解 if context.find('=') > 0 : u = strip(user_info_list[li].split('=')[0]) p = strip(user_info_list[li].split('=')[1]) e = strip(user_info_list[li+1].split('#')[1]) # 如果用户邮箱与输入邮箱相同则发邮件 if e == strip(email): mail_send("user:%s. passwd:%s" % (u, p), email) html = '邮件发送注意查收' self.write(html) application = tornado.web.Application([ (r"/", MainHandler), (r"/editpass/", EditPassHandler), (r"/senduserinfo/", SendUserInfoHandler), ]) if __name__ == "__main__": application.listen(webport) tornado.ioloop.IOLoop.instance().start()

源码包websvn