直接上代码
# -*- 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()
代码很丑,只是为实现功能而写(滑稽)
该版本为单线程 !!!
多线程还需要究一下