python实现端口扫描器,python扫描局域网端口

  python实现端口扫描器,python扫描局域网端口

  TCP端口和服务扫描器的设计。学完《Python绝技》章,认真总结笔记。

  常见的端口扫描是基于TCP三次握手或四波过程。常见的是向指定主机的指定端口发送一个TCP syn包,根据返回的结果判断该端口是否开放。

  1.TCP端口扫描可以分为:

  (1)TCP SYN扫描:也叫半开扫描,这种扫描方式发送SYN TCP link报文等待响应,当它返回RST报文呈现端时。

  当端口关闭时,返回ACK表示端口打开。

  (2)TCP空扫描:TCP空扫描将TCP的flag头设置为零,如果返回RST包,则关闭该端口。

  (3)TCP FIN扫描:TCP FIN扫描发送FIN包,请求关闭链路,等待成功终止。如果RST数据包被返回,那么

  表示端口已关闭。

  (4)TCP XMAS扫描:TCP XSMAS扫描设置PSH、FIN和URG TCP的标志位,如果返回RST包,则关闭该端口。

  关门了。

  2.扫描仪设计理念:

  (1)用户输入目标主机名和要扫描的常用端口列表,通过主机名获取目标网络的IP地址,使用列表中的各个端口号进行解链。

  拾取目标地址,最后确定端口上运行的特殊服务,可以发送特定数据,读取特定应用返回的ID。

  (2)从用户处接收主机名和端口,使用optparse标准库解析命令行选项,调用optparse。OptionParser()来创建一个。

  选项分析器,然后通过parser.add_option()函数指定命令选项。

  3.多线程端口扫描器应该注意:

  (1)多线程在速度上有明显的优势,但是端口回显的信息可能是乱序的,同时打印信息的函数必须只有一个,但是

  可以有多个接入端口,但同时要避免重复接入同一个端口,造成资源浪费。因此,必须使用信号量锁定。

  (2)使用acquire()锁定,新的似乎允许信号运行。如果必须等待信号量的进程被锁定以释放锁,信号量可以用来确保同样的情况

  一次只有一个线程打印输出结果。

  4.使用的模块和功能

  (1)optparse模块:

  optparse。OptionParser()

  optparse.add_option()

  optparse.parse_args()

  以上三个功能介绍不多,基本都是命令解释的功能。有兴趣可以参考大神的文章:点击打开链接。

  (2)袜子模块:

  Socket.gethostbyname(hostname):将主机名转换成IP地址并返回。

  Socket . gethostbyaddr(Ip _ address):传入的一个Ip地址返回一个元组,包含同一个接口socket的主机名、别名列表和Ip地址列表. socket():创建一个socket

  插座。Connect (address,timeout,source _ address):传入的Ip地址和端口号返回一个socket对象,可以设置超时重新连接的时间。

  Socket.send(data):项目主机端口发送数据Socket.recv(size):从socket接收大小为的字节数据。

  (3)线程模块:

  穿线。信号量(value=num):创建一个信号量为num的锁。

  Threading.acquire (): lock

  Threading.release():解锁并释放信号量。

  5.程序代码:

  # coding=UTF-8 import optpassertimport socketimport threadingscreenLock=threading .信号量(值=1)定义连接扫描(TGT主机,TGT端口):尝试:连接SKT=套接字。插座(插座.AF_INET,插座.SOCK _ STREAM)connskt。连接((TGT主机,TGT港))connskt。send(暴力python \ r \ n )Results=connskt。接收(100)屏幕锁定。获取()打印([]% d/TCP打开 % TGT端口打印([]结果。解码( utf-8 ))除了:锁屏。acquire()print([-]% d/TCP关闭 % TGT端口)最后:屏幕锁定。释放()连接。close()def端口扫描(TGT主机,TGTThread(target=connScan,args=(tgtHost,int(TGT端口)))t . start()def main():parser=opt parse .选项分析器( usage % Prog-H target host-p target port )分析器。add _ option(-H ,dest=tgtHost ,type=string ,help=指定目标主机)解析器。add _ option(-p ,dest=tgtPort ,type=int ,help=指定目标端口)(options,args)=parser。parse _ args()TGT主机=选项。TGT体育=选项。TGT港if(TGT主机==无)或(TGT port==None):print([])exit(0)ports can(TGT host,args)if _ _ name _ _= _ _ main _ _ :main()运行结果如下:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: