python学习之---端口扫描器(GUI版)

直接上代码

# -*- coding: utf-8 -*-
import socket
import re
from tkinter import *
# 扫描端口1.0.1版本
# 2021年6月28日


class port_Scan:
    def __init__(self):
        window = Tk()
        window.title(端口扫描)
        self.a=Label(window, text=ip=).grid(row=0, column=0)
        self.ip=Text(window, width=15, height=1, wrap=WORD, font=(楷体, 11))
        self.ip.grid(row=0, column=1)

        self.port = Text(window, width=6, height=1, wrap=WORD, font=(楷体, 11))
        self.port.grid(row=0, column=2)

        self.b = Button(window, text=开始扫描, command=self.check_ip).grid(row=0, column=3)

        self.result = Text(window, width=50, height=20, wrap=WORD, font=(宋体, 15))
        self.result.grid(row=1, column=0, rowspan=10, columnspan=10)

        window.mainloop()

    def Ip_portScan(self, ip, port):
        socket.setdefaulttimeout(1)
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:
            server.connect((ip, int(port)))
            self.result.delete(1.0, 2.0)
            self.result.insert(1.0, (ip, port, port, open))

        except:
            self.result.delete(1.0, 2.0)
            self.result.insert(1.0,(ip, port, port, down))

        finally:
            server.close()

    def check_ip(self):
        ip = self.ip.get(1.0, END).strip()
        port = self.port.get(1.0, END).strip()

        if ip ==  or port == :
            self.result.delete(1.0, 2.0)
            self.result.insert(1.0, ip或port不能为空)

        elif  not re.match(r"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]?)$", ip):
            self.result.delete(1.0, 2.0)
            self.result.insert(1.0, ip错误,请重新输入!)

        else:
            self.Ip_portScan(ip, port)

port_Scan()

代码很丑,只是为实现功能而写(滑稽)

该版本为单线程 !!!

多线程还需要究一下

经验分享 程序员 微信小程序 职场和发展