網(wǎng)站首頁 編程語言 正文
題目
請(qǐng)?jiān)O(shè)計(jì)并實(shí)現(xiàn)一款主機(jī)端口掃描程序。程序根據(jù)用戶輸入的域名或IP地址,可以查詢?cè)撝鳈C(jī)的開放的端口號(hào)。 例如:
并有一定的異常處理
參考code
import tkinter
from tkinter import *
import socket
import tkinter.messagebox
class CheckPort:
def __init__(self):
window = Tk()
window.title("端口掃描")
window.geometry("600x500")
frame1 = Frame(window)
frame1.pack()
Label(frame1, text="IP地址、域名:", bg="#f0f0f0").grid(row=0, column=1, pady=3)
Label(frame1, text="起始端口(最小為1):", bg="#f0f0f0").grid(row=1, column=1, pady=3)
Label(frame1, text="結(jié)束端口(最大為65535):", bg="#f0f0f0").grid(row=2, column=1, pady=3)
self.searchText = StringVar()
Entry(frame1, textvariable=self.searchText, justify=LEFT).grid(row=0, column=2)
self.originPort = IntVar()
Entry(frame1, textvariable=self.originPort, justify=LEFT).grid(row=1, column=2)
self.endPort = IntVar()
Entry(frame1, textvariable=self.endPort, justify=LEFT).grid(row=2, column=2)
Button(frame1, text="掃描", command=self.getRes).grid(row=3, column=1, columnspan=2, pady=3)
frame2 = Frame(window).pack()
self.resText = Text(frame2, height=50, width=500, wrap=WORD)
self.resText.pack()
window.mainloop()
def getRes(self):
try:
ip = socket.gethostbyname(self.searchText.get())
str1 = ""
if 1 <= self.originPort.get() <= self.endPort.get() <= 65535:
for port in range(self.originPort.get(), self.endPort.get() + 1):
try:
socket.setdefaulttimeout(1)
client = socket.socket()
client.connect((ip, port))
client.shutdown(1)
str1 += f"{ip}:{port}已開放\n"
except Exception as e:
str1 += f"{ip}:{port}未開放\n"
pass
str1 += f"掃描完成\n"
self.resText.insert(END, str1)
else:
self.errorHandle("請(qǐng)輸入正確的端口號(hào)!")
except:
self.errorHandle("請(qǐng)輸入正確的域名或者ip地址!")
def errorHandle(self, message):
tkinter.messagebox.showerror(title="error", message=message)
CheckPort()
原文鏈接:https://blog.csdn.net/m0_51126511/article/details/128168854
相關(guān)推薦
- 2022-08-21 python數(shù)字圖像處理之基本形態(tài)學(xué)濾波_python
- 2022-07-10 Executor 線程池技術(shù)詳解
- 2022-08-31 Linux環(huán)境下安裝python3_python
- 2021-12-02 C語言GetStdHandle函數(shù)使用方法_C 語言
- 2022-09-12 .Net6集成IdentityServer4?+AspNetCore?Identity讀取數(shù)據(jù)表用戶
- 2022-12-31 C++淺析序列數(shù)據(jù)封裝與優(yōu)化實(shí)現(xiàn)方法_C 語言
- 2022-10-22 redis緩存一致性延時(shí)雙刪代碼實(shí)現(xiàn)方式_Redis
- 2023-02-18 C#調(diào)用EXE文件實(shí)現(xiàn)傳參和獲取返回結(jié)果_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支