aite.xyz 官方论坛

 找回密码
 立即注册
搜索
热搜: anmpp lnmpp
查看: 3972|回复: 8

内网IP切换脚本.

[复制链接]

23

主题

132

帖子

2398

积分

金牌会员

Rank: 6Rank: 6

积分
2398
发表于 2015-9-13 23:42:04 | 显示全部楼层 |阅读模式
本帖最后由 aixiao 于 2017-2-24 14:11 编辑

自己使用的后缀模式(不多说),有限制,需要切换内网IP.
分享给大家,再也不用点数据连接开关按钮了,自己用着挺舒服的.

  1. :

  2. aixiao="${@}"

  3. function inss_INIT() {
  4.     null="/dev/null"
  5.     bbox="/system/xbin/busybox"
  6.     aixiao_inss="/data/local/aixiao.inss"
  7.     ip_addr_array=(99) #4 43 31
  8.     #填写自己需要的内网IP.IP第二个字节值.SHELL数组.
  9.     ip_addr_array1=(10) #10
  10.     #填写自己需要的内网IP.IP第一个字节值.SHELL数组.
  11.     ip_rmnet="rmnet0"
  12.     #填写自己的网卡.

  13.     if ! ${bbox} &> /dev/null ; then echo "BusyBox No Found !" ; exit 1 ; fi
  14.     if ! svc &> /dev/null ; then echo "Svc No Found !" ; exit 1 ; fi
  15.     #判断必须要命令.否则退出子壳返回错误代码1.
  16.     if ! netcfg &> /dev/null ; then export netstat="${bbox} netstat" ; export c="U" ; else export c="UP" ; fi
  17.     #判断netcfg命令存在不存在.如果存在c等于UP.如果不存在c等于U.
  18.     if ${bbox} [[ "${aixiao}" != "" ]] ; then
  19.         ${bbox} echo ${aixiao} | grep [0-9] > /dev/null 2>&1 && ip_addr_array=(${aixiao})
  20.     fi
  21.     if ${bbox} [[ "${aixiao}" = "" ]] && ${bbox} [[ -e ${aixiao_inss}/etc/inss.conf ]] ; then
  22.         . ${aixiao_inss}/etc/inss.conf
  23.     fi
  24.     if ${bbox} [[ "${ip_addr}" != "" ]] ; then
  25.         ip_addr_array=(${ip_addr})
  26.     fi
  27.     if ${bbox} [[ "${ip_addr1}" != "" ]] ; then
  28.         ip_addr_array1=(${ip_addr1})
  29.     fi
  30. }

  31. function inss_VERSION() {
  32.     #日志.
  33.     echo "
  34. #Ip network switch script.
  35. #20150913 aixiao write.
  36.   初步编写程序架构.
  37. #20151101 aixiao modify.
  38.   增加方案判断路由.
  39. #20160208 aixiao modify.
  40.   循环执行sleep直到营运商给手机分配IP,不会等待几秒,实时判断分配的IP.
  41. #20160521 aixiao modify.
  42.   增加选项&参数.
  43. #20160614 aixiao modify.
  44.   加密shell script留下"-t"选项.会先显示该指令及所下的参数.
  45. #20160622 aixiao modify.
  46.   增加配置文件(默认${aixiao_inss}/etc/inss.conf).
  47. #20160628 aixiao modify.
  48.   增加日志文件(默认${aixiao_inss}/log/ip_address.log).
  49. #20160710 aixiao modify.
  50.   规范代码,包括自定义函数自定义变量.
  51. #20160819 aixiao modify.

  52. #20170215 aixiao modify.
  53.   全部函数调用.
  54. inss by aixiao.
  55. Email 1605227279@qq.com.
  56. "
  57.     exit 0
  58. }

  59. function inss_HELP() {
  60.     #帮助
  61.     ${bbox} cat << EOF
  62. Ip network switch script.
  63. Usage:
  64.     ${0} [N] [N].
  65.     inss [option] [parameter].
  66. options:
  67.     -t tarck.
  68.     -c config file.
  69.     -h print help.
  70.     -v|-V print version information.

  71. parameters:
  72.     -c config file (default: ${aixiao_inss}/etc/inss.conf).

  73. inss by aixiao.
  74. Email 1605227279@qq.com.
  75. EOF
  76.     exit 0
  77. }

  78. function inss_ROOT(){
  79.     #root用户.
  80.     if ${bbox} [[ "`${bbox} id -u`" != "0" ]] ; then ${bbox} echo "ROOT user run ?" ; exit 1 ; fi
  81. }

  82. function inss_ip() {
  83.     #写入日志文件.
  84.     ip=$(${netstat} -r | ${bbox} grep ${ip_rmnet} | ${bbox} grep U | ${bbox} awk '{print $1}')
  85.     if ${bbox} [[ -d ${aixiao_inss}/log ]] ; then
  86.         today=$(date +"%Y%m%d%H%M%S")
  87.         echo ${today} >> ${aixiao_inss}/log/ip_address.log
  88.         echo ${ip} >> ${aixiao_inss}/log/ip_address.log
  89.     fi
  90. }

  91. function inss_a() {
  92.     #截取IP第二个字节值.
  93.     if [[ "${1}" = "UP" ]] ; then
  94.         ip_addres=`netcfg | ${bbox} grep UP | ${bbox} grep ${ip_rmnet} | ${bbox} grep -v "lo" | ${bbox} tr -s " " | ${bbox} cut -d "." -f 3`
  95.         echo "${ip_addres}"
  96.     elif [[ "${1}" = "U" ]] ; then
  97.         ip_addres=`${netstat} -r | ${bbox} grep ${ip_rmnet} | ${bbox} grep U | ${bbox} awk '{print $1}' | ${bbox} cut -d "." -f 2`
  98.         echo "${ip_addres}"
  99.     fi
  100. }

  101. function inss_b() {
  102.     #网络状态.
  103.     if [[ "${1}" = "UP" ]] ; then
  104.         ip_rmnet0=`netcfg | ${bbox} grep ${ip_addres} | ${bbox} grep -v "lo" | ${bbox} awk '{print $2}'`
  105.         echo "$ip_rmnet0"
  106.     elif [[ "${1}" = "U" ]] ; then
  107.         ip_rmnet0=`${netstat} -r | ${bbox} grep ${ip_addres} | ${bbox} awk 'NR==1 {print $4}'`
  108.         echo "${ip_rmnet0}"
  109.     fi
  110. }

  111. function inss_c() {
  112.     #循环执行sleep直到营运商给手机分配IP.
  113.     while [ "`${netstat} -r | ${bbox} grep ${ip_rmnet} | ${bbox} grep U | ${bbox} awk '{print $1}' | ${bbox} cut -d "." -f 2`" = "" ] ; do
  114.                sleep 3
  115.                inss_a ${c}
  116.     done
  117. }

  118. function inss_d() {
  119.     #打印完整IP.
  120.     ${netstat} -r | ${bbox} grep ${ip_rmnet} | ${bbox} grep U | ${bbox} awk '{print $1}'
  121. }

  122. function inss_e() {
  123.     #截取IP第一个字节值.
  124.     if [[ "${1}" = "UP" ]] ; then
  125.         ip_addres=`netcfg | ${bbox} grep UP | ${bbox} grep ${ip_rmnet} | ${bbox} grep -v "lo" | ${bbox} tr -s " " | ${bbox} cut -d "." -f 3`
  126.         echo "${ip_addres}"
  127.     elif [[ "${1}" = "U" ]] ; then
  128.         ip_addres=`${netstat} -r | ${bbox} grep ${ip_rmnet} | ${bbox} grep U | ${bbox} awk '{print $1}' | ${bbox} cut -d "." -f 1`
  129.         echo "${ip_addres}"
  130.     fi
  131. }

  132. function inss_MAIN {
  133.     if ${bbox} [[ "`inss_b ${c} 2> /dev/null`" != "${c}" ]] ; then   #这行判断网络是否开启.
  134.         echo "数据连接已经关闭..."   
  135.         echo "数据连接正在打开..."
  136.     else
  137.         echo "数据连接已经开启..."
  138.         for zhy in ${ip_addr_array[@]} ; do                          #如果开启还要检查IP对不对.
  139.             if ${bbox} [[ `inss_a ${c}` = $zhy ]] ; then
  140.                 for zhn in ${ip_addr_array1[@]} ; do
  141.                     if ${bbox} [[ `inss_e ${c}` = $zhn ]] ; then
  142.                         inss_ip                                      #调用自定义函数inss_ip把路由存入日至文件.
  143.                         exit 1                                       #如果IP的第二个字节值对的话退出.如果不对就进入下面循环.
  144.                     fi
  145.                 done
  146.             fi
  147.         done
  148.     fi

  149.     while true ; do                                                 #循环结构.
  150.         svc data disable                                             #关闭网络.
  151.         sleep 5                                                      #等待5秒.
  152.         svc data enable                                              #开启网络.
  153.         inss_c                                                       #调用自定义函数c,开启网络后3秒循环打印IP第二字节值,直到营运商给我分配IP.
  154.         inss_d                                                       #调用自定义函数inss_d打印路由.
  155.         for zhy in ${ip_addr_array[@]} ; do         
  156.             if ${bbox} [[ `inss_a ${c}` = $zhy ]] ; then             #一直循环直到IP的第二个字节值为我想要的.
  157.                 for zhn in ${ip_addr_array1[@]} ; do                 #把数组元素赋值给变量zhn.
  158.                     if ${bbox} [[ `inss_e ${c}` = $zhn ]] ; then     #判断数组元素是否等于自定义函数打印的值.
  159.                         inss_ip
  160.                         exit 1                                       #然后退出.
  161.                     fi
  162.                 done
  163.             fi
  164.         done   
  165.     done
  166. }

  167. inss_INIT
  168. while getopts :tc:hvV lm
  169. do
  170. case ${lm} in
  171.     t)
  172.         log=t
  173.         ;;
  174.     c)
  175.         #载入配置文件.
  176.         . $OPTARG
  177.         ;;
  178.     h)
  179.         inss_HELP
  180.         ;;
  181.     v|V)
  182.         inss_VERSION
  183.         ;;
  184. esac
  185. done
  186. shift $((OPTIND-1))
  187. test "${log}" = "t" && set -x
  188. inss_INIT
  189. inss_ROOT
  190. inss_a ${c}                                                      #调用自定义函数a打印一下IP的第二个字节值.
  191. inss_e ${c}
  192. inss_d
  193. inss_b ${c} 2> ${null}                                           #调用自定义函数b打印一下网络的状态.主要给我看的.
  194. inss_MAIN
  195. exit
  196. AIXIAO.
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

