Detect gateway dynamically
This commit is contained in:
parent
73fdf47d35
commit
53ac0233ca
24
pinger.py
24
pinger.py
|
@ -49,6 +49,8 @@ import argparse
|
||||||
import sys
|
import sys
|
||||||
# For graphing
|
# For graphing
|
||||||
import cairo
|
import cairo
|
||||||
|
# For IP addresses
|
||||||
|
import socket, struct
|
||||||
|
|
||||||
# Vars
|
# Vars
|
||||||
startup_active_label = "✓ Start Automatically"
|
startup_active_label = "✓ Start Automatically"
|
||||||
|
@ -85,9 +87,10 @@ for arg in sys.argv[1:]:
|
||||||
if args.target:
|
if args.target:
|
||||||
host = args.target
|
host = args.target
|
||||||
else:
|
else:
|
||||||
host = "8.8.8.8" # IP or hostname of WAN
|
|
||||||
router = "192.168.1.1" # IP or hostname of router
|
|
||||||
print "Using default target of 8.8.8.8"
|
print "Using default target of 8.8.8.8"
|
||||||
|
host = "8.8.8.8" # IP or hostname of WAN
|
||||||
|
|
||||||
|
router = "192.168.1.1" # IP or hostname of router
|
||||||
|
|
||||||
if args.freq:
|
if args.freq:
|
||||||
try:
|
try:
|
||||||
|
@ -214,7 +217,7 @@ class Pinger:
|
||||||
host_avg = sum(self.host_log)/len(self.host_log)
|
host_avg = sum(self.host_log)/len(self.host_log)
|
||||||
self.ping_menu.set_label("Internet: "+str(int(round(self.host_log[-1])))+" ms "+str(int(round(host_avg)))+" avg")
|
self.ping_menu.set_label("Internet: "+str(int(round(self.host_log[-1])))+" ms "+str(int(round(host_avg)))+" avg")
|
||||||
if len(self.router_log) > 0:
|
if len(self.router_log) > 0:
|
||||||
self.draw_log(ctx, self.router_log, self.icon_height/2)
|
self.draw_log(ctx, self.router_log, (self.icon_height/2)+1)
|
||||||
router_avg = sum(self.router_log)/len(self.router_log)
|
router_avg = sum(self.router_log)/len(self.router_log)
|
||||||
self.router_menu.set_label("Router: "+str(int(round(self.router_log[-1])))+" ms "+str(int(round(router_avg)))+" avg")
|
self.router_menu.set_label("Router: "+str(int(round(self.router_log[-1])))+" ms "+str(int(round(router_avg)))+" avg")
|
||||||
|
|
||||||
|
@ -243,7 +246,7 @@ class Pinger:
|
||||||
self.draw_rect( ctx, [index,(self.icon_height/2)+yOffset], [1,(-self.icon_height/2)-1], danger_color )
|
self.draw_rect( ctx, [index,(self.icon_height/2)+yOffset], [1,(-self.icon_height/2)-1], danger_color )
|
||||||
else:
|
else:
|
||||||
# draw normal bar
|
# draw normal bar
|
||||||
bar_height = -int(self.scale(ping, (0,max_ping), (0,self.icon_height/2)))
|
bar_height = -int(self.scale(ping, (0,max_ping), (0,(self.icon_height/2)-1)))
|
||||||
|
|
||||||
if bar_height > -1:
|
if bar_height > -1:
|
||||||
bar_height = -1
|
bar_height = -1
|
||||||
|
@ -268,6 +271,16 @@ class Pinger:
|
||||||
scale = ((val - src[0]) / (src[1]-src[0])) * (dst[1]-dst[0]) + dst[0]
|
scale = ((val - src[0]) / (src[1]-src[0])) * (dst[1]-dst[0]) + dst[0]
|
||||||
return scale
|
return scale
|
||||||
|
|
||||||
|
def get_default_gateway_linux(self):
|
||||||
|
# Read the default gateway directly from /proc.
|
||||||
|
with open("/proc/net/route") as fh:
|
||||||
|
for line in fh:
|
||||||
|
fields = line.strip().split()
|
||||||
|
if fields[1] != '00000000' or not int(fields[3], 16) & 2:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return str(socket.inet_ntoa(struct.pack("<L", int(fields[2], 16))))
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Handle ctrl-c
|
# Handle ctrl-c
|
||||||
signal.signal(signal.SIGINT, self.destroy)
|
signal.signal(signal.SIGINT, self.destroy)
|
||||||
|
@ -303,6 +316,9 @@ class Pinger:
|
||||||
self.create_menu_item("Exit", self.destroy)
|
self.create_menu_item("Exit", self.destroy)
|
||||||
self.ind.set_menu(self.menu)
|
self.ind.set_menu(self.menu)
|
||||||
|
|
||||||
|
# set router / gateway dynamically
|
||||||
|
router = self.get_default_gateway_linux()
|
||||||
|
|
||||||
# start the ping process
|
# start the ping process
|
||||||
self.counter = 0
|
self.counter = 0
|
||||||
self.timeout = ping_frequency
|
self.timeout = ping_frequency
|
||||||
|
|
Loading…
Reference in New Issue
Block a user