網(wǎng)站首頁 編程語言 正文
作為開發(fā)人員經(jīng)常需要查看服務(wù)的端口開啟狀態(tài)判斷服務(wù)是否宕機(jī)。
特別是部署的服務(wù)比較多的情況下,可能存在幾個(gè)甚至幾十個(gè)服務(wù)端口的占用,于是我利用socket不斷向服務(wù)發(fā)送請求的方式來判斷端口服務(wù)是否已經(jīng)完成開啟。
其中加入多進(jìn)程的調(diào)用方式來提高端口掃描的效率,供大家參考!
首先,我們將需要的python模塊全部導(dǎo)入到我們的代碼塊中,若是沒有安裝的模塊使用pip的當(dāng)時(shí)安裝一下即可。
#?Importing?the?socket?module.
import?socket
#?Importing?the?datetime?module?from?the?datetime?package.
from?datetime?import?datetime
#?It's?a?shortcut?for?`from?multiprocessing?import?Pool`
from?multiprocessing.dummy?import?Pool
#?It's?a?shortcut?for?`from?loguru?import?logger`
from?loguru?import?logger
然后,創(chuàng)建一個(gè)端口掃描類PortScanner來完成對整個(gè)業(yè)務(wù)邏輯的處理,另外,封裝到類中也便于大家參考和修改。
class?PortScanner:
????def?__init__(self):
????????"""
????????A?constructor.?It?is?called?when?an?object?is?created?from?a?class?and?it?allows?the?class?to?initialize?the
????????attributes?of?a?class.
????????"""
????????super(PortScanner,?self).__init__()
????????self.remote_ip?=?None
????????self.ports?=?[]
????def?scanner(self,?port):
????????"""
????????It?scans?the?port.
????????:param?port:?The?port?you?want?to?scan
????????"""
????????try:
????????????socket_?=?socket.socket(socket.AF_INET,?socket.SOCK_STREAM)
????????????result_?=?socket_.connect_ex((self.remote_ip,?port))
????????????if?result_?==?0:
????????????????logger.info('地址:{}?端口:{}?已成功開啟!'.format(self.remote_ip,?port))
????????????else:
????????????????logger.info('地址:{}?端口:{}?未開啟!'.format(self.remote_ip,?port))
????????except?Exception?as?e:
????????????logger.error('端口掃描出現(xiàn)異常!')
????????finally:
????????????socket_.close()
????def?start(self):
????????"""
????????It?starts?the?game.
????????"""
????????remote_server?=?input("輸入要掃描的主機(jī)地址(127.0.0.1):")
????????if?remote_server.strip()?==?'':
????????????remote_server?=?'127.0.0.1'
????????self.remote_ip?=?socket.gethostbyname(remote_server)
????????port_range?=?input("輸入要掃描的端口范圍(1,50000):")
????????scanner_ports?=?[]
????????if?port_range.strip()?==?'':
????????????port_range?=?'1,50000'
????????scanner_ports?=?[n?for?n?in?range(int(port_range.split(',')[0]),?int(port_range.split(',')[1]))]
????????socket.setdefaulttimeout(0.5)
????????start_?=?datetime.now()
????????pool?=?Pool(processes=10)
????????pool.map(self.scanner,?scanner_ports)
????????pool.close()
????????pool.join()
????????end_?=?datetime.now()
????????logger.info('所有端口掃描已完成,總共耗時(shí):{}'.format(str(end_?-?start_)))
使用python模塊中的main函數(shù)調(diào)用整個(gè)端口掃描器執(zhí)行掃描任務(wù)。
#?It's?a?common?idiom?to?determine?if?the?script?is?being?run?directly?or?being?imported.
if?__name__?==?'__main__':
????scanner_?=?PortScanner()
????scanner_.start()
原文鏈接:https://mp.weixin.qq.com/s/8waFT2_143BVqaN6BoBIpA
相關(guān)推薦
- 2022-03-30 C++歸并排序算法詳解_C 語言
- 2022-03-20 ajax和fetch的區(qū)別點(diǎn)總結(jié)_AJAX相關(guān)
- 2022-08-15 element-ui中el-select低版本清除選項(xiàng),el-select 要怎么清空已選的數(shù)據(jù),顯
- 2022-09-04 Python運(yùn)行出現(xiàn)DeprecationWarning的問題及解決_python
- 2022-05-25 python?序列去重并保持原始順序操作_python
- 2022-12-29 React修改數(shù)組對象的注意事項(xiàng)及說明_React
- 2023-03-28 Python中l(wèi)ist列表添加元素的3種方法總結(jié)_python
- 2023-02-03 c語言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- 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)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支