331

主题

729

帖子

3081

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3081
发表于 2015-9-16 21:43:49 | 显示全部楼层
厉害啊,不过手机折腾的确比较麻烦。

23

主题

132

帖子

2398

积分

金牌会员

Rank: 6Rank: 6

积分
2398
 楼主| 发表于 2015-9-17 19:07:22 | 显示全部楼层
爱特 发表于 2015-9-16 21:43
厉害啊,不过手机折腾的确比较麻烦。

自己动手实践实践,也蛮不错的,

12

主题

88

帖子

498

积分

中级会员

Rank: 3Rank: 3

积分
498
发表于 2015-9-20 11:40:10 来自手机 | 显示全部楼层
楼主终端模拟器怎么能显示中文,,,,

23

主题

132

帖子

2398

积分

金牌会员

Rank: 6Rank: 6

积分
2398
 楼主| 发表于 2015-9-20 12:11:20 | 显示全部楼层
小菜 发表于 2015-9-20 11:40
楼主终端模拟器怎么能显示中文,,,,

首选项 UTF-8

1

主题

17

帖子

221

积分

中级会员

Rank: 3Rank: 3

积分
221
QQ
发表于 2015-10-4 20:43:06 | 显示全部楼层
带走了,谢谢。

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2016-2-17 11:22:09 来自手机 | 显示全部楼层
,谢谢分享,收下了

23

主题

44

帖子

339

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
339
发表于 2018-4-27 19:10:36 | 显示全部楼层
很棒

23

主题

132

帖子

2398

积分

金牌会员

Rank: 6Rank: 6

积分
2398
 楼主| 发表于 2018-5-4 10:44:14 | 显示全部楼层

都好久了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|aite.xyz 官方论坛  

GMT+8, 2019-9-17 16:30 , Processed in 0.070637 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表