我想使用Foxboard一个简单的networking监视器为多个路由器(所有的路由器连接到互联网)。 Foxboard是一个带Debianembedded式版本的迷你电脑。
我的想法是使用像这样的多个虚拟networking设备:
我发现了一个很好的Python脚本来ping外部主机(来自Ryan Cox的解决scheme): https : //stackoverflow.com/questions/316866/ping-a-site-in-python
当我ping通www.site-a.com和eth0:1时,是否可以configurationDebian来使用eth0?
这取决于各个站点所在的IP地址,但总的来说,这可以通过使用静态路由来实现。 您可以通过/etc/network/routes文件在Debian上configuration静态路由。
一个警告:如果这些网站都是在同一个IP地址的虚拟主机,你将无法做到这一点。
# Destination Gateway Netmask Interface 192.0.2.25 192.168.2.1 255.255.255.255 eth0 198.51.100.92 192.168.3.1 255.255.255.255 eth0.1
这里是完整的脚本,也许对任何正在寻找廉价和低能耗networking监视器的人来说都是有用的(感谢Ryan Cox,见主题开始)。 我认为它也将运行在一个覆盆子板上。
我做了一个cronjob,每5分钟运行一次这个脚本。
记得也要为smtp服务器设置一个路由,否则邮件信息将无法到达你:-)
from threading import Thread import subprocess from Queue import Queue num_threads = 4 queue = Queue() ips = ["8.8.8.8","8.8.4.4","173.194.67.94","217.10.79.9"] modem = ["modem1 - entrance - network 10.0.0.1","modem2 - basement - network 10.2.0.1","modem3 - office - network 10.3.0.1", "modem4 - office2 - network 10.4.0.1"] #wraps system ping command def mail_error(ip): password = False if ip == "173.194.67.94" or "8.8.8.8": smtp_host = "smtphost1" poort = 25 else: smtp_host = "smtphost2" poort = 587 password = True import smtplib from email.mime.text import MIMEText text = "Network error ip address %s" % modem[ips.index(ip)] msg = MIMEText(text) msg['Subject'] = 'Network wrror %s' % modem[ips.index(ip)] me = "mymailaddress" you = "mymailaddress" msg['From'] = me msg['To'] = you s = smtplib.SMTP(smtp_host,poort) if password: s.login("username", "pass") s.sendmail(me, [you], msg.as_string()) s.quit() def pinger(i, q): """Pings subnet""" while True: ip = q.get() print "Thread %s: Pinging %s" % (i, ip) ret = subprocess.call("ping -c 1 %s" % ip, shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT) if ret == 0: print "%s: is alive" % ip else: print "%s: did not respond" % ip mail_error(ip) q.task_done() #Spawn thread pool for i in range(num_threads): worker = Thread(target=pinger, args=(i, queue)) worker.setDaemon(True) worker.start() #Place work in queue for ip in ips: queue.put(ip) #Wait until worker threads are done to exit queue.join()