PythonTkinter 练习11之 自编工具 扫描地址段IP

#Time: 2020/03/05
#Author: Xiaohong
#运行环境: OS: Win7 64位 专业版Pack1
#  Python: 3.7
功能:输入要扫描的地址段,检测哪些地址可以ping通

q缺点:1. 只考虑IPV4地址  2.只考虑Windows平台

Toolbox_main.py

import tkinter  as tk
from Tl_baidu_scan_screen import *
from Tl_ip_scan_screen import *class Win_Program:def __init__(self):self.master = tk.Tk()self.master.state("zoomed") # 窗口最大化self.master.title("Xiaohong's Toolbox")self.master.grid()self.SetupUI()def SetupUI(self):# 获取屏幕长/宽Screen_width = self.master.winfo_screenwidth()Screen_height = self.master.winfo_screenheight()print(Screen_height,Screen_width)fm1=tk.LabelFrame(self.master,text='爬取部分',padx=5,pady=5,width=800,height=100)fm1.grid(row=0,column=1,padx=10,pady=10)button1=tk.Button(fm1,text='baidu图片识别',command=lambda:self.Call_baidu_scan_win(self.master,Screen_width,Screen_height))button1.grid(row=0,column=1,padx=5,pady=0)fm2=tk.LabelFrame(self.master,text='其他部分',padx=5,pady=5,width=800,height=100)fm2.grid(row=1,column=1,padx=10,pady=10)button2=tk.Button(fm2,text='IP 地址扫描',command=lambda:self.Call_ip_scan_win(self.master,Screen_width,Screen_height))button2.grid(row=0,column=1,padx=5,pady=0)def Call_baidu_scan_win(self,father_win,Screen_width,Screen_height):Tl_baidu_scan_screen(father_win,Screen_width,Screen_height)passdef Call_ip_scan_win(self,father_win,Screen_width,Screen_height):Tl_ip_scan_screen(father_win,Screen_width,Screen_height)passif __name__ == "__main__":win_program = Win_Program()tk.mainloop()

Tl_ip_scan_screen.py:  (重点在 第  70 行 正则表达式来判断 是否符合IPV4的地址)

import tkinter  as tk
import re
import tkinter.messagebox
from Tl_ip_scan import *class Tl_ip_scan_screen:def __init__(self,father_win,Screen_width,Screen_height):self.master = tk.Toplevel(father_win)self.master.title('IP 地址扫描')# 创建的Toplevel对象 在最上层self.master.attributes("-toolwindow", 1)self.master.wm_attributes("-topmost", 1)self.master.grid()width = 660height = 420x = Screen_width / 2 - width / 2y = Screen_height / 2 - height / 2self.master.geometry('%dx%d+%d+%d' % (width, height, x, y))self.master.grid()self.SetupUI()def SetupUI(self):entry_validate=self.master.register(self.check_vaild)fm1=tk.LabelFrame(self.master,text='IP 地址段',padx=5,pady=5,width=600,height=100)fm1.grid(row=0,column=1,columnspan=2,padx=5,pady=5)lb1=tk.Label(fm1,text='IP 从')lb1.grid(row=0,column=1)# 设定默认值web_site = tk.StringVar()web_site.set('192.168.101.26')web_site_value = tk.Entry(fm1, textvariable=web_site, font=('Arial', 10),width=15,validate='focusout',vcmd=(entry_validate,'%P'))web_site_value.grid(row=0,column=2)lb1=tk.Label(fm1,text='到')lb1.grid(row=0,column=3)web_site_to = tk.StringVar()web_site_to.set('192.168.101.30')web_site_to_value = tk.Entry(fm1, textvariable=web_site_to, font=('Arial', 10), width=15, validate='focusout',vcmd=(entry_validate, '%P'))web_site_to_value.grid(row=0,column=4)button1=tk.Button(fm1,text='扫描',command=lambda :self.Call_ip_Scan(web_site_value.get(),web_site_to_value.get(),lb1=lb1,lb2=lb2))button1.grid(row=0,column=5,padx=2)button2 = tk.Button(fm1, text='返回', command=self.master.quit)button2.grid(row=0, column=6)fm3 = tk.LabelFrame(self.master,text='OK结果', padx=5, pady=5, width=400, height=250)fm3.grid(row=1, column=1,padx=5, pady=5,sticky='w')lb1 = tk.Listbox(fm3,height=9)lb1.grid(row=0,column=1)fm4 = tk.LabelFrame(self.master,text='NO结果', padx=5, pady=5, width=400, height=250)fm4.grid(row=1, column=2,padx=5, pady=5,sticky='w')lb2 = tk.Listbox(fm4,height=9)lb2.grid(row=0,column=2)self.master.mainloop()def check_vaild(self,content):if content=="":return true#用正则表达式来判断是否是IPV4的地址if re.match(r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",content):return Trueelse:tkinter.messagebox.showerror(title='操作失败', message='无效的IP地址:' + content)return Falsedef Call_ip_Scan(self,ip_from,ip_to,lb1,lb2):if self.check_vaild(ip_from):if self.check_vaild(ip_to):# 找到ip地址的最后一部分,如192.168.101.26 ,取出26ip_from_end = ip_from[ip_from.rfind('.')+1:]ip_to_end = ip_to[ip_to.rfind('.') + 1:]# 找到ip地址的前3部分,如192.168.101.26 ,取出 192.168.101.ip_from_begin = ip_from[:ip_from.rfind('.') + 1]ip_list=[]# 生成待扫描的IP地址列表for i in range(int(ip_from_end),int(ip_to_end)+1):ip_list.append(ip_from_begin+str(i))reachlb,unreachlb=Tl_ip_scan(ip_list)for i in reachlb:lb1.insert(tk.END,i)for i in unreachlb:lb2.insert(tk.END, i)

