效果图:
代码:
# 实验六主机端口扫描程序
import socket
import tkinter.messagebox
from tkinter import *
from socket import *
class Scan:
def __init__(self):
self.fu = Tk()
self.fu.title("端口扫描序")
# 使用容器小组件
frame = Frame(self.fu)
frame.pack()
# 定义一个标签
self.label1 = Label(frame, text=" IP地址、域名:",)
self.label2 = Label(frame,text=" 起始端口(最小为1):")
self.label3 = Label(frame, text="结束端口(最大为65535):")
# 定义单行文本框
self.strs1 = StringVar()
self.entryip1 = Entry(frame, selectbackground="red", selectforeground="green", bd="3", relief='groove',
textvariable=self.strs1)
self.strs2 = StringVar()
self.entryip2 = Entry(frame, selectbackground="red", selectforeground="green", bd="3", relief='groove',
textvariable=self.strs2)
self.strs3 = StringVar()
self.entryip3 = Entry(frame, selectbackground="red", selectforeground="green", bd="3", relief='groove',
textvariable=self.strs3)
# 定义一个按钮
self.button = Button(self.fu, text="扫描",command=self.saomiao)
self.button.pack()
# 规划位置
self.label1.grid(row=1, column=1)
self.label2.grid(row=2, column=1)
self.label3.grid(row=3, column=1)
self.entryip1.grid(row=1, column=2)
self.entryip2.grid(row=2, column=2)
self.entryip3.grid(row=3, column=2)
self.fu.geometry("500x300+100+200")
# 设置多行文本框
self.text1 = Text(self.fu)
self.text1.pack()
self.fu.mainloop()
def saomiao(self):
self.text1.delete("1.0", "end")
try:
if int(self.strs2.get())<int(self.strs3.get()):
for port in range(int(self.strs2.get()), int(self.strs3.get())+1):
try:
s = socket()
s.connect((self.strs1.get(), port))
f1 = self.strs1.get()+":"+("%d")%port+"端口已开放"
self.text1.insert(END, f1+"\n")
s.close()
except Exception as e:
f2 = self.strs1.get()+":"+"%d"%port+"端口未开放"
self.text1.insert(END,f2+"\n")
self.text1.insert("end", "扫描完成!\n")
else:
tkinter.messagebox.showerror("error", "请输入正确范围内的端口号")
except Exception as e:
tkinter.messagebox.showerror("error", "请输入正确的端口号")
Scan()