栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

想要入门安全测试?从Python开始

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

想要入门安全测试?从Python开始


今天我们继续聊一聊网络端口扫描那些事,以及Python如何助力于端口扫描。无论今后你是否从事网络安全或者安全渗透测试一职,只要你在测试、测开领域行走着、奔跑着,“网络端口扫描”将是你知识技能储备中不可或缺的一角。

闲聊:端口扫描那些事

端口扫描可视为一种监控技术,用来依次定位某个指定主机上可用的,开放的端口。

一般而言,这类技术常见于网络管理员,渗透测试人员甚至黑客等人的日常工作实践中。这类人员可以根据当前工作任务需求,配置端口扫描器,最大程度地获取目标系统中的信息。

通常经过对目标主机端口扫描后,可以获取的信息主要包括:

(1)目标主机上开放的所有端口

(2)在每个端口上运行的服务及其相关信息

(3)目标主机的操作系统和MAC地址信息

我们可以把端口扫描想象成一个小偷悄悄进入一间房子(目标主机可视为房子),检查每个门窗是否关好(端口可视作门窗),看看哪些门窗是打开的(哪些端口是开放的)。

在互联网中,用于通信的是TCP/IP协议,该协议套件由两个协议组成,即TCP和UDP。这两种协议都有0到65535个端口。这些端口按范围可分为如下三类:

(1)系统或公认端口:0 —— 1023

(2)用户或注册端口:1024 —— 49151

(3)动态或私有端口:49151 —— 65535

可见系统服务器上的端口众多,但实际上常用的端口才几十个,由此可以看出未定义的端口相当多。为了安全起见,通常建议关闭系统中不必要的端口,不对外开放。

如此一来,我们就有超过65000个端口需要关闭。

使用Socket进行端口扫描

在上一篇文章中《测试人必会 ——Python带你上手Web Socket》,介绍了套接字相关知识。现在,我们将使用套接字构建一个简单的端口扫描器。

使用套接字进行端口扫描器的构建,通过Python脚本实现如下:


运行上述脚本后,首先会提示输入目标主机名,这里可以输入你想要扫描的任何主机名。

值得一提的是,未经授权下的端口扫描可能被视为违法行为。

所以在未经服务器或计算机所有者,明确书面许可的情况下,不应对任何网站/IP地址执行端口扫描程序。

在自行练习实践的情况下,强烈建议在本地主机或自己的网站上执行端口扫描。

以上程序我们仅以自己本机为例,进行实践展示,为了节省时间,我们仅将扫描的端口范围设置在100 到 450;

扫描结果如下:


输出显示,在100到450的端口范围内(不包括450),经过Python Socket脚本创建的扫描程序,扫描后发现两个端口( 端口135和445)是开放的。读者朋友们也可以更改此范围,检查其 他端口的开放情况。

使用Ping进行端口扫描

Ping扫描可以在特定网络范围内,查找多台机器其端口的可用性。假设我们有一个待测IP地址列表,通过Ping扫描(即操作系统的Ping命令),可以逐个扫描列表中的所有IP地址,但通过命令行的方式逐一扫描IP地址是非常耗时的。

Python给我们提供了解决方案,简洁的Python脚本就能帮我们实现Ping扫描,查找实时主机中端口的可用性。

具体实现脚本如下:


通过将IP地址范围拆分为多个部分来选择要Ping扫描扫描的IP地址范围。

运行上述脚本后,首先会提示输入目标主机名,这里为了安全起见,还是以我们本机为例"127.0.0.1",然后分别输入起止端口号,为了便于演示和节省时间,这里我们仅扫描130-135端口,进行查看。

扫描结果如下:

使用TCP进行端口扫描

在实践了Socket、Ping方式进行端口扫描后,我们再来看另一种方式,通过建立TCP进行端口扫描。

TCP需要经过三次握手,才能建立连接,三次握手创建连接的过程如下:

1 步骤1-设置SYN 标志的数据包

首先,客户端会向服务端发送一段TCP报文,标志位为SYN,表示“请求建立新连接”。

2 步骤2- 设置SYN-ACK标志的数据包

接着,正常情况下,正处于监听状态下的服务端,会接收来自客户端发来的报文,随后,服务端也会返回 一段TCP报文。

同时标志位为SYN-ACK,表示“确认客户端的报文序号有效,告诉客户端,服务端收到了来自客户端的数据,同意创建新连接”。

即,目标系统返回一个设置了 SYN和ACK标志的数据包。

3 设置ACK标志的数据包

客户端接收到来自服务端的确认(即,确认收到服务端发来的TCP报文)之后,明确了从客户端到服务端的数据通信是正常的。

这时,客户端会返回最后一段TCP报文,标志位为ACK,表示“确认收到服务器端同意连接的信号”。

即,告诉服务器,我知道你收到我发的数据了。

也许,在读者看来,这三次握手间的相互确认着实麻烦了些,既然可以通过上面的Ping命令进行端口扫描,何必又多此一举,用TCP创建连接的方式,进行端口扫描呢?

其背后的主要原因是假设我们对数据包使用了防火墙,那么Ping扫描程序将无法工作,这时就需要TCP扫描来协助了。

具体实现脚本如下:


首先通过将IP地址范围拆分为多个部分来选择要Ping扫描扫描的IP地址范围。

接下来是使用扫描地址的函数,该函数进一步使用套接字,从而得出有关主机的响应以及完成扫描过程所需的时间。

其中connect_ex((addr,135)) 语句,如果操作成功则为0,否则为errno 变量的值。

安全起见,我们以本机为例 “127.0.0.1”,分别输入起止端口号,为了便于演示和节省时间,这里我们仅扫描130-135端口,进行查看。

扫描结果如下:

总结

无论你是否有志于安全测试,端口扫描技术都是测试人员知识储备库中不可或缺的一项。

本次分享通过Python提供的三种方式,对目标系统进行端口扫描,进行了实战演练。希望通过本文的学习,能够加深你对网络端口的认知,让它不再成为你的知识盲区。

现在就有这么一个机会,我邀请你进入我们的软件测试学习交流群:914172719,备注“csdn”大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

最后也为大家准备了一份配套的学习资源,你能在 公众号:【伤心的辣条】免费获取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

“入职一年,那个被高薪挖来的自动化软件测试被劝退了。”

4个月自学软件测试面进阿里!如何从功能测试转成自动化…我经历了什么

6000元报了培训班,3个月后我成功“骗”进了腾讯大厂,月薪15000

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/741587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号