Tl_ip_scan.py (重点在 第  15 行  、第   25 行) 多线程执行Ping 命令

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
import threading
import os
import platformglobal unreach_list,reach_list,platOSunreach_list=list()  #保存无法ping通的ip list
reach_list=list()   #保存可以ping通的ip list#根据不同的OS,调用不同的命令语句
def is_reacheable(ip):backinfo = subprocess.os.system('ping -n 1 -w 1 %s >nul' % ip)  # 实现pingIP地址的功能,-n1指发送报文一次,-w1指等待1毫秒if backinfo:  # 返回值非0,代表无法pingt通unreach_list.append(ip)else:  # 返回值为0,代表pingt通reach_list.append(ip)def Tl_ip_scan(ip_list):threads = []for line in ip_list:thr = threading.Thread(target=is_reacheable, args=(line,))thr.start()threads.append(thr)for thr in threads:thr.join()return reach_list,unreach_list

运行的效果是:

PythonTkinter 练习11之 自编工具 扫描地址段IP相关推荐

  1. PythonTkinter 练习16之 自编工具 扫描 WIFI

    PythonTkinter 练习16之 自编工具 扫描 WIFI #Time: 2020/03/21 #Author: Xiaohong #运行环境: OS: Win7 64位 专业版Pack1 # ...

  2. Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹

    Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹 Nmap工具的准备工作 当用户对Nessus工具有清晰的认识后,即可使用该工具实施扫描.但是,在扫描之前需要做一些准备工作,如探测网络中活动的主 ...

  3. Spring - Java/J2EE Application Framework 应用框架 第 11 章 使用ORM工具进行数据访问

    第 11 章 使用ORM工具进行数据访问 11.1. 简介 Spring在资源管理,DAO实现支持以及实物策略等方面提供了与Hibernate, JDO和iBATIS SQL映射的集成. 对Hiber ...

  4. 搭建微步蜜罐,启动通用OA系统仿真登陆蜜罐,使用awvs来去进行扫描通用OA系统仿真登陆蜜罐,nmap工具扫描搭建蜜罐的系统。

    (1) 运行版本HFish:docker run -itd --name hfish \ -v /usr/share/hfish:/usr/share/hfish \ --network host \ ...

  5. 【PC工具】更新简单好用绿色IP地址扫描工具,内部网络设备查看工具,内网ip查询ip扫描工具,电脑IP地址查看方法...

    玩路由器.NAS和树莓派的朋友经常需要查看内网设备ip地址.尤其是树莓派,一般情况不用桌面系统,登录SSH时候经常需要知道树莓派的ip地址.登录路由器可以查看到局域网内设备的ip地址,但很多情况下不方 ...

  6. PVS-Studio C/C++/C++11 静态代码分析工具

    PVS-Studio C/C++/C++11 静态代码分析工具 静态代码分析仪是一种检测代码缺陷.分析对比 商业代码的工具,它分析源代码和它生成的目标 文件,但并不实际运行源代码.应用于对安全性. 稳 ...

  7. 【PC工具】可能是最好用最方便的内部网络设备查看工具,内网ip查询ip扫描工具...

    玩路由器.NAS和树莓派的朋友经常需要查看内网设备ip地址.尤其是树莓派,一般情况不用桌面系统,登录SSH时候经常需要知道树莓派的ip地址.登录路由器可以查看到局域网内设备的ip地址,但很多情况下不方 ...

  8. 创新点子:博客图文混编工具

    创新点子:博客图文混编工具 现在的博客客户端没有一个用着顺手的,为什么?因为插入图片太难了. 我首先要确认我的博客是否支持上传图片,然后,我要找到这个上传图片的按钮,并且经历一堆界面找到我硬盘上的图片 ...

  9. 端口扫描工具 Censys 和 Criminal IP 比较

    在外部扫描端口的工具中,有几种可以免费.在网页上使用的工具. 我在IP地址扫描开放端口时经常使用的工具是search.censys.io ,因为在这里可以扫描的端口号码最多 而且去年新开的crimin ...

  10. 干货收藏 |关键词优化攻略!(附11款关键词检索工具)

    关键字搜索是买家查找产品的方式,一个高质量的关键词可以帮助卖家快速增加曝光率.简而言之,利用好关键词机理,能让我们的产品产生更有利的排名因素. 那如何找到合适的关键字,设置关键字时应该注意什么? 今天 ...

