简单扫描器的实现_第1页
简单扫描器的实现_第2页
简单扫描器的实现_第3页
简单扫描器的实现_第4页
简单扫描器的实现_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

知识点:简单端口扫描01Socket基础03UDP客户端与服务端编程04FTP协议实现02TCP客户端与服务端编程目录05邮件发送实现06邮件接收实现07简单端口扫描08定制天气发送简单端口扫描71.1扫描器工作流程1.2添加banner探测功能1.3制作多线程扫描器1.1扫描器工作流程扫描器工作流程扫描器工作流程:获取用户输入的ip地址以及端口范围。根据用户输入的地址和端口范围逐个尝试连接。连接失败的pass,连接成功的发送数据,尝试探测应用的banner。将扫描结果以合适的界面输出给用户。检查代码工作效果,性能检测,进行优化与Debug。根据上述的工作流程,我们首先编写程序框架,之后的程序的编写将逐渐的把框架扩充成一个完整的扫描器。1.2添加banner探测功能添加banner探测功能banner在服务器与客户端的通讯中主要具有以下两个作用。1. 表明端口身份2. 显示欢迎信息在客户端与服务器端建立连接之后,该端口上所运行的程序会根据协议或程序设定发送banner信息给客户端,有的程序或协议需要客户先发送请求后才会发送banner数据过来,如http/https,有的则是在连接建立后,自动发送banner信息过来,如ssh,本章节所使用的探测banner的数据一律使用http/https的get的请求。1.3制作多线程扫描器制作多线程扫描器python常用的多线程模块有thread,threading,使用threading来制作多线程扫描器,并一定程度介绍threading的使用方法s=threading.Thread(target=scan,args=(address,port)#初始化线程,target指定线程调用的函数,args值传入该函数的参数s._set_daemon()#设置子进程为守护进程,无论子进程是否运行完毕,只要主进程运行完毕,程序就直接结束运行制作多线程扫描器s.join()#启动子进程s.start()#启动该线程,直到子进程完毕,主进程继续lock=threading.RLock()#设置锁的类型为RLock线程锁lock.acquire()#放置线程锁,如果有其他非本线程的程序已经放置了线程锁,该线程就会被一直堵塞,直到其他线程的释放该锁lock.release()#释放线程锁#!/usr/bin/envpython#-*-coding:utf-8-*-importsocket,time,threadingdefscan(address,port,recv_len=1024,banner_len_min=8,banner_len_max=32,banner_repl=('\r\n','\r','\n','\t',',')):#参数接口target_tcp=socket.socket(socket.AF_INET,socket.SOCK_STREAM)制作多线程扫描器try:target_tcp.connect((address,port))

#尝试对地址和端口进行连接try:service=socket.getservbyport(port,“tcp”)#连接成功用获取端口信息except:service=“unknow”#获取失败则显示为unknow制作多线程扫描器else:forreplin(banner_repl):#对banner进行筛选iflen(banner)<banner_len_max:breakelifreplinbanner:new=banner[0:banner.index(repl)]iflen(new)<banner_len_min:#避免banner过滤后太小,导致输出字符为空等banner=banner.replace(repl,"")#处理不可见字符,避免不可见字符else:banner=new制作多线程扫描器except:

banner=“TimeOut"#如果发送数据后超时没有接受到banner,则输出TimeOutlock.release()#释放堵塞锁target_tcp.close()#关闭该tcp连接print"%s\topen\t%s%s%s\n"%(str(port),service,""*(16-len(service)),banner)except:pass#忽略连接失败的端口制作多线程扫描器if__name__=="__main__":address=raw_input("PleaseEnterTargetAddrress:")#获取目标地址min_port=input("PleaseEnterMinPort:")max_port=input("PleaseEnterMaxPort:")#获取端口的地址范围lock=threading.RLock()#使用threading的RLock线程锁socket.setdefaulttimeout(5)#socket全局超时设置active_now=threading.active_count()print"\nAddress:%s\tPorts:%s-%s\n\nPort\tState\tService\tBanner"%(address,min_port,max_port)#一些扫描的设置信息,与输出结果的表头制作多线程扫描器forportinrange(min_port,max_port+1):#在端口地址内扫描端口scaning=threading.Thread(target=scan,args=(address,port))#初始化线程time.sleep(0.001)#在不使用用threadpool的情况下简单的控制控制线程增加速度,避免线程数过多导致死机等情况,数值依据机器性能自行调整scaning._set_daemon()#设置为守护进程,当主进程被强制结束时,连同子进程一起结束scaning.star

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论