chnroutes icon indicating copy to clipboard operation
chnroutes copied to clipboard

[建议]增加一个generate_ddwrt模式

Open sagan opened this issue 12 years ago • 2 comments

  1. dd wrt只有 /bin/sh,没有 /bin/bash
  2. 目前dd wrt不支持 ip -batch
  3. 目前dd wrt无法用ip route show 0/0 | head -n1 | grep 'via' | grep -Po '\d+.\d+.\d+.\d+' 获取默认网关, 需要用nvram get wan_gateway
def generate_ddwrt(metric):
    results = fetch_ip_data()

    upscript_header = """\
#!/bin/sh

export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin"

OLDGW=$(nvram get wan_gateway)
if [ $OLDGW == '' ]
then
    exit 1
fi

"""
    downscript_header = """\
#!/bin/sh

export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/jffs/sbin:/jffs/bin:/jffs/usr/sbin:/jffs/usr/bin:/mmc/sbin:/mmc/bin:/mmc/usr/sbin:/mmc/usr/bin:/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin"

"""

    upfile = open('vpn-up.sh', 'w')
    downfile = open('vpn-down.sh', 'w')

    upfile.write(upscript_header)
    downfile.write(downscript_header)

    for ip, mask, _ in results:
        upfile.write('route add -net %s netmask %s gw $OLDGW metric %d\n' % (ip, mask, metric))
        downfile.write('route del -net %s netmask %s metric %d\n' % (ip, mask, metric))

    upfile.write('\n')
    downfile.write('\n')

    upfile.close()
    downfile.close()

    os.chmod('vpn-up.sh', 00755)
    os.chmod('vpn-down.sh', 00755)

sagan avatar Aug 28 '12 11:08 sagan

PATH略长啊…手头没DD-WRT设备,而且觉得这种没iproute2的还是用mac版稍微改改吧…

jimmyxu avatar Sep 02 '12 14:09 jimmyxu

Android 里 busybox 的那个 grep 也不带 -P,并且 ip 也不能用 -batch,所以我在 Android 上用的时候是这样的:

#!/system/xbin/bash -
OLDGW=$(ip route show 0/0 | head -n1 | grep 'via' | awk '{print $3}')
ip route add 1.0.1.0/24 via $OLDGW
ip route add 1.0.2.0/23 via $OLDGW
ip route add 1.0.8.0/21 via $OLDGW
....

执行时间倒也不是特别长,三千多条记录,在 vision 上大概 30s 也就执行完毕了,比 route add 好多了……

wzyboy avatar Sep 18 '12 08:09 wzyboy