前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络踩点一一基于Python的端口扫描

网络踩点一一基于Python的端口扫描

作者头像
字节脉搏实验室
发布2020-03-08 17:14:31
8100
发布2020-03-08 17:14:31
举报

文章来自【字节脉搏社区】 作者-Jadore

在探测一个区域的网络布局时,端口扫描是黑客经常使用的一种辅助攻击手段,扫描主机端口并不能直接对主机直接造成危害,但是可以获取到主机的一些信息,借此来对目标主机进行分析,为进一步入侵做好准备。

我们都知道,TCP是面向连接的协议,建立TCP连接的时候必然会发生三次握手,C、Python等语言提供了套接字的应用编程接口,我们可以创建、绑定、监听、连接或在套接字上发送数据,因此可以利用其来编写端口扫描器。(大部分互联网应用使用的都是TCP协议,如HTTP在TCP80端口上,SMTP在TCP25端口上等等)

这里说说TCP扫描的几种类型:

TCP SYN扫描一一也称为半开放扫描,请求服务的一方会发送一个SYN数据包,如果提供服务的一方在接收到这个数据包之后,若端口开放则会回复一个[SYN|ACK]包,否则返回一个RST数据包,而在服务端回复之后,客户端直接发送RST包,直接重置掉连接,此时并没有连接建立,因此称为“半开放扫描”。

端口开启:

端口关闭:

TCP ACK扫描一一请求服务的一方发送一个只有ACK标志的TCP数据包后,无论端口开启与否,服务端只返回RST包,这种扫描方式可用来检测端口是否被过滤。

端口开启:

端口关闭:

TCP FIN扫描一一请求服务的一方发送一个FIN=1的数据包,如果服务端对应的端口关闭则回复一个RST数据包,如果开启则不回复,这种扫描方式大多用于判断操作类型。

此外还有很多种扫描方式,对应于不同的网络环境,选择不同的扫描方式,往往会达到比较理想的效果。

以Python为例:

Scan函数引入IP和端口通过套接字进行连接并打印相关信息,在函数中通过发送一个数据串从而获取到使用对应端口的服务回应的banner

portScan函数引入IP地址并调用Scan函数遍历指定的端口号

main函数强调使用的相关规则并调用portScan函数

考虑到要扫描的端口数量较多,时间总量会成倍数增加,这时可以利用多线程,修改portScan中的for循环部分,代码如下:

通过上面的代码,扫描速度会明显增加,但是随之而来的问题是,线程同时打印的时候会出现乱序失序的问题,因此使用一个屏幕控制权的信号量对输出进行控制,代码如下:

最终代码:

扫描速度确实相当快,在range函数中,我们可以指定扫描范围:

例如:range(1,100)->range(400,1000)

来看看底层,典型的三次握手

在[PSH,ACK]字段中可以看到我们通过套接字发送的数据:

重要通知

公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档