python编写脚本方法_【Python】教你一步步编写banner获取脚本
Hello 各位小伙伴们大家好,周末过的愉快吗?
刚好最近学习了使用python编写banner获取脚本,今天就跟大家一起一步一步再学习一遍吧。
Part.1
说明篇
什么是banner?
banner可以理解为我们连上服务器后,服务器响应的第一条欢迎语句。
通常通过banner我们可以获取到服务器正在运行的服务,以及服务的名称和相关版本信息。
例如linux下的nc命令,如下:
又或者是windows下的telnet返回信息:
由以上两个返回信息,我们可以知道这两台服务器的ftp版本分别为2.3.4和3.0.2。
获取服务的版本信息后,我们是不是就可以针对性地进行渗透了呢。
Part.2
代码篇
1、基本代码
首先我们来编写一个简单的基本代码,实现上面所说的功能。
这里涉及到了socket模块,什么是socket呢?可以简单的理解socket就是一个连接,说明如下:Socket可以通过网络实现不同主机间的进程通信,网络上各种各样的服务大都是基于Socket 来完成通信的。
用“ip地址+协议+端口号”来唯一标识网络中的一个进程,这就是socket
无论使用何种网络协议,最本质上都是在进行数据的接收和发送,“发送”和“接收”这两个动作就是socket处理数据的主要方式。
脚本运行结果如下,成功取得banner:
这样基础代码就完成了,关于socket模块的详细使用方法,我将在近期推出。接下来,我们一步一步来完善这个程序。
2、添加漏洞版本判断功能
假设ftp 3.0.2 版本为一个已知漏洞版本,添加if语句来对扫描的IP地址进行判断,判断是否为3.0.2版本,修改代码如下:
运行结果:
3、添加异常处理功能
为什么需要添加异常处理功能呢??程序运行过程中难免出现错误,当Python检测到错误时,解释器就无法继续执行下去,于是抛出相应的信息,这些统称为异常信息。
使用try/except语句:程序执行时,如果try子句中没有异常发生,那么except子句在try语句执行之后被忽略;如果try子句中有异常发生,那么该部分的其他语句将被忽略,直接跳到except部分,执行其后面的子句。
except Exception, e:不管什么类别的异常,全部都捕获,并将具体的异常信息保存到变量e里。
修改代码如下:
4、函数封装
为了方便多次调用,将代码根据功能分成不同的模块,改写代码如下:
注:if __name__== "__main__"如果python脚本独立运行,name的值就为main;如果是被调用,name的值就为脚本的文件名
因此,该语句就是用于判断当前的程序是在怎样运行。当脚本被其他脚本调用时,放在它后面的代码是不会执行的,只有当单独执行该脚本时,才会执行这部分代码。
5、对多IP进行扫描
当前代码仅对192.168.211.168进行判断,我们可以添加for循环,对多IP进行扫描:
其他代码不变,部分输出结果:
6、从文本中读取ip地址进行扫描
我们可以从文本中读取指定的IP地址进行扫描,修改代码如下:
注:文件操作的基本流程:调用open()函数打开文件,并创建一个File对象。
调用File对象的read()或write()等方法,对文件内容进行读写等操作。a 追加 w覆盖 r只读。使用write()方法不会自动换行。
调用File对象的close()方法,关闭并保存文件内容。
7、为代码添加多线程
经测试,当扫描IP地址为一整个网段时,需要10分钟才能全部扫描完成,这是因为程序需要等待第一个IP扫描完成后,才能扫描第二个IP地址。
此时我们可以为代码添加多线程,对多个IP同时进行扫描,修改代码如下:
桥豆麻袋,connect函数去哪里了?
(请往下看)
为了让我们自定义的check函数,connect函数,能在相同线程中,对一组数据同步进行处理。我们将connect函数从main()中拿出来,放到check函数中进行调用:
connect函数代码保持不变,接下来运行代码,不到1分钟即可完成254个IP地址扫描。
8、optparse模块
optparse模块,通过选项向脚本传递所需的参数。
(1)当我们运行一些软件时,如sqlmap,可以向脚本传递一些参数,接下来利用optparse模块,为我们的脚本也添加此功能。
添加-f 选项,让脚本扫描指定的模块。
添加-i 选项,让脚本扫描指定的IP地址所在的整个网段。
该部分代码构想如下:
注释如下:第一行,导入optparse模块中的类OptionParser。
第二行,将类实例化成对象。
第三行,利用add_option()方法添加选项。-f和--file分别表示长短选项名,长选项可以省略。type指定了参数类型,默认为string,dest指定将参数赋值给哪个变量。
第四行,利用add_option()方法添加选项-i和--ip。
第五行,利用parseargs()方法来获取定义的选项和参数,可以视作一种固定用法。parseargs()方法返回两个值,其中options对象保存了所传递进来的参数值。
第六、七行,通过options.filename和options.address的方式调用参数值。
2)接下来,再添加 help功能,为我们设置的选项提供说明,修改代码如下:增加帮助信息,%prog表示当前脚本文件的名字
第三行,新增usage=usage -h就会显示help信息
尝试使用 -h 功能:
好了,接下来将以上构想放进我们的代码中,我们就可以使用选项,对指定文件或者是IP网段进行扫描了,各部分代码说明如下:
9、功能测试
接下来对我们的脚本进行测试:
(1)不传入任何参数,运行结果:
(2)传入错误的文件名
(3)-f 传入正确的文件,进行扫描
(4)-i 传入一个ip地址,对所在网段进行扫描,部分截图如下:
注:因为采用多线程,各线程执行速度不同,此处会有错位显示的情况,但影响不大,解决方法还在思考中...
Part.3
完结篇
全代码
好啦,到此我们的代码就全部完成了,涉及了大量python基础知识,没看明白的小伙伴,可以针对不明白的函数在百度查询,可以轻松获取解答哦。
最后附上完整代码:
Peace
相关文章:

