python 端口扫描 东京_嗖嗖嗖!在Python中进行批量端口扫描 | 网络安全
在上一篇文章《Python网络安全基础:一、编写一个简单的端口扫描器》 中,我们介绍了端口扫描的作用,并使用Python编写了一个简单的端口识别扫描器。那个端口识别扫描器实在是过于简单,所以在本篇文章中,我们来完善一下它。
本篇文章所使用的靶机还是来自于metasploitable2虚拟机,没有下载安装的小伙伴可以提前下载安装好。
一、端口与端口范围
在上一篇我们知道,计算机上的每一个服务都有对应的端口号,比如Web服务使用80端口号,SSH服务使用22端口号,DNS服务使用25端口号等等。
一般而言,我们要是知道了计算机上有什么服务,就很容易得知其使用的端口是多少,进而通过对端口进行连接获得相应服务的旗标。但是如果我们不知道一台计算机上运行了什么服务呢?
那就需要对所有的端口号进行扫描了。安装计算机网络的定义和规范,网络端口从1开始,到65535为止。其中:
1~1023号端口为公共端口,这个区间段的端口号是众所周知、约定俗成定义好的指定给了特定的网络服务,默认被分配给了各个特定的网络服务,比如Web服务的80端口,FTP服务的21端口等。当然,这些服务也可以使用其他的端口号进行服务的绑定。
1024~49151,这个区间段的端口为注册端口,用于分配给用户进程或应用程序。
49152~65535,这个区间段的端口为动态端口,这些端口号一般不固定分配某种服务,而是根据实际的使用情况动态地进行分配。
二、批量扫描端口
在了解了端口范围的相关知识后,我们如果想要对一个主机所有的端口进行扫描,最简单的做法就是,生成一个端口列表,然后对端口列表进行遍历,将遍历出来的每一个端口进行扫描。
上一篇文章中,我们的端口扫描器代码如下所示:
# coding:utf-8
importsocket
s=socket.socket()
s.settimeout(3)
port=input("请输入端口号:")
try:
s.connect(('192.168.194.131',int(port)))
print(s.recv(1024))
s.close()
exceptExceptionase:
print(">>>扫描错误:",e)
上面的代码要我们输入一个端口号,就扫描一个端口号。下面我们将其改造成一次扫描一个区间的端口号:
# coding:utf-8
'''
批量扫描 - 州的先生 zmister.com
'''
importsocket
start_port=int(input("请输入起始端口,最小为1:"))
end_port=int(input("请输入结束端口号,最大为65535:"))
print(">>>州的先生zmister.com 端口扫描器 Beta0.1")
forportinrange(start_port,end_port):
try:
s=socket.socket()
s.settimeout(3)
s.connect(('192.168.194.131',int(port)))
print(">>>端口号:",port)
print(s.recv(1024))
s.close()
exceptExceptionase:
pass
# print(">>>扫描错误:",e)
print("扫描完成!")
运行这份代码,我们需要输入起始的端口号和截止的端口号,然后通过range()方法生成一个列表进行遍历,对每一个端口号进行扫描。
我们使用20~30区间的端口号进行测试,看上去效果还不错,但是大家有没有想过,如果我们需要从端口号1扫描到端口号65535呢?
简单的for循环肯定是低效的,非常地耗时间,要想提高扫描速度,又不想漏过一些端口的扫描,我们只能使用并发手段来提高扫描效率。
三、使用多线程提高扫描效率
在Python中可以使用的并发手段有很多,比如多进程、多线程、协程、异步等等。在这里,我们使用线程池来multiprocessing库中的ThreadPool线程池。修改后的代码如下所示:
# coding:utf-8
frommultiprocessing.poolimportThreadPool
importsocket
importtime
defscan_port(port):
try:
s=socket.socket()
s.settimeout(2)
s.connect(('192.168.194.131',int(port)))
print("+++端口号:",port)
print(s.recv(1024))
s.close()
exceptExceptionase:
# print(">>>端口号关闭:",port)
pass
if__name__=='__main__':
print(">>>州的先生zmister.com 端口扫描器 Beta0.2")
start_port=int(input("请输入起始端口,最小为1:"))
end_port=int(input("请输入结束端口号,最大为65535:"))
start_time=time.time()
pool=ThreadPool(processes=500)
pool.map_async(scan_port,range(start_port,end_port))
pool.close()
pool.join()
end_time=time.time()
print("扫描耗时:",end_time-start_time)
我们在线程池中使用了500个线程来对端口进行扫描处理,当然也可以使用input()函数接收一个值作为指定的线程数,在这里作为演示,我们就写死了。运行后效果如下所示:
在程序里面我们简单的使用了time.time()计算了一下扫描所有的耗时,结果为一百多秒:
65535个端口只花了两分多钟就扫描完了,还是很快的。
这样,我们的端口批量扫描器就完成了。有什么问题欢迎留言讨论。
如果觉得本文对你有所启发和价值,欢迎动动手指转发到朋友圈;每周日统计前15日分享榜前3名,小州君有薄礼相送
python 端口扫描 东京_嗖嗖嗖!在Python中进行批量端口扫描 | 网络安全相关推荐
- 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理
编辑推荐: 本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助. 本文来自于tecdat ,由火龙果软件Alice编辑.推荐. 介绍 在本教程中, ...
- 用python写web网页_从零开始,使用python快速开发web站点(1) | 学步园
环境:ubuntu 12.04 python版本: 2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, 然后,既然是快速开 ...
- 用python写管理系统局域网_详解用python -m http.server搭一个简易的本地局域网
工作时同事间几mb小文件的传输,一般使用QQ或者微信就足够了,但当传输文件几百MB或者几十G时,这种方法的效率就显得不足了.本篇就是简单说明一个python小功能,让大家能利用python方便的搭建一 ...
- python交互式环境执行_如何在交互式环境中执行Python程序
如何在交互式环境中执行Python程序 相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同C d ...
- python怎么打日志_怎样调试 日志 python 代码
展开全部 使用 pdb 进行调试 pdb 是 python 自带e5a48de588b662616964757a686964616f31333361306366的一个包,为 python 程序提供了一 ...
- python常用库教程_这几个python常用的库你必须知道!
随着人工智能时代的到来,python变得更加流行.受欢迎,功能强大.简单易学.容易入门.应用广泛等,掀起了学习热潮,现在越来越多人转行都会学习python语言.为了让大家快速掌握python,今天为大 ...
- python入门第一课_入门第一课 Python入门涉及的问题及简单示例
很多初学者都在问:我想自学Python,该怎样入门?入门选择哪些书籍? 下面,我以自己的理解作出解答. 1.先说明大体的学习进度. Python确实入门较为容易,语法清晰易懂.一旦入了门再想提高就和其 ...
- python国内书籍推荐_这些都是Python官方推荐的最好的书籍
转行学Python有前途吗?这个答案是肯定的,AI课程都已经进入小学教材了,未来Python趋势无疑是光明的,但是如何学习Python,很多Python小白都来问小编有什么适合的Python入门书籍推 ...
- python编码转换语句_好程序员Python教程之字符串编码知识小结
好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...
最新文章
- 进入Android Dalvik虚拟机之Dalvik指令集
- laravel5.6 数组传递到前端
- 将原生SQL功能休眠到您的Spring Data Repository中
- ps图像压缩插件:TinyPNG and TinyJPG for Mac 支持ps2021
- android 图片文字布局,Android自定义控件图片+文字布局
- TurboMail成功建设某省建工集团邮件系统
- server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh
- python 画三角函数_如何用python表示三角函数
- Liunx学习笔记--基本网络设定(测试内容)
- 微信小程序开发-模仿“优优老师”课程日历
- 产品从0~1第一步——市场分析
- 《RabbitMQ实战》7.warren和Shovel:故障转移和复制
- Debug Hacks中文版——深入调试的技术和工具
- wps excel查找不定位_【WPS神技能】如何在WPSExcel表格中批量查找两列数据的不同?...
- HTML5编写百度搜索网页,零基础打造一款属于自己的网页搜索引擎
- Kafka SASL SCRAM授权java开发demo
- PMSM的发展及研究现状
- 太吾绘卷加载卡54_太吾绘卷支持度卡40%解决技巧详解_可可网
- 陈天桥和那些散落江湖的盛大“遗珠”丨价值封面人物
- 基于springboot高校闲置物品交易系统微信小程序源码和论文
热门文章
- python动态交互式图表库_干货 | 使用pyecharts绘制交互式动态地图
- 大数据笔记--SparkSQL(第一篇)
- 如何在Microsoft Outlook中延迟传递电子邮件
- Android lua编辑工具,mlua app下载
- 电子标签芯片的组成及功能
- 课设舵机狗总结文——CubeMX+STM32F4+FreeRTOS+USART2+幻尔舵机控制板 实现动作组稳定运动
- python二维码,条形码识别
- 实验室认证认可辅助管理应用系统
- aj-report 报表设计器如何添加组件
- >>技术应用:用于 REST API 开发和测试的 10 大工具