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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM