網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
題目
請(qǐng)?jiān)O(shè)計(jì)并實(shí)現(xiàn)一款主機(jī)端口掃描程序。程序根據(jù)用戶輸入的域名或IP地址,可以查詢?cè)撝鳈C(jī)的開(kāi)放的端口號(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}已開(kāi)放\n"
except Exception as e:
str1 += f"{ip}:{port}未開(kāi)放\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-06-01 Python中plt.plot()、plt.scatter()和plt.legend函數(shù)的用法示例_
- 2022-12-28 jquery點(diǎn)擊獲取動(dòng)態(tài)數(shù)據(jù)進(jìn)行傳參問(wèn)題_jquery
- 2023-03-01 React?useState的錯(cuò)誤用法避坑詳解_React
- 2022-05-05 C#?模式匹配完全指南_C#教程
- 2022-11-29 Mybatis中如何傳入map參數(shù)呢?
- 2022-10-22 如何在Go中使用Casbin進(jìn)行訪問(wèn)控制_Golang
- 2022-12-23 Mariadb數(shù)據(jù)庫(kù)主從復(fù)制同步配置過(guò)程實(shí)例_mariadb
- 2023-05-22 pycharm中執(zhí)行.sh文件的方法步驟_python
- 最近更新
-
- 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)證過(guò)濾器
- 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)程分支