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

python编写脚本方法_【Python】教你一步步编写banner获取脚本相关推荐

  1. Python基础笔记_Day12_Python元类、type动态创建类、Python动态创建方法、Python运算符、Python发邮件、短信

    Day12_Python元类.type动态创建类.Python动态创建方法.Python运算符重载.Python发邮件.短信 12.01_Python语言基础(类对象)(熟悉) 12.02_Pytho ...

  2. python字符串equals方法_编写equals方法

    我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置. List还提供了boolean contains(Object o)方法来判断Lis ...

  3. python进行数据预测_手把手教你用Python进行时间序列分解和预测

    原标题:手把手教你用Python进行时间序列分解和预测 作者:Mohit Sharma 翻译:数据派THU-王闯(Chuck) 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列 ...

  4. python时间序列动图_手把手教你用Python进行时间序列分解和预测

    来源:数据派THU(ID:DatapiTHU) ▔ 作者:Mohit Sharma 翻译:王闯(Chuck) 校对:王可汗 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列预测 ...

  5. python模型部署方法_终极开箱即用的自动化Python模型选择方法

    python模型部署方法 Choosing the best model is a key step after feature selection in any data science proje ...

  6. 学python的正确方法_学习Python最正确的步骤(0基础必备)

    首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法. 一:明确自己的学习目标. 不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着 ...

  7. python selenium右键另存为_手把手教你系列练习篇之1python+ selenium自动化测试(详细教程)...

    1.简介 相信各位小伙伴或者同学们通过前面已经介绍了的Python+Selenium基础篇,通过前面几篇文章的介绍和练习,Selenium+Python的webUI自动化测试算是 一只脚已经迈入这个门 ...

  8. python调试程序的方法_调试Python程序的四种方法

    程序编写完成或在编写过程中,需要对程序进行测试,根据测试发现的错误,进一步诊断,找出发生错误的原因和具体代码位置进行修改,这个过程称为程序调试.在一些情况下,可能需要查看或跟踪程序的运行状态,这种情况 ...

  9. python展开函数方法_逐步展开Python详细教学—Python语法

    Python语法–在Python世界迈出第一步 我们已经拥有了许多的编程语言,而且都有自己的特色,但是一种语言的独特之处在于它的特性.最终,是它的特点让它被选中或通过项目.因此,在开始更深入的Pyth ...

最新文章

  1. 尺度空间理论与图像金字塔
  2. 对Python课的看法
  3. 统计单词个数(划分型)
  4. linux脚本生成数字写入文本,4.2 编写Shell脚本(P80-85)——《Linux就该这么学》学习笔记16...
  5. 决策树ID3、C4.5、CART、随机森林、bagging、boosting、Adaboost、GBDT、xgboost
  6. 优麒麟十年,聚生态之力压缩时间壁垒
  7. 9.Maven之(九)依赖关系
  8. 微信小程序开发:学习笔记[5]——JavaScript脚本
  9. Python进阶练习题,新手快码起来
  10. Linux下安装Java环境
  11. MapGIS制图学习(1)
  12. 异速联大于400并发分散型项目应用介绍
  13. 适合arduino小白入门的最基础的函数教程
  14. 安卓开发Material Design ToolBar的DrawerLayout 学习经验
  15. 世界各地的游戏都是如何分级的?哪个最严格?
  16. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)
  17. node内存溢出:JavaScript heap out of memory
  18. 多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序
  19. rot密码-buu rot
  20. 【滴滴出行】真题-地下迷宫

热门文章

  1. C++ 函数参数 值传递与引用传递
  2. IFeature接口
  3. linux创建用户并授予sudo权限
  4. Spring Boot集成Swagger导入YApi@无界编程
  5. Linux环境HBase安装与使用
  6. Category Archives: Linux
  7. C#编写的生成缩略图程序
  8. C#中Timer组件用法
  9. 简明 HTML CSS 开发规范
  10. 一键安装python3环境