文档章节

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
大二决定学习嵌入式软件,请教该继续学什么

之前发过一个提问,自己学了unix网络编程卷一,现在看卷二,看了unix环境高级编程,用tcpip进行网际互联,会c,c++,shell,数据结构,现在要学习嵌入式软件,或者驱动,请问该继续学什么,是买...

宅四年
2013/09/03
346
5
shell 基础知识 第二弹

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

枫爱若雪
2012/04/10
0
3

没有更多内容

加载失败,请刷新页面

加载更多

网站老被劫持快照跳转怎么办

最近很多公司的网站被劫持跳转到了bo彩、cai票网站上去,客户从百度点击进去会跳转,直接输入网站的域名不会跳转,网站快照也被劫持成bo彩的内容,site查看网站在百度的收录也出现问题,收录...

网站安全
10分钟前
1
0
给自己灌鸡汤

前言 看极客时间的《数据结构与算法之美》,中间有一篇文章是在说怎么坚持学习的,摘抄一些片段过来,激励自己。 https://time.geekbang.org/column/article/69607 致使你掉队的原因 一个人在...

grace_233
12分钟前
1
0
如何在网络视听行业建一扇内容安全大门?

在人工智能飞速发展的三年里,整个网络视听产业数字化发展速度非常迅猛。大数据作为如今这个时代的产物,正不断推动整个产业的发展。网络视听行业中存在海量的数据,比如视频内容、视频浏览量...

阿里云官方博客
21分钟前
1
0
云安全简史

课程介绍: DT时代我们每个人的生活在不知不觉中与云计算发生了千丝万缕的联系,起床、吃饭、出行、社交、工作、娱乐、购物等大多数应用都在云上,然而安全事件频发时刻在为我们敲响警钟,面对...

mcy0425
23分钟前
2
0
数字IT基础-数据采集总线

摘要: 日志服务是阿里自产自用的产品,在双十一、双十二和新春红包期间承载阿里云/蚂蚁全站、阿里电商板块、云上几千商家数据链路,每日处理来自百万节点几十PB数据,峰值流量达到每秒百GB,...

阿里云云栖社区
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部