用python实现一个端口扫描,只需简单几步就好

小小程序员ol 小小程序员ol     2022-11-24     458

关键词:

一、常见端口扫描的原理

0、秘密扫描

秘密扫描是一种不被审计工具所检测的扫描技术。

它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。

秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。

但是这种扫描的缺点是扫描结果的不可靠性会增加,而且扫描主机也需要自己构造IP包。现有的秘密扫描有TCP FIN扫描、TCP ACK扫描、NULL扫描、XMAS扫描和SYN/ACK扫描等。

技术分享图片

 

1、Connect()扫描

此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高,但是最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。

TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)的过程:

① Client端发送SYN;

② Server端返回SYN/ACK,表明端口开放;

③ Client端返回ACK,表明连接已建立;

④ Client端主动断开连接。

建立连接成功(目标端口开放)

TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程:

① Client端发送SYN;

② Server端返回RST/ACK,表明端口未开放。

优点:实现简单,对操作者的权限没有严格要求(有些类型的端口扫描需要操作者具有root权限),系统中的任何用户都有权力使用这个调用,而且如果想要得到从目标端口返回banners信息,也只能采用这一方法。

另一优点是扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字,从而加速扫描。

缺点:是会在目标主机的日志记录中留下痕迹,易被发现,并且数据包会被过滤掉。目标主机的logs文件会显示一连串的连接和连接出错的服务信息,并且能很快地使它关闭。

2、SYN扫描

扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。

端口开放:1、Client发送SYN 2、Server端发送SYN/ACK 3、Client发送RST断开(只需要前两步就可以判断端口开放)

端口关闭:1、Client发送SYN 2、Server端回复RST(表示端口关闭)

优点:SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机,如果端口开放,则相应SYN-ACK数据包;如果关闭,则响应RST数据包;

3、NULL扫描

