想要入门安全测试?从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脚本实现如下:

想要入门安全测试?从Python开始_第1张图片

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

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

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

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

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

扫描结果如下:

想要入门安全测试?从Python开始_第2张图片

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

使用Ping进行端口扫描

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

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

具体实现脚本如下:

想要入门安全测试?从Python开始_第3张图片

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

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

扫描结果如下:

想要入门安全测试?从Python开始_第4张图片

使用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扫描来协助了。

具体实现脚本如下:

想要入门安全测试?从Python开始_第5张图片

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

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

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

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

扫描结果如下:

想要入门安全测试?从Python开始_第6张图片

总结

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

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

想要入门安全测试?从Python开始_第7张图片

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

关注我的微信公众号:【伤心的辣条】自行获取~

我的自动化测试之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,所以,我和朋友花了一段时间整理编写了《软件测试工程师发展规划路线》,也整理了不少【教程资源】,打包好了分享在群里面。有需要的朋友可以进群:914172719 获取。希望会给你带来帮助和方向

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

你可能感兴趣的:(软件测试,程序员,IT,安全,python,网络,测试工程师,软件测试)