获取当前 PPTP IP 地址的 Linux 命令是什么?

获取当前 PPTP IP 地址的 Linux 命令是什么?

我有一个 Linux 脚本,它允许我通过 VPN 接口路由一些流量,并通过另一个接口路由其他流量(来自不同的 IP)。这是我的脚本:

echo "ip route del default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh
echo "ip route add default via 192.168.1.254 dev eth0;" >> /tmp/firewallscript.sh
echo "ip route add table 55 default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.41 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.42 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "ip rule add fwmark 55 table 55;" >> /tmp/firewallscript.sh

因为我的 VPN 的 IP 变化很大,所以我想“参数化”它。因此,不要写这行代码:

echo "ip route del default via 192.168.120.10 dev ppp0;" >> /tmp/firewallscript.sh

我需要写类似这样的内容:

echo "ip route del default via @MyVariableIP dev ppp0;" >> /tmp/firewallscript.sh

其中@MyVariableIP是ppp0的IP地址。所以我的问题是:

  1. 知道接口是 ppp0 的情况下,如何使用 bash 获取接口 IP 地址?
  2. 如何修改以前的脚本?

谢谢

答案1

  1. 在这个脚本的最后,你可以在 $ip_of_ppp0 变量中获取 ppp0 的 ip
  2. 将此脚本放在您的脚本之前,并将 @MyVariableIP 替换为 $ip_of_ppp0

    n=`ifconfig|grep -B10 'POINTOPOINT' | cut -d " " -f1 `
    m=`ifconfig|grep -B8 'POINTOPOINT'|cut -d " " -f12|grep 'addr:1'|cut -d ":" -f2 `
    f=`echo $n`
    l=`echo $m`
    arr=($f)
    amm=($l)
    h=0
    for i in "${arr[@]}"; do              
            ip=${amm[$h]}
            h=`expr $h+1`
            if [[ "$i" = "ppp0" ]]; then
                    ip_of_ppp0=$ip;
            fi    
    done
    echo $ip_of_ppp0;
    

相关内容