开发者

Python利用socket实现多进程的端口扫描器

开发者 https://www.devze.com 2022-12-07 09:22 出处:网络 作者: Sir 老王
作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。 特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用,于是我利用socket不断向服务发送请求的方式来判断端口服务是否已经完成开启

作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。

特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用,于是我利用socket不断向服务发送请求的方式来判断端口服务是否已经完成开启。

其中加入多进程的调用方式来提高端口扫描的效率,供大家参考!

首先,我们将需要的python模块全部导入到我们的代码块中,若是没有安装的模块使用pip的当时安装一下即可。

#Importingthesocketmodule.
importsocket

#Importingthedatetimemodulefromthedatetimepackage.
fromdatetimeimportdatetime

#It'sashortcutfor`frommultiprocessingimportPool`
frommultiprocessing.dummyimportPool

#It'sashortcutfor`fromloguruimportlogger`
fromloguruimportlogger

然后,创建一个端口扫描类PortScanner来完成对整个业务逻辑的处理,另外,封装到类中也便于大家参考和修改。

classPortScanner:
def__init__(self):
"""
Aconstructor.ItiscalledwhenanobjectiscreatedfroMAClassanditallowstheclasstoinphpitializethe
attjsributesofaclass.
"""
super(PortScanner,self).__init__()
self.remote_ip=None
self.ports=[]

defscanner(self,port):
"""
Itscanstheport.

:paramport:Theportyouwanttoscan
"""
try:
socket_=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
result_=socket_.connect_ex((self.remote_ip,port))
ifresult_==0:
logger.info('地址:{}端口:{}已成功开启!'.format(self.remote_ip,port))
else:
logger.info('地址:{}端口:{}未开启!'.format(self.remote_ip,port))
exceptExceptionase:
logger.error('端口扫描出现异常!')
finally:
socket_.close()

defstart(self):
"""
Itstartsthegame.
"""
remote_server=input("输入要扫描的主机地址(127.0.0.1):")
ifremote_server.strip()=='':
remote_server='127.0.0.1'
self.remote_ip=socket.gethostbyname(remote_server)
port_range=input("输入要扫描的端口范围(1,50000):")
scanner_ports=[]
ifport_range.strip()=='':
开发者_开发学习port_range='1,50000'
http://www.devze.comscanner_ports=[nforninrange(int(port_rangjavascripte.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('所有端口扫描已完成,总共耗时:{}'.format(str(end_-start_)))

使用python模块中的main函数调用整个端口扫描器执行扫描任务。

#It'sacommonidiomtodetermineifthescriptisbeingrundirectlyorbeingimported.
if__name__=='__main__':
scanner_=PortScanner()
scanner_.start()

Python利用socket实现多进程的端口扫描器

到此这篇关于Python利php用socket实现多进程的端口扫描器的文章就介绍到这了,更多相关Python socket多进程端口扫描内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号