python编写的banner获取代码的两种方式
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获取代码的两种方式的更多相关文章
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- java动态获取WebService的两种方式(复杂参数类型)
java动态获取WebService的两种方式(复杂参数类型) 第一种: @Override public OrderSearchListRes searchOrderList(Order_Fligh ...
- springboot项目启动成功后执行一段代码的两种方式
springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...
- MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单 ...
- python 并发编程 多线程 开启线程的两种方式
一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...
- (先导)Git Api对接:获取private_token的两种方式
" Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...
- .net 调用SAP RFC函数获取数据的两种方式
方式1:使用客户端自带的组件 安装客户端以后,添加引用:SAPFunctionsOCX(.net 的Com列表里一般找不到,需要引用DLL[一般位于以下路径:Program Files\SAP\Fro ...
- C++调用C代码的两种方式
由于C++支持函数重载,在编译函数代码的时候会加上参数类型的信息,而C编译只有函数名信息,导致C++直接调用C代码在链接的时候会出现函数未定义的问题.解决这种问题有两种方法.方法一:在写C代码的时候考 ...
- RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...
随机推荐
- 【PAT甲级】1049 Counting Ones (30 分)(类似数位DP思想的模拟)
题意: 输入一个正整数N(N<=2^30),输出从1到N共有多少个数字包括1. AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC #include& ...
- faster-RCNN 加入新的Ground Truth
出于project的需要,不仅要detect和classify对象,还希望建立不同class的对象之间的关系,进行所谓的pair-matching. 需要完成以下几步: 1. dataset中labe ...
- pip使用技巧
1. pip install 'easydict==1.6' --force-reinstall 强制安装制定version 2. pip install git+https://github.com ...
- 2 Struts2的执行流程&配置文件的加载顺序
执行流程: 访问前段页面,通过url访问action 访问xml中Struts2核心过滤器,并执行一组拦截器(这组拦截器在struts-default.xml中,实现了部分功能) 通过action配置 ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:数据表对象
create table students( stuno ) not null, --学号 stuname ), --姓名 sex ), --性别 age int, --年龄 departno ) n ...
- @override编译报错
今天突然遇到一个问题,明明我重写的接口的方法,编译的时候一直报@override is not override a method from superclass,查了一下资料,这个@override ...
- 2019年5月17日A股暴跌行情思考
2019年5月17日A股暴跌行情思考 原因:特朗普针对华为的禁商令,人民币对美元汇率大跌 盘面:平开,单边下跌,收盘80多股跌停 操作:下午2点加仓,满仓 总结: 本次操作太过激进. 局势不明朗时抄底 ...
- xshell编码设置-----支持中文
1. 点击 设置 图标 2. 选择 UTF-8 3. 重启xshell即可
- Eth合约攻击
前言 Ethernaut是一个类似于CTF的智能合约平台,集成了不少的智能合约相关的安全问题,这对于安全审计人员来说是一个很不错的学习平台,本篇文章将通过该平台来学习智能合约相关的各种安全问题,由于关 ...
- [aac @ ...] more samples than frame size (avcodec_encode_audio2)
在用FFmpeg对音频进行编码的时候报如下错误: [aac @ 000001cfc2717200] more samples than frame size (avcodec_encode_audio ...