Linux内核分析——可执行程序的装载
链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i)接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s接着运行汇编器as,将a.s翻译成可重定位的目标文件a.o最终完全链接成可执行文件a.out目标文件 目标文件有三种…

c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。 1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。 a.在全局区分配内存。 b.如…

男神女神配——alpha阶段总结
一、需求分析 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求,但是针对校园学习、工作和文化生活等方面的支持以及学校个性化需求方面却存在不足。利用电子校务平台的数据,设计了与真实校园环境和活动紧密结合,包含具有…

正向代理和反向代理??
(5 条消息)正向代理 反向代理 本质区别? - 知乎 https://www.zhihu.com/question/36412304/answer/76804314 正向代理,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代…

虚幻引擎5(UE5)实时VFX游戏特效制作入门到精通
UE5 Niagara学习教程 课程获取:虚幻引擎5(UE5)实时VFX游戏特效制作入门到精通-云桥网 你会学到什么 我将通过创建各种各样的实时效果来教你虚幻引擎中强大的粒子系统。 我们将从简单的基础知识开始,然后逐渐地,我们将…

share extension 不显示_你所不知道的网红小酒馆Helens
当夜幕降临后,Helens小酒馆显示出她真正的魅力约上你的好友,来Helens体验一次穿越异国的饮酒之旅吧由美、中、泰设计师倾力打造,有着浓郁的东南亚异域style。木质的桌椅、精美的木雕装饰,每个细节都可以感受到不同文化的碰撞。别样…

