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()

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

该版本为单线程 !!!

多线程还需要究一下

猜你喜欢

转载自blog.csdn.net/weixin_44372245/article/details/118573450