1、无选项和帮助信息

#!/usr/bin/env python
#coding:utf-8 import socket
import sys
import os
from threading import Thread
#导入模块
if len(sys.argv) !=2:
print "输入方式:",sysargv[0],"IPliebiao"
print "例如: ./test.py /root/ip.txt"
sys.exit() def getBanner(ip,port):
socket.setdefaulttimeout(2)
#设置超时时间为两秒
s=socket.socket()
#调用socket模块中的socket方法
try:
s.connect((ip,port))
#接收IP和端口
result=s.recv(1024)
#接收返回信息中的前1024b数据
s.close()
#断开连接
return result
#输出结果
except:
pass def checkVulns(ip,port):
banner=getBanner(ip,port)
if banner:
if ("2.0" in banner):
print ip+"is vulnerable"
else:
print ip+"is unvulnerable"
else:
print ip,"not get banner"
#判断结果服务器是否为2.0版本
def main():
#不当做模块
filename=str(sys.argv[1].strip())
if not os.path.exists(filename):
print "文件不存在"
sys.exit()
#判断引入文件是否存在,不存在则关闭
f=open(filename,"r")
for i in f.readlines():
ip=i.strip("\n")
port=22
t=Thread(target=checkVulns,args=(ip,port))
t.start()
f.close()
#引入文件,并去除分行符 if __name__=="__main__":
main()
#输出结果

2、有选项和帮助信息

#!/usr/bin/env python
#coding:utf-8 import socket
import sys
import os
from threading import Thread
from optparse import OptionParser def getBanner(ip,port):
socket.setdefaulttimeout(2)
s=socket.socket()
try:
s.connect((ip,port))
result=s.recv(1024)
s.close()
return result
except:
pass def checkVulns(ip,port):
banner=getBanner(ip,port)
if banner:
if ("2.0" in banner):
print ip+"is vulnerable"
else:
print ip+"is unvulnerable"
else:
print ip,"not get banner"
def main():
usage="Usage: %prog -f <filename> -i <ip address>"
parser=OptionParser(usage=usage)
parser.add_option("-f","--file",type="string",dest="filename",help="IP address file")
parser.add_option("-i","--ip",type="string",dest="address",help="IP address")
(options,args)=parser.parse_args()
#设置选项-f和-i和帮助信息-h filename=options.filename
address=options.address if (filename==None and address==None):
print "请指定IP列表文件或IP地址"
sys.exit()
#判断输入不为空
if filename:
if not os.path.exists(filename):
print "bucunzai"
sys.exit()
f=open(filename,"r")
for i in f.readlines():
ip=i.strip("\n")
port=22
t=Thread(target=checkVulns,args=(ip,port))
t.start()
f.close()
#设置-f参数引入的方式 if address:
prefix=address.split(".")[0]+"."+address.split(".")[1]+"."+address.split(".")[2]+"."
for i in range(1,255):
ip=prefix+str(i)
port=22
t=Thread(target=checkVulns,args=(ip,port))
t.start()
#设置-i参数引入的方式 if __name__=="__main__":
main()

python编写的banner获取代码的两种方式的更多相关文章

  1. python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  2. java动态获取WebService的两种方式(复杂参数类型)

    java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...

  3. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  4. MyBatis获取参数值的两种方式

    MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...

  5. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  6. (先导)Git Api对接:获取private_token的两种方式

    " Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...

  7. .net 调用SAP RFC函数获取数据的两种方式

    方式1:使用客户端自带的组件 安装客户端以后,添加引用:SAPFunctionsOCX(.net 的Com列表里一般找不到,需要引用DLL[一般位于以下路径:Program Files\SAP\Fro ...

  8. C++调用C代码的两种方式

    由于C++支持函数重载,在编译函数代码的时候会加上参数类型的信息,而C编译只有函数名信息,导致C++直接调用C代码在链接的时候会出现函数未定义的问题.解决这种问题有两种方法.方法一:在写C代码的时候考 ...

  9. RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析

    以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...

随机推荐

  1. POJ 1064 Cable master(二分答案)

    嗯... 题目链接:http://poj.org/problem?id=1064 其实这是一道很好想的二分答案的一道题... 二分的区间就是1~max_l,从1开始是因为所有小于1的都需要按0计算,没 ...

  2. leetcode菜鸡斗智斗勇系列(7)--- 用最小的时间访问所有的节点

    1.原题: https://leetcode.com/problems/minimum-time-visiting-all-points/ On a plane there are n points ...

  3. HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历

    我们先来做一个测试 public class HashMapTest { private HashMap<String, String> map = new HashMap<> ...

  4. 关于java自学的内容及感受

    这周自学了关于java类的知识,进度有点慢,需要抓紧学习剩下的知识,放假后由于自制力差而各种玩没有认认真真的学习,下周要认真的学习之后的进度,争取开学玩全部完成! /** * 动物的类 * */pub ...

  5. HTML5中改变了哪些东西?

    HTML5 推出的理由 想要把目前web上存在的各种问题一并解决 Web浏览器之间的兼容性很低 文档结构不够明确 Web应用程序的功能受到了限制 HTML5重新定义了浏览器的统一标准 HTML5 与 ...

  6. CentOS使用日常

    安装Teamview TeamViewer官网 下载rpm包 yum install -y teamviewer.x86_64.rpm 搞定 systemctl status firewalld #查 ...

  7. Java基础知识笔记第九章:组件及事件处理

    java Swing 图形用户界面(GUI : Graphics User Interface) 窗口 JFrame常用方法 JFrame()创建一个无标题的窗口. JFrame(String s)创 ...

  8. IDEA下的SVN设置以及TortoiseSVN安装后bin目录下没有svn.exe如何解决?

    1.首先,我们要确保电脑上已经安装了TortoiseSVN. 2.打开IDEA-File-Settings-Version Control-Subversion,在右边的界面上选择TortoiseSv ...

  9. Flex 学习笔记

    Flex布局是什么 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局 .box{ displ ...

  10. 【PAT甲级】1017 Queueing at Bank (25 分)

    题意: 输入两个正整数N,K(N<=10000,k<=100)分别表示用户的数量以及银行柜台的数量,接下来N行输入一个字符串(格式为HH:MM:SS)和一个正整数,分别表示一位用户到达银行 ...