怎么将jenkins打包后的war自动部署到jetty上?
1,使用maven的cargo插件,实现远程部署 (官网描述地址:https://codehaus-cargo.github.io/cargo/JettyRemoteDeployer.html) Maven中添加配置文件: Type: 可选参数有remote(远程部署的模式&#…

自制青蛙跳台阶小游戏~
青蛙跳台阶小游戏 1、概念(concept)文档 楔子(Setting):千百年来,人们在贬低别人时,常用井底之蛙来描述那个人,但这却让青蛙不开心了,于是青蛙决定跳出井底,为自己讨一个公道。 玩法…

提高性能的Varnish缓存方案
转载http://www.s135.com/post/313/arnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid,性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&am…

Python学习小甲鱼视频003
变量 变量名就类似于我们现实社会的名字,发一个值赋值给一个名字的时候,它会存储在内存中,称之为变量(Variable) 但是Python并没有将值存储在变量中,而更像是把名字贴在值上。或者说Python只有名字而没有…

虚幻引擎的数学知识学习教程 Math for Unreal Engine (Early Preview)
通过做真实世界的 Unreal Engine项目来学习数学 你会学到什么 理解游戏开发对数学的基本需求 将数学直接应用到用例中,而不是钻研理论(用我们的示例项目进行实践) 正确编辑短视频,节省您的时间 本课程涵盖向量数学、基础三角、叉/点积和四元数旋转 要求…

2016.4.2 动态规划练习--讲课整理
1.codevs1742 爬楼梯 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题目描述 Description小明家外面有一个长长的楼梯,共N阶。小明的腿很长,一次能跨过一或两阶。有一天,他突发奇想,想求出从最低阶到最高阶共有几种爬楼梯…

matlab 通过矩阵变换使图像旋转平移_图像的几何变换
学习图像中的仿射变换(affine transform), 这是一种线性变换(涵盖旋转,平移,错切(shear), 缩放等线性变换),既然是线性变换则可以通过线性变换(矩阵)来获得。仿射变换矩阵M为2*3的矩阵。仿射变换…

用伪代码模拟洗衣机的运转流程
今天的软导课又学到了不少“骚操作”,其中就包括Pseudocode和Top-down design。 不如现在就借着介绍洗衣机的运转流程向大家介绍一下这两个简单的东西。 题目如下 仔细观察您洗衣机的运作过程,运用Top-down设计方法和Pseudocode 描述洗衣机控制程序。 假…

使用 PHP 在站点上构建类似 Twitter 的系统
2019独角兽企业重金招聘Python工程师标准>>> 如果您曾经留意过,就会知道 Twitter 是 Web 2.0 世界最大的轰动事件之一。简单来说,Twitter(Twitter.com 上提供的一个服务)是一个简单的微博客服务,用户可以发…
Python中的变量以及赋值语句
列表的拷贝区别。 就是在Python中的任何的变量只是一个单纯的名字。名字只是数据的一个贴纸,名字可以来回的变动 赋值语句: 变量就像临时的“存储器”(就像厨房中的锅碗瓢盆),它的强大之处就在于,我们在操…

UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4
使用虚幻引擎4蓝图创建一个程序背景的游戏 你会学到什么 学习虚幻引擎4要领 使用程序切片创建标高 保存并加载某些游戏元素 创造一个无止境的跑步者角色 创建和完成游戏的良好习惯和实践 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英…

android pop3与imap方式接收邮件(javamail)
需要下载3个jar包:mail.jar/ activation.jar/ additionnal.jar 1.pop3/** * 以pop3方式读取邮件,此方法不能读取邮件是否为已读,已经通过测试 * */ private void getEmail() { List<Map<String, Object>> list new A…

什么是条件组合覆盖_物史政组合分析,新高考最终受益者丨选科17期
导读,规划物理历史政治是新高考33模式下存在的选科组合,为了给马上面临选科问题的高一、高二考生提供有效帮助,自主选拔在线选科模型解读第17期就来分析一下该组合的学科特性、适合人群、优势劣势、专业覆盖及往年选考情况。说明:…

进击时代!王雪红的谦卑与坚守
节前,HTC董事长王雪红发表了一封内部信,王雪红在心中表示,2015年,HTC不仅要在质量、创新能力与工作效率方面更进步,并表示,“我们未来企业成长的动能不仅包含智能手机,还会加入新的领域如RE、虚…
Python中的过滤器
寄语:新的有一天,开始了,让我们把内心的一些想法都放一放,努力去学习吧。 《Python基础教程(第2版,修订版))》 Assignment 赋值 Variable 变量 Nan是一种特殊的简写 not a numb…

UE4材质着色器全面学习教程
你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何以实用的方式使用虚幻4材料系统。我们…

codeforces #310 div1 C
操作无论是U还是L,都会使原图形分裂成两个图形,且两个图形的操作互不影响 我们又发现由于操作点只可能在下斜线上,如果将操作按x排序 那么无论是U还是L,都会将操作序列完整分割成两半,且两个操作序列互不影响 这样我们…

硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...
70多岁的老年人,原来有高血压,高压160左右,现在是130左右,正常吗?这个问题问的太过笼统,我们只好通过这个问题,来分享一些老年高血压患者血压控制的一些知识点,希望能够对老年人的高…

使用python愉快地做高数线代题目~
今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不。。。不是的。。。python 基础库几乎都…

Docker总结
2019独角兽企业重金招聘Python工程师标准>>> 查看docker的子命令,直接敲docker或完整的docker help就可以了: bash-3.2$ docker Usage: docker [OPTIONS] COMMAND [arg...] A self-sufficient runtime for linux containers. Options:-D, --debugfalse …
Python中的对象,类,super()函数
对象:(1)外观的特征 (2)正在做的事情 比如:那个穿蓝色衣服的正在打球的帅哥 类:属性(静态的变量)方法(函数)是对对象的近似 类名约定是以大写字…

Blender赛车动画制作学习教程 Learn Race Car Animation with Blender
使用Blender 2.93创建您自己的惊人汽车动画 你会学到什么 Blender的界面和导航 建模 UV制图 材料 动画 照明设备 渲染 合成 要求 下载并安装Blender。免费下载和免费用于任何目的。 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言&…

数据结构-线性表的顺序结构
1 #include "stdio.h"2 #include "stdlib.h"3 4 typedef int ElemType; //线性表存储基本类型5 typedef int Status; //基本操作函数类型6 #define LIST_INT_SIZE 50 //线性表初始化存储空间分配量7 #define LISTINCREMENT 10 //线…