持续检查VPN连接 - Python

时间:2011-07-20 05:56:47

标签: python

是否有任何有效的方法来检查和报告日志文件或控制台上的信息?当VPN断开连接时?

import time
print time.asctime( time.localtime(time.time()) )

可以打印时间,但我不知道递归查找VPN是否处于活动状态的代码是什么。在一段时间(1)中ping它将是一种检查连接是否处于活动状态的愚蠢方法。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

这个解决方案依赖于系统,我知道它可以在Linux上运行,因为我已经做了类似的事情,但对Windows不太确定。我不知道你是否想要一个不涉及ping的解决方案,但我认为这是一个很好的解决方案。

import logging, os, time

PING_HOST='10.10.10.10'  # some host on the other side of the VPN

while True:
    retcode = os.system('ping -c 1 %s' % PING_HOST)

    if retcode:  
       # perform action for lost connection
       logging.warn('Lost visibility with %s' % PING_HOST)

    time.sleep(10)  # sleep 10 seconds

这是有效的,因为ping返回0的返回码是为了成功。所有其他返回代码表示错误。

答案 1 :(得分:0)

如果vpn的IP发生变化,您可以检查是否已建立隧道。

import psutil
import logging, os, time
import subprocess
import sys

procname = "yourprocess_name"

while True:
    cmdout = subprocess.Popen(["ifconfig | grep tun"],stdout = subprocess.PIPE, shell=True).communicate()[0]
    print "cmdout: "+str(cmdout)
    time.sleep(2)
    #-----
    if "tun" in cmdout:
        print "seems to be ok"
    if not "tun" in cmdout: 
        # perform action for lost connection
        print "killing "+str(procname)
        for proc in psutil.process_iter():
            # check whether the process name matches
            print "Listing procname: "+str(proc.name())
            if proc.name() == procname:
                proc.kill()
                sys.exit()

答案 2 :(得分:0)

此方法使用与IP(主要是公司的VPN)关联的主机“特定于连接的DNS后缀”的名称:

import os
import platform
def check_ping():
   hostname = "xyz.com" #hostname will be..Name under: "Connection-specific DNS Suffix" when you type "ipconfig" in cmd..
   response = os.system("ping " + ("-n 1 " if  platform.system().lower()=="windows" else "-c 1 ") + hostname)
   # and then check the response...
   if response == 0:
       pingstatus = "Network Active: Connected"
   else:
       pingstatus = "Network Error: Not Connected"

   return pingstatus
response = check_ping()
print(response)