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. 洛谷 P1241 括号序列(栈)

    嗯... 题目链接:https://www.luogu.org/problem/P1241 首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整... 一开始是 ...

  2. 判断ie8以下 或者ie9以下

    1.各种浏览器下载 http://browsehappy.osfipin.com/ 2.ie8浏览器以下 if(![].map) { // IE8浏览器 alert('ie8浏览器') } 3.ie9 ...

  3. Newtonsoft.Json 版本不一致导致错误

    可以在配置文件添加这部分,其他版本的不一致,也可使用这种方式解决. <runtime> <assemblyBinding xmlns="urn:schemas-micros ...

  4. 「JSOI2015」最大公约数

    「JSOI2015」最大公约数 传送门 考虑先枚举区间左端点, 然后我们会发现所有可能的区间虽然有 \(O(n)\) 个,但是本质不同的区间 \(\gcd\) 只有 \(\log n\) 级别,而且是 ...

  5. Python - 编程技巧,语法糖,黑魔法,pythonic

    参考,搬运 http://python-web-guide.readthedocs.io/zh/latest/idiom/idiom.html 待定 1. Python支持链式比较 # bad a = ...

  6. C/C++网络编程3——地址族与数据序列

    C/C++网络编程2中介绍了套接字,这一节介绍给套接字分配ip和端口号.ip用于标识一台主机,端口号用于标识一个主机中的一个应用程序,端口号占16位,0到65535,其中0到1023是知名端口号. 表 ...

  7. Codeforces1300C-Anu Has a Function

    定义一个函数f(x,y), f(x,y) = x|y - y,给你一个数列,a1,a2,,an问如何排列能使f(f(f(a1,a2),a3),````,an)答案最大,我们将f(x,y)变形,就是f( ...

  8. 图片切换.----so屌

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. unittest---unittest生成测试报告

    我们做测试的人员们都知道测试完成后,肯定是会生成一个测试报告,那么当我们做自动化的时候,这个自动化报告也可以自动生成吗?python当然可以了! HTMLTestRunner HTMLTestRunn ...

  10. 视图家族 & 路由组件

    目录 视图家族 & 路由组件 视图集与路由组件 基于 GenericAPIView 的十大接口 基于 generics 包下工具视图类的六大基础接口 视图集 路由组件:必须配合视图集使用 自定 ...