文档章节

shell高级编程

Tony_zhangyh
 Tony_zhangyh
发布于 2014/06/27 10:46
字数 516
阅读 27
收藏 0
#!/bin/bash
##############################################################################
# NOTE:
# The test system is CentOs2.6.32-358
#
# This Scripts all rights reserved deserved by Zhangyh
# Copyright © 2014
#
##############################################################################
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
clear;
 
programs="awk sed grep cat wget cut touch proxychains openvpn mutt ps killall"
for profile in $programs
do
    which $profile > /dev/null 2>&1
    if [ "$?" != "0" ]; then
        echo -e "Your system do not have $profile , Please check your system ."
        exit 1
    fi
done
 
username="lontestt"
pwd="c54239c4"
xmlurl="http://lonlife.net/lonlife.xml"
#ss5conf根据实际情况进行指定配置文件
ss5cnf="/etc/proxychains.conf"
#临时的路径
tmppath="/home/path"
statstime=$(date +"%Y-%m-%d-%H:%M")
myip=`curl -s http://220.181.11.98/cityjson?ie=utf-8|awk -F '\"' '{print $4}'`
[ -f  $tmppath/auth.txt ] || touch $tmppath/auth.txt && echo -e "$username\n$pwd">$tmppath/auth.txt
 
function xmlload(){
#用缓存文件方式存储数据
    curl -s $xmlurl|awk -F '\"' ' {if(/proxytype="1"/){printf "socks5 %s %s\n",$4,$6}else if(/proxytype="3"/){printf "remote %s %s\n",$4,$6}}' > $tmppath/tmpxml.txt
}
 
function socket_test(){
    cat $tmppath/tmpxml.txt| while read line
    do
        if [ "socks5" = ${line%% *} ] ; then
            txt="$line $username $pwd"
            sed -i /socks5/d $ss5cnf
            sed -i "N;/\[ProxyList\]/a $txt" $ss5cnf
            rmip=`proxychains curl -s http://220.181.11.98/cityjson?ie=utf-8|awk -F '\"' '{print $4}'`
                if [ $myip != $rmip ] ; then
                    echo "$statstime,ss5,${line#* },ok" >> $tmppath/sockslog.csv
                else
                    echo "$statstime,ss5,${line#* },down" >> $tmppath/sockslog.csv
                fi
        elif [ "remote" = ${line%% *} ] ; then
            pid_value=$(ps -A|grep openvpn|awk '{print $1}')
            [ $pid_value = ""] || kill -15 $pid_value &&
            vpn_socket &
        fi
    done
}
function vpn_socket(){
#检测证书是否存在
    [ -f "$tmppath/ca.crt" -a -f "$tmppath/lonlife.key" -a -f "$tmppath/lonlife.crt" ] || exit 0 &&
#清空日志
    echo > $tmppath/vpnlog.txt
#建立VPN连接
    openvpn --client --dev tap --persist-key --persist-tun --nobind --pull --comp-lzo --verb 3 --mute 10 --ns-cert-type server --replay-persist cur-replay-protection.cache --ca $tmppath/ca.crt --cert $tmppath/lonlife.crt --key $tmppath/lonlife.key --auth-user-pass $tmppath/auth.txt --auth-nocache --proto udp --route-method exe --route-delay 5 --mssfix 1450 --$line --log $tmppath/vpnlog.txt --daemon
    [ $? -ne 0 ] && echo 'run cmd error' && exit
    num=0
    while true;do
        if grep -q 'Initialization Sequence Completed' $tmppath/vpnlog.txt;then
            break
        elif grep -q 'AUTH_FAILED' $tmppath/vpnlog.txt;then
            num=-1
            break
        elif [ $num -lt 30 ];then
            let num++
            sleep 1
            num=-2
            break
        fi
    done
     
    if [ $num == -1 ];then
        echo -e "$statstime,openvpn,${line#* },AUTH_FAILED"
    elif [ $num == -2 ];then
        echo -e "$statstime,openvpn,${line#* },Connect time out"
    else
        gw=$(route -n |awk '{print $1}'|grep '10.10.*'|sed 's/0$/1/')
        route add -host 220.181.11.98 gw $gw
        address=$(curl -s http://220.181.11.98/cityjson?ie=utf-8|awk '{print $9}'|sed 's/};$//')
        echo -e "$statstime,openvpn,${line#* },ok" >> $tmppath/sockslog.csv
    fi
    kill `pidof openvpn` &> /dev/null
    sleep 5
}
function mymail(){
    mailuser="zhangyongheng1100@163.com"  
    txt=$(cat $tmppath/sockslog.csv |awk -F ',' '/down/ {printf "%s at %s is down.<br> \n",$2,$1}')
    echo $txt |mutt -s "About the state of the socket from $statstime " -e 'set content_type="text/html"' $mailuser -a $tmppath/sockslog.csv
}
 
xmlload
socket_test


© 著作权归作者所有

共有 人打赏支持
Tony_zhangyh
粉丝 1
博文 4
码字总数 2826
作品 0
郑州
项目经理
Shell 高级编程

Shell 高级编程 原创 2016-11-04 景峯 Netkiller Shell 高级编程 http://netkiller.github.io/journal/shell.html Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街......

neo-chen
2016/11/04
347
0
《高级Bash脚本编程指南》十年来首次修订

  新年伊始,开源慕课的知识库上线了。初期提供了《Linux命令大全/Bash 参考》《高级Bash脚本编程指南》两个系列。其他资料正将陆续上线。   其中,《高级Bash脚本编程指南》对于Shell学...

dbtrain
06/26
0
0
Scala入门到精通——第三十节 Scala脚本编程与结束语

摘要: 本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,...

阿里云云栖社区
06/26
0
0
shell 基础知识 第二弹

个人认为,学习shell,一定要从基础开始,如果你连基本的命令都不会用,怎么可能写出几千行的shell脚步(PS,今天走了小差看了下shell和Perl,还是觉得shell更有前途,个人意见,不喜勿喷) ...

枫爱若雪
2012/04/10
0
3
利用Shell开发跳板机功能脚本案例

先定个小目标,先精通Shell再说!——老男孩 利用Shell开发跳板机功能脚本案例 范例17_6:开发企业级Shell跳板机案例。要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式...

老男孩oldboy
2017/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

并发编程—Java多线程总结

目录 先了解几个概念 多线程:进程和线程是一对多的关系,一个进程(一个程序),由不同的线程来运行。有共享的空间也有独立的空间。 并行: 同时进行,拿两个cpu来跑同样的程序同样的代码片段...

Java干货分享
22分钟前
7
0
Windows Update真的需要向Linux学习

| 虽然简单地将驱动程序从典型的Windows更新中分离出来可能是一种防止这种情况发生的方法,但是Linux甚至更进一步,让用户能够更好地控制他们可以安装的驱动程序。像Ubuntu和Linux Mint这样的...

Linux就该这么学
23分钟前
1
0
Linux学习-0926

4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap分区 一、磁盘格式化 磁盘进行分区后如果不进行格式化,是无法使用的。 linux系统的文件类型: 可以使用使用以下方式进行查看linux系统...

wxy丶
24分钟前
1
0
elasticsearch安装

elasticsearch安装 一、下载: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.1.tar.gz 二、解压: tar zxvf elasticsearch-5.6.1.tar.gz 三、改名: ......

小杰java
25分钟前
1
0
Vue router传参 四

传递的方法 //传递<router-link :to="{path:'',query:{id:123}}">产品</router-link>//获取this.$route.query.id 这里可以传params 相当于POST 但 :to里面只能是name query 相当......

大灰狼wow
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部