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甲级】1046 Shortest Distance (20 分)
题意: 输入一个正整数N(<=1e5),代表出口的数量,接下来输入N个正整数表示当前出口到下一个出口的距离.接着输入一个正整数M(<=10000),代表询问的次数,每次询问输入两个出口的序 ...
- 基于Facebook开源框架SocketRocket的即时通讯
SocketRocket 介绍: SocketRock 是 Facebook 开源的框架,基于 WebSocket 客户端类库,适用于 iOS.Mac OS.tv OS.GitHub 传送门:http ...
- a标签中执行js函数
在a标签中调用js函数最适当的方法推荐使用: 1.a href="javascript:void(0);" onclick="js_method()" 这种方法 ...
- 2020新春公益赛 writeup
简单的招聘系统 无需注册账号,admin'or 1#登陆,到blank page页面,在输入key处发现有注入点: /pages-blank.php?key=1%27+union+select+1%2 ...
- 如何批量删除.svn文件
参考资料:https://www.cnblogs.com/kisf/articles/4760367.html 当项目不需要SVN标志的时候,我们一般怎么办哪??可能很多人设置Windows显示隐藏文 ...
- ES5中的this
参考资料:>>> this的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理: this 永远指向最后调用它的那个对象 下面我们来看一个最简单的例子:(例子均来自参考资 ...
- StringBuilder为什么线程不安全(面试必问)
文章转载自:https://juejin.im/post/5d6228046fb9a06add4e37fe 作者:千山qianshan 1.引言 周五去面试又被面试的一个问题问哑巴了 面试官:Stri ...
- The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest - F.Sequence(打表+线段树)
题意:给你一个长度为$n$的数组,定义函数$f(l,r)=a_{l} \oplus a_{l+1} \oplus...\oplus a_{r}$,$F(l,r)=f(l,l)\oplus f(l,l+ ...
- Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...
- 三、linux基础-常用命令man_cd_|_find_ln_>_history
3通用命令3.1 man命令man pwd 来查看该命令的全部帮助手册备注:命令最终是在内核中执行的,但是内核并无法直接识别,所以先通过shell执行,然后再交给内核执行3.2 cd 命令c ...