最新文章

  1. IT餐馆—第二回 私活
  2. Java Swing Awt
  3. Android Fragment 真正的完全解析(下)
  4. KEIL-MDK 5 CMSIS的问题
  5. sqlserver存储过程的参数传递注意事项
  6. Sentinel(二十)之Envoy RLS Token Server
  7. tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...
  8. 新iPhone将采用更大容量电池:最低3110mAh?
  9. IEEE ISO/IEC简介
  10. 中国特种可注射仿制药市场趋势报告、技术动态创新及市场预测
  11. AJAX JSON之讲解
  12. 201512-1-数位之和
  13. awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
  14. 美团饿了么外卖推广联盟导航的小程序实现推广无力时候该不该卖掉变现
  15. SolidWorks工装 焊接 夹具 治具 检具 3D图档-350套(9.2G)
  16. c语言延时100us程序,编写100MS软件延时程序 汇编语言编写延时程序
  17. STATA如何查找命令的帮助文件
  18. ts.to_csv('examples/tseries.csv') !type examples\tseries.csv失败的问题
  19. uni app 安装 vconsole
  20. 【测试沉思录】22. 前端性能测试怎么做?

热门文章

  1. 谷歌Google搜索语法
  2. 后缀–ize_以ize结尾的英语单词
  3. 计算机网络由通讯子网和什么组成,计算机网络由通信子网和什么子网组成
  4. 【GZH逸佳君】简约ppt模板-答辩ppt模板-毕业季ppt模板-说课ppt模板-ppt模板免费下载-ppt模板下载免费版
  5. LED降压恒流驱动芯片适用于LED电动车/摩托/汽车大灯方案
  6. python取字母以及数字随机数
  7. 已解决IndentationError: unindent does not match any outer indentation level
  8. 【考研词汇训练营】Day 6 —— eventually,state,create,productivity,stimulate
  9. 关于 PDCA 的个人理解
  10. 每日一题:每天都可以学习新的知识