反向扫描—-原理是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位,根据FRC 793的要求,在端口关闭的情况下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(*nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。 经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统。

  • 端口开放:Client发送Null,server没有响应
  • 端口关闭:1、Client发送NUll 2、Server回复RST

说明:Null扫描和前面的TCP Connect()和SYN的判断条件正好相反。在前两种扫描中,有响应数据包的表示端口开放,但在NUll扫描中,收到响应数据包表示端口关闭。反向扫描比前两种隐蔽性高些,当精确度也相对低一些。

用途:判断是否为Windows系统还是Linux。

4、FIN扫描

与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开发情况。

  • 端口开放:发送FIN,没有响应
  • 端口关闭:1、发送FIN 2、回复RST

5、ACK扫描

扫描主机向目标主机发送ACK数据包。根据返回的RST数据包有两种方法可以得到端口的信息。方法一是: 若返回的RST数据包的TTL值小于或等于64,则端口开放,反之端口关闭。

6、Xmas-Tree扫描

通过发送带有下列标志位的tcp数据包。

  • URG:指示数据时紧急数据,应立即处理。
  • PSH:强制将数据压入缓冲区。
  • FIN:在结束TCP会话时使用。

正常情况下,三个标志位不能被同时设置,但在此种扫描中可以用来判断哪些端口关闭还是开放,与上面的反向扫描情况相同,依然不能判断windows平台上的端口。

  • 端口开放:发送URG/PSH/FIN,没有响应
  • 端口关闭:1、发送URG/PSH/FIN,没有响应 2、响应RST

XMAS扫描原理和NULL扫描的类似,将TCP数据包中的ACK、FIN、RST、SYN、URG、PSH标志位置1后发送给目标主机。在目标端口开放的情况下,目标主机将不返回任何信息。

7、Dump扫描

也被称为Idle扫描或反向扫描,在扫描主机时应用了第三方僵尸计算机扫描。由僵尸主机向目标主机发送SYN包。目标主机端口开发时回应SYN|ACK,关闭时返回RST,僵尸主机对SYN|ACK回应RST,对RST不做回应。从僵尸主机上进行扫描时,进行的是一个从本地计算机到僵尸主机的、连续的ping操作。查看僵尸主机返回的Echo响应的ID字段,能确定目标主机上哪些端口是开放的还是关闭的。

二、Python 代码实现

1、利用Python的Socket包中的connect方法,直接对目标IP和端口进行连接并且尝试返回结果,而无需自己构建SYN包。

技术分享图片

 

技术分享图片

 

2、对IP端口进行多线程扫描,注意的是不同的电脑不同的CPU每次最多创建的线程是不一样的,如果创建过多可能会报错,需要根据自己电脑情况修改每次扫描的个数或者将seelp的时间加长都可以。

技术分享图片

 

技术分享图片

 

看完了吗?感觉动手操作一下把!

如何搭建flutterframework开发环境?简单几步就到位!(代码片段)

一、相关依赖Linux,MacOSX或者Windowsgit:用于源码的版本控制;sshclient:用于Github的认证;IDE:带有Flutter插件的AndroidStudio,这是官方推荐的旗舰IDE;Python:很多工具都需要用到Python,比如gclient;Androidplatformtools࿱ 查看详情

cad转换pdf简单几步就能够搞定

  CAD制图是一个复杂的过程,里面凝聚了建筑工程师的心血。按照自己的想法完成CAD制图工作后,很多人选择将CAD图纸转换成PDF格式,这样更加便于预览。可CAD图纸怎么转换成PDF格式呢?本篇就教大家简单几步搞定CAD转换PDF。... 查看详情

简单几步就教会你如何使用dockerfile制作lnmp镜像,还不赶紧学起来(代码片段)

简单几步就教会你如何使用dockerfile制作LNMP镜像前言一、dockerfile撰写php镜像二、dockerfile撰写mysql镜像三、dockerfile撰写nginx镜像四、查看镜像构建情况五、分别开启nginx、mysql和php镜像六、进行测试前言注意:搞docker的环境时&#x... 查看详情

用vue实现一个简单的时间屏幕(代码片段)

...具,就点进去看了下,觉得挺好玩的,就想着能不能自己实现一下。ps:闲话不多说,先上例子点我查看,觉得没啥意思的就不需要再往下看了简单的搭建一下初始化一个vue项目vuecreatevue-time然后无脑下一步就好了(回车),这里我... 查看详情

清华教授分享一波用python实现端口扫描器(代码片段)

socket概念socket又称套接字,可以看做是不同主机之间的进程进⾏双向通信的端点,简单的说就是通信的两⽅的⼀种约定,⽤套接字中的相关函数来完成通信过程,发出网络请求或者应答网络请求。socket起源于Unix,... 查看详情

本地ping不上虚拟机地址?只需简单几步即可

...可以看出使用的是VMnet8(NAT)1.2.确认该网卡的网段是否在同一个网段内.例如:我们的虚拟机ip地址是192.168.247.128,那么网卡的网段前三位必须要和虚拟机ip地址一致一般情况下,前两步做完之后,就可以ping通了,但是部分同学本地计算机... 查看详情

自制最简单的端口扫描器(代码片段)

...投文章,将自己写的东西贴出来,以备不时之需。听人说python是最简单高效智能的编程语言,所以最近在自学python编程,刚好接触到网络编程这一块儿,就自己做了个端口扫描器,环境python3,工具pycharm。附上源码,希望有兴趣... 查看详情

python使用scapy模块编写一个简单的扫描端口是否过滤(代码片段)

代码1fromscapy.allimportIP,TCP,sr2ans,unans=sr(IP(dst="192.168.1.128")/TCP(dport=[21,23,135,443,445],flags="A"),timeout=3)3fors,rinans:4ifs[TCP].dport==r[TCP].sport:5print(str(s[TCP].dport)+"isunfiltere 查看详情

请问如何扫描指定ip地址的端口号

...P地址段是否使用80端口,请问怎样操作,用什么软件可以实现。另外,一般查看端口需要与目的主机建立链接。请问在对大量地址扫描时怎样实现链接。请这方面的高手指点下,也可以加我QQ51551010.只会从网上复制粘贴的就别来... 查看详情

装破解软件时如何暂时关掉windowsdefender防火墙,只需简单几步即可

装破解软件时如何暂时关掉WindowsDefender1.单击WindowsDefender图标2.单击病毒和威胁防护选项3.单击管理设置4.把实时保护关闭即可注意:破解版软件装完后一定要记得打开实时保护!!! 查看详情

只需简单几步-开始玩耍微信小程序

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、... 查看详情

只需简单几步-开始玩耍微信小程序

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、... 查看详情

python实现端口扫描

一、常见端口扫描的原理0、秘密扫描秘密扫描是一种不被审计工具所检测的扫描技术。它通常用于在通过普通的防火墙或路由器的筛选(filtering参考技术A一、常见端口扫描的原理0、秘密扫描秘密扫描是一种不被审计工具所检测... 查看详情

哪些方法可以防御黑客的nmap扫描

...爸玫鹊取?黑客扫描使用的主要是TCP/IP堆栈指纹的方法。实现的手段主要是三种:1.TCPISN采样:寻找初始化序列规定长度与特定的OS是否匹配。2.FIN探测:发送一个FIN包(或者是任何没有ACK或SYN标记的包)到目标的一个开放的端口... 查看详情

python简单的多线程端口扫描仪(代码片段)

查看详情

nuxt使用scss

...即可  二、统一处理scss在项目的assets目录下新建一个css目录,然后在该目录下新建一个index.scss文件,用这个文件作为 查看详情

python查看端口是不是开通

一、常见端口扫描的原理0、秘密扫描秘密扫描是一种不被审计工具所检测的扫描技术。它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标... 查看详情

sshd登录攻击

...字符组合。2.nmap扫描 为了避免被扫描到, #看到端口是81ssh[email protected]玩黑客用虚拟机,系统用xp,xp的话开销比较小。 源码编译3把火,第一步就失败了! java编译型语言.jar包,二进制包! c 查看详情