#! /usr/bin/python # -*- coding: utf-8 -*- """ Valid-License-Identifier: GPL-2.0-only SPDX-URL: https://spdx.org/licenses/GPL-2.0-only.html (c) 2012 micha@librelight.de """ import os import time import struct import sys import tkinter as Tkinter import _thread as thread import nodescan title = "TK-Ping" sys.stdout.write("\x1b]2;"+title+"\x07") font1 = ("freemonobold", 8) font2 = ("freemonobold", 8)#12) # 10 font3 = ("freemonobold", 8) #12) # 16 font20 = font=("freemonobold", 12) # 22 font120 = font=("freemonobold", 22) # 22 root = Tkinter.Tk() #root.geometry("900x700+100+100") #root.geometry("500x800+100+100") root.geometry("400x600+100+100") root.title( title) eframe = Tkinter.Frame(root) eframe.pack(side="top",expand=0,fill="x") eframe1 = Tkinter.Frame(root) eframe1.pack(side="top",expand=1,fill="both") #-------------------------------------------- line line_frame = Tkinter.Frame(eframe) line_frame.pack(side="top",expand=0,fill="x") local_ips = [] #local_ips.append("2.0.0.255") cmd='ip a | grep " inet " | cut -d " " -f 6 | sort -h' r=os.popen(cmd) print("cmd",cmd) txt=r.readlines() for ip in txt: ip = ip.strip() print([ip]) if ip.startswith("127."): continue if ip.count(".") != 3: continue print("-",ip) local_ips.append(ip) #-------------------------------------------- line lb = Tkinter.Label(line_frame,text="ping -c1 ",width=8,font=font2) #,state="disabled") lb.pack(side="left",expand=0,fill="y") #lb.insert("end","ping -c1 ") #-------------------------------------------- line #local_ips.sort() option_list=local_ips p_variable = Tkinter.StringVar(root) p_variable.set(option_list[0]) # default value e_poll_new = Tkinter.OptionMenu(line_frame, p_variable,*option_list) e_poll_new.configure(font=font2) e_poll_new.configure(width=16) e_poll_new["bg"] = "#fff" #print(dir(e_poll_new)) e_poll_new.option_add("end","") #', 'option_clear', 'option_get e_poll_new.option_add("end","215.0.0.0") e_poll_new.pack(side="left") #exit() import queue q = queue.Queue() def clear_list(): b_scan.delete("0.0","end") def sort_list(): lines = b_scan.get("0.0","end") lines = lines.split("\n") lines = list(set(lines)) lines.sort() b_scan.delete("0.0","end") for line in lines: print("-",[line]) if line: b_scan.insert("end",line+"\n") count_list() def count_list(): lines = b_scan.get("0.0","end") lines = lines.split("\n") lines = list(set(lines)) lines.sort() i=0 for line in lines: if line.strip(): i+=1 b_count["text"] = str(i) def clean_ip(ip): if "/" in ip: ip = ip.split("/")[0] ip = ip.replace("_","") ip = ip.split(".") ip = "{}.{}.{}.{}".format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3])) return ip def prettier_ip(ip): if "/" in ip: ip = ip.split("/")[0] ip = ip.replace("_","") ip = ip.split(".") ip = "{:03}.{:03}.{:03}.{:03}".format(int(ip[0]),int(ip[1]),int(ip[2]),int(ip[3])) return ip def cmd(IP): #print("IP:",IP) #b_scan.insert("end",IP+"\n") ip = "xxx" try: myip = p_variable.get() # = Tkinter.StringVar(root) myip = clean_ip(myip) except Exception as e: print("err",e) CMD = "ping -c1 '{}' 2> /dev/null".format(clean_ip(IP)) print(CMD) r=os.popen(CMD) #CMD = "ping -c1 '{}' 2> /dev/null".format(IP) for line in r.readlines(): #print([line]) #print(IP,[line],CMD) if " packets transmitted" in line and not "100%" in line: print(IP,[line],CMD) if myip in clean_ip(IP): b_scan.insert("end",str(IP).ljust(50," ")+str(" OK <-- me ")+"\n") else: b_scan.insert("end",str(IP).ljust(50," ")+str(" OK")+"\n") count_list() ping_lock=0 def _ping(): global ping_lock if ping_lock: return btn_ping["bg"] = "orange" ping_lock=1 b_scan.insert("end","\n") ip = p_variable.get() # = Tkinter.StringVar(root) ip = ".".join(ip.split(".")[:-1]) print("ip",ip) out=[] for i in range(1,255): IP="{}.{}".format(ip,i) IP= prettier_ip(IP) out.append(IP) for o in out: print(":",o) for IP in out: thread.start_new_thread(cmd,(IP,)) ping_lock=0 btn_ping["bg"] = "green" def ping(): thread.start_new_thread(_ping,()) #node_cmd_recive, () ) #-------------------------------------------- line btn_ping = Tkinter.Button(line_frame,text="start Ping",width=7,command=ping,font=font2) btn_ping.pack(side="left",expand=0,fill="y") #-------------------------------------------- line b_scan2 = Tkinter.Button(line_frame,text="sort",width=2,command=sort_list,font=font2) b_scan2.pack(side="left",expand=0,fill="y") #-------------------------------------------- line b_scan2 = Tkinter.Button(line_frame,text="clear",width=2,command=clear_list,font=font2) b_scan2.pack(side="left",expand=0,fill="y") #-------------------------------------------- line b_count = Tkinter.Button(line_frame,text="0",width=1,font=font2) b_count.pack(side="left",expand=0,fill="y") #-------------------------------------------- line eframe10 = Tkinter.Frame(eframe1) eframe10.pack(side="top",expand=1,fill="both") scroll_bar = Tkinter.Scrollbar(eframe10) scroll_bar.pack(side="right", fill="y") b_scan = Tkinter.Text(eframe10,width=16,font=font1,yscrollcommand = scroll_bar.set) b_scan.pack(side="left",expand=1,fill="both") scroll_bar.config( command = b_scan.yview ) #-------------------------------------------- line root.mainloop()