diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/op_mode/show_openvpn.py | 23 | 
1 files changed, 19 insertions, 4 deletions
| diff --git a/src/op_mode/show_openvpn.py b/src/op_mode/show_openvpn.py index f7b99cc0d..9a5adcffb 100755 --- a/src/op_mode/show_openvpn.py +++ b/src/op_mode/show_openvpn.py @@ -26,10 +26,10 @@ outp_tmpl = """  {% if clients %}  OpenVPN status on {{ intf }} -Client CN       Remote Host           Local Host            TX bytes    RX bytes   Connected Since ----------       -----------           ----------            --------    --------   --------------- +Client CN       Remote Host            Tunnel IP        Local Host            TX bytes    RX bytes   Connected Since +---------       -----------            ---------        ----------            --------    --------   ---------------  {% for c in clients %} -{{ "%-15s"|format(c.name) }} {{ "%-21s"|format(c.remote) }} {{ "%-21s"|format(local) }} {{ "%-9s"|format(c.tx_bytes) }}   {{ "%-9s"|format(c.rx_bytes) }}  {{ c.online_since }} +{{ "%-15s"|format(c.name) }}  {{ "%-21s"|format(c.remote) }}  {{ "%-15s"|format(c.tunnel) }}  {{ "%-21s"|format(local) }} {{ "%-9s"|format(c.tx_bytes) }}   {{ "%-9s"|format(c.rx_bytes) }}  {{ c.online_since }}  {% endfor %}  {% endif %}  """ @@ -50,6 +50,19 @@ def bytes2HR(size):      output="{0:.1f} {1}".format(size, suff[suffIdx])      return output +def get_vpn_tunnel_address(peer, interface): +    lst = [] +    status_file = '/var/run/openvpn/{}.status'.format(interface) + +    with open(status_file, 'r') as f: +        lines = f.readlines() +        for line in lines: +            if peer in line: +                lst.append(line) +        tunnel_ip = lst[1].split(',')[0] + +        return tunnel_ip +  def get_status(mode, interface):      status_file = '/var/run/openvpn/{}.status'.format(interface)      # this is an empirical value - I assume we have no more then 999999 @@ -110,7 +123,7 @@ def get_status(mode, interface):                          'tx_bytes': bytes2HR(line.split(',')[3]),                          'online_since': line.split(',')[4]                      } - +                    client["tunnel"] = get_vpn_tunnel_address(client['remote'], interface)                      data['clients'].append(client)                      continue              else: @@ -173,5 +186,7 @@ if __name__ == '__main__':                  if len(remote_host) >= 1:                      client['remote'] = str(remote_host[0]) + ':' + remote_port +                client['tunnel'] = 'N/A' +          tmpl = jinja2.Template(outp_tmpl)          print(tmpl.render(data)) | 
