声明,脚本作者是quark同学
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
#! /bin/bash # # ZJG network all-in-one shell script, standalone version # author: quark, arcpp.zju@gmail.com # date: 2008.05.22 # dependences: sudo, xl2tpd, dhcpcd # usage: zjgnet [r] (r: restart) # 201 card no. w/o @zheda, if you want to skip 201-login, leave here empty. U_C_USERNAME="800385766161@zheda" # 201 card password U_C_PASSWORD="003614" # vpn username, e.g. quark@a, if you have no vpn account, leave here empty. U_V_USERNAME="qianwei@a" # vpn password U_V_PASSWORD="xxxxxx" # 3322 dynamic domain username, if you do not have one, leave here empty. U_N_USERNAME="zjuers" # 3322 dynamic domain password U_N_PASSWORD="xxxxxx" # 3322 inner domain, e.g. quark.6600.org U_N_INNER_DOMAIN="qianwei.8866.org" # 3322 outer domain, e.g. quark.8800.org U_N_OUTER_DOMAIN="zjuers.8866.org" # vpn max redial count U_V_REDIAL=2 # vpn timeout when connecting (seconds) U_V_TIMEOUT=10 # script constants, usually no necessary to modify these C_CLEAR="\033[1;0m" C_FAIL="\033[1;31;40m" C_H1="\033[1;36;40m" PORTAL_SERVER_IP="61.175.164.14" PORTAL_SERVER_PORT="8880" VPN_SERVER_IP="10.5.1.9" DYNDNS_URL="222.185.245.239/dyndns/update?system=dyndns&hostname=" NETWORK_ADAPTER="eth0" errorHandle() { printf "\n${C_FAIL}Oops! An error occurs. Script terminated.${C_CLEAR}\n" exit } getLocalIP() { LOCAL_IP=`ifconfig ${NETWORK_ADAPTER} | head -2 | tail -1 | sed 's/.*addr://;s/ .*//'` } zjg201Login() { #cat << ! telnet $PORTAL_SERVER_IP $PORTAL_SERVER_PORT &>/dev/null << ! POST /secu/webLogin_nie.jsp?localIP=${LOCAL_IP}&httpIP=${LOCAL_IP} HTTP/1.1 Host: ${PORTAL_SERVER_IP}:${PORTAL_SERVER_PORT} Content-Length: 45 Cookie: httpIP=${LOCAL_IP}; userIP=${LOCAL_IP}; needActiveX=1; isPNP=0; cookieEnableTest=cookieEnable;pageno = true Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla username=${U_C_USERNAME}%40zheda&password=${U_C_PASSWORD} ! } executeXl2tpd() { [ -e /dev/ppp ] || sudo mknod /dev/ppp c 108 0 &> /dev/null cat > /tmp/.l2tp.conf << ! || errorHandle [global] port=1701 [lac zju] lns = ${VPN_SERVER_IP} require chap = yes redial = yes redial timeout = 3 max redials = ${U_V_REDIAL} pppoptfile = /tmp/.l2tp.zju ! cat > /tmp/.l2tp.zju << ! || errorHandle asyncmap 0 noauth modem netmask 255.255.255.0 proxyarp receive-all noipx user ${U_V_USERNAME} password ${U_V_PASSWORD} ! #! cat > /tmp/.l2tp.sec << ! || errorHandle ${U_V_USERNAME} * ${U_V_PASSWORD} * ! sleep 1 sudo xl2tpd -c /tmp/.l2tp.conf -s /tmp/.l2tp.sec -C /var/run/l2tpd-control -D &> /tmp/.l2tp.out & sleep 1 echo "c zju" | sudo tee /var/run/l2tpd-control &> /dev/null printf " Waiting." tick=0 while ! ifconfig | grep ppp0 &> /dev/null; do let tick+=1 [ $tick -ge $U_V_TIMEOUT ] && { echo "(Time out)"; errorHandle; } cat /tmp/.l2tp.out | fgrep close &>/dev/null && errorHandle sleep 1 printf "." done printf "\n" } findAndKill() { pgrep $1 &> /dev/null && sudo killall $1 &> /dev/null } setRoute() { inner_route="`ip route | fgrep default | sed 's/.*via\ //;s/\ dev.*//'`" vpn_route="`ip route | fgrep ppp0 | fgrep src | sed 's/\ dev.*//'`" vpn_net="`echo $vpn_route | sed 's/\ dev.*//' | sed 's/\.\w*$//;s/\.\w*$//'`" sudo ip route add 10.0.0.0/8 via $inner_route dev $NETWORK_ADAPTER sudo ip route add ${vpn_net}.0.0/16 via $inner_route dev $NETWORK_ADAPTER sudo ip route del default sudo ip route add default via $vpn_route dev ppp0 } domainUpdate() { [ -z `which w3m 2>/dev/null` ] && { echo "Error: w3m not found"; errorHandle; } if [ -n U_N_INNER_DOMAIN ]; then INTERNET_IP="`ifconfig ppp0 | head -2 | tail -1 | sed 's/.*addr://;s/ .*//'`" printf " Updating ${U_N_OUTER_DOMAIN} (IP: ${INTERNET_IP}) : " w3m -dump "http://${U_N_USERNAME}:${U_N_PASSWORD}@${DYNDNS_URL}${U_N_OUTER_DOMAIN}" 2>/dev/null fi if [ -n U_N_OUTER_DOMAIN ]; then printf " Updating ${U_N_INNER_DOMAIN} (IP: ${LOCAL_IP}) : " w3m -dump "http://${U_N_USERNAME}:${U_N_PASSWORD}@${DYNDNS_URL}${U_N_INNER_DOMAIN}&myip=${LOCAL_IP}" 2>/dev/null fi } if echo "$1" | grep "r" > /dev/null; then echo "STOPPING ZJG NETWORK" echo " Stopping running network daemon..." if [ -n "${U_V_USERNAME}" ]; then echo "d zju" | sudo tee /var/run/l2tpd-control &> /dev/null fi findAndKill xl2tpd sudo poff &>/dev/null findAndKill dhcpcd findAndKill pppd echo " Cleaning previous routes..." sudo ifconfig $NETWORK_ADAPTER down || errorHandle sudo ifconfig $NETWORK_ADAPTER up || errorHandle echo " DHCP..." sudo dhcpcd $NETWORK_ADAPTER || errorHandle fi getLocalIP echo "STARTING ZJG NETWORK" if [ -n "${U_C_USERNAME}" ]; then echo " Performing 201 Login..." zjg201Login fi if [ -n "${U_V_USERNAME}" ]; then echo " Starting xl2tpd..." executeXl2tpd || errorHandle echo " Setting up routes..." setRoute || errorHandle fi if [ -n U_N_USERNAME ]; then echo " Updating domains..." domainUpdate || errorHandle fi echo "DONE." |