示例#1
0
def main():
    log = logging.getLogger(__name__)
    log.setLevel(logging.INFO)
    options, args = getargs()
    ipranges = ip4range(*args)
    port = options.port
    if options.filename:
        fn = options.filename
    else:
        fn = str(random.randrange(1000, 9999)) + '.xml'
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.settimeout(5)
    t = tftp()
    start_time = datetime.datetime.now()
    finito = False
    data = t.makerrq(fn)
    while 1:
        r, w, e = select.select([s], [], [], 0.1)
        if len(r) > 0:
            for s in r:
                try:
                    recv = s.recvfrom(1024)
                except socket.error, e:
                    print e
                    continue
                buff = recv[0]
                ipaddr = recv[1]
                try:
                    response = tftpstruct.parse(buff)
                except Exception, e:
                    print e
                log.info("IP: %s:%s responded: %s" %
                         (ipaddr[0], ipaddr[1], response))
示例#2
0
def main():
    log = logging.getLogger(__name__)
    log.setLevel(logging.INFO)
    options,args = getargs()
    ipranges = ip4range(*args)
    port = options.port
    if options.filename:
        fn = options.filename
    else:
        fn = str(random.randrange(1000,9999)) + '.xml'
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.settimeout(5)
    t = tftp()
    start_time = datetime.datetime.now()
    finito = False
    data = t.makerrq(fn)
    while 1:
        r,w,e = select.select([s],[],[],0.1)
        if len(r) > 0:        
            for s in r:
                try:
                    recv = s.recvfrom(1024)
                except socket.error,e:
                    print e
                    continue            
                buff = recv[0]
                ipaddr = recv[1]
                try:
                    response = tftpstruct.parse(buff)
                except Exception,e:
                    print e
                log.info("IP: %s:%s responded: %s" % (ipaddr[0],ipaddr[1],response))
示例#3
0
def main():
    log = logging.getLogger(__name__)
    log.setLevel(logging.INFO)
    options,args = getargs()
    log.setLevel(calcloglevel(options))
    if options.listtemplates:
        print "Templates available:"
        print "\r\n".join(listtemplates())
        sys.exit()
    if len(args) != 1:
        parser.error("Please pass just one destination tftp server name")
    if options.debug:
        log.setLevel(logging.DEBUG)
        debughandler = logging.handlers.WatchedFileHandler('debug.log')
        log.addHandler(debughandler)
    dst = (args[0],int(options.port))
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.settimeout(5)
    mydirtysocks = mylist(limit=100)
    mydirtysocks.append(s)
    t = tftp()
    if options.range:
        ranges = getRange(options.range,rangetype=options.rangetype)
        fntemplate = getfntemplate(options.fntemplate)
        try:
            fntemplate % 100
        except TypeError:
            log.critical('The template specified is not a valid one or not found')
            return
        filelist = gen_range(fntemplate, ranges)
        filelist2 = gen_range(fntemplate, ranges)
    else:
        filelist = gen_tftpfilelist(options.filenamesfile)
        filelist2 = gen_tftpfilelist(options.filenamesfile)
    dumpfiles = dict()
    ackbucket = list()
    sportmap = dict()
    start_time = datetime.datetime.now()
    cleansocks = list()    
    finito = False
    lastrecv = time()
    maxlastrecv = 5
    if not os.path.exists(options.dstdir):
        os.mkdir(options.dstdir)
    if not options.quiet:
        widgets = ['Test: ', progressbar.Percentage(), ' ', progressbar.Bar(marker=progressbar.RotatingMarker()),
                   ' ', progressbar.ETA(), ' ']
        filelistlen = 0 
        for _tmp in filelist2:
            filelistlen += 1
        fnno = 0
        pbar = progressbar.ProgressBar(widgets=widgets, maxval=filelistlen).start()
    while 1:
        socklists = list()
        socklists.extend(mydirtysocks.list)
        socklists.extend(cleansocks)
        r,w,e = select.select(socklists,[],[],0.1)
        if len(r) > 0:        
            for s in r:
                recv = s.recvfrom(1024)
                log.debug('Recv: %s' % `recv`)
                lastrecv = time()
                buff = recv[0]
                ipaddr = recv[1]
                try:
                    response = tftpstruct.parse(buff)
                except lib.contrib.construct.core.RangeError:
                    response = None
                if response is None:
                    log.warn('Error parsing response')
                    continue
                if response.operation == 'ERROR':
                    if (response.data.errorcode == 'FileNotFound' or
						response.data.ErrMsg == 'No such file or directory'):
                        pass
                    else:
                        log.debug(str(response))
                        log.warn( "Time for a siesta.. I think the tftp can't keep up")
                        sleep(2)
                elif response.operation == 'DATA':
                    addresses = (ipaddr,s.getsockname())
                    if addresses not in dumpfiles:
                        dumpfiles[addresses] = dict()                
                    dumpfiles[addresses][response.data.block] = response.data.data
                    if s in mydirtysocks.list:
                        mydirtysocks.list.remove(s)
                        cleansocks.append(s)
                    ackbucket.append([response.data.block,ipaddr,s])            
        else:
            if time() - lastrecv > maxlastrecv:
                finito = True
            if len(ackbucket) > 0:
                block,datadst,s = ackbucket.pop(-1)
                data = t.makeack(block)                
                s.sendto(data,datadst)
            elif finito:
                break
            if not finito:
                try:
                    fn = filelist.next()                    
                    if not options.quiet:
                        fnno += 1
                        pbar.update(fnno)
                except StopIteration:
                    finito = True
                    continue
                data = t.makerrq(fn)
                log.debug('asking for %s' % fn)
                s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                s.settimeout(5)
                log.debug('sending %s' % `data`)
                s.sendto(data,dst)
                mydirtysocks.append(s)        
                saddr,sport = s.getsockname()
                sportmap[sport] = fn
            if random.randrange(84) == 42:
                dumpfiles,files = dumpnassemble(dumpfiles,sportmap,options.dstdir,partialdump=False)
                for fn in files:
                    log.info("Dumped %s" % fn)
    if (time() - lastrecv > maxlastrecv) or len(dumpfiles.keys()) == 0:
        log.error('Did not receive a response after %s seconds, quitting' \
                  % (time()-lastrecv))        
    dumpfiles,files = dumpnassemble(dumpfiles,sportmap,options.dstdir,partialdump=True)
    for fn in files:
        log.info( "pos 2 Dumped %s" % fn)
    log.info( "Total time: %s" % (datetime.datetime.now() - start_time) )
示例#4
0
def main():
    log = logging.getLogger(__name__)
    log.setLevel(logging.INFO)
    options, args = getargs()
    log.setLevel(calcloglevel(options))
    if options.listtemplates:
        print "Templates available:"
        print "\r\n".join(listtemplates())
        sys.exit()
    if len(args) != 1:
        parser.error("Please pass just one destination tftp server name")
    if options.debug:
        log.setLevel(logging.DEBUG)
        debughandler = logging.handlers.WatchedFileHandler('debug.log')
        log.addHandler(debughandler)
    dst = (args[0], int(options.port))
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.settimeout(5)
    mydirtysocks = mylist(limit=100)
    mydirtysocks.append(s)
    t = tftp()
    if options.range:
        ranges = getRange(options.range, rangetype=options.rangetype)
        fntemplate = getfntemplate(options.fntemplate)
        try:
            fntemplate % 100
        except TypeError:
            log.critical(
                'The template specified is not a valid one or not found')
            return
        filelist = gen_range(fntemplate, ranges)
        filelist2 = gen_range(fntemplate, ranges)
    else:
        filelist = gen_tftpfilelist(options.filenamesfile)
        filelist2 = gen_tftpfilelist(options.filenamesfile)
    dumpfiles = dict()
    ackbucket = list()
    sportmap = dict()
    start_time = datetime.datetime.now()
    cleansocks = list()
    finito = False
    lastrecv = time()
    maxlastrecv = 5
    if not os.path.exists(options.dstdir):
        os.mkdir(options.dstdir)
    if not options.quiet:
        widgets = [
            'Test: ',
            progressbar.Percentage(), ' ',
            progressbar.Bar(marker=progressbar.RotatingMarker()), ' ',
            progressbar.ETA(), ' '
        ]
        filelistlen = 0
        for _tmp in filelist2:
            filelistlen += 1
        fnno = 0
        pbar = progressbar.ProgressBar(widgets=widgets,
                                       maxval=filelistlen).start()
    while 1:
        socklists = list()
        socklists.extend(mydirtysocks.list)
        socklists.extend(cleansocks)
        r, w, e = select.select(socklists, [], [], 0.1)
        if len(r) > 0:
            for s in r:
                recv = s.recvfrom(1024)
                log.debug('Recv: %s' % ` recv `)
                lastrecv = time()
                buff = recv[0]
                ipaddr = recv[1]
                try:
                    response = tftpstruct.parse(buff)
                except lib.contrib.construct.core.RangeError:
                    response = None
                if response is None:
                    log.warn('Error parsing response')
                    continue
                if response.operation == 'ERROR':
                    if (response.data.errorcode == 'FileNotFound'
                            or response.data.ErrMsg
                            == 'No such file or directory'):
                        pass
                    else:
                        log.debug(str(response))
                        log.warn(
                            "Time for a siesta.. I think the tftp can't keep up"
                        )
                        sleep(2)
                elif response.operation == 'DATA':
                    addresses = (ipaddr, s.getsockname())
                    if addresses not in dumpfiles:
                        dumpfiles[addresses] = dict()
                    dumpfiles[addresses][
                        response.data.block] = response.data.data
                    if s in mydirtysocks.list:
                        mydirtysocks.list.remove(s)
                        cleansocks.append(s)
                    ackbucket.append([response.data.block, ipaddr, s])
        else:
            if time() - lastrecv > maxlastrecv:
                finito = True
            if len(ackbucket) > 0:
                block, datadst, s = ackbucket.pop(-1)
                data = t.makeack(block)
                s.sendto(data, datadst)
            elif finito:
                break
            if not finito:
                try:
                    fn = filelist.next()
                    if not options.quiet:
                        fnno += 1
                        pbar.update(fnno)
                except StopIteration:
                    finito = True
                    continue
                data = t.makerrq(fn)
                log.debug('asking for %s' % fn)
                s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                s.settimeout(5)
                log.debug('sending %s' % ` data `)
                s.sendto(data, dst)
                mydirtysocks.append(s)
                saddr, sport = s.getsockname()
                sportmap[sport] = fn
            if random.randrange(84) == 42:
                dumpfiles, files = dumpnassemble(dumpfiles,
                                                 sportmap,
                                                 options.dstdir,
                                                 partialdump=False)
                for fn in files:
                    log.info("Dumped %s" % fn)
    if (time() - lastrecv > maxlastrecv) or len(dumpfiles.keys()) == 0:
        log.error('Did not receive a response after %s seconds, quitting' \
                  % (time()-lastrecv))
    dumpfiles, files = dumpnassemble(dumpfiles,
                                     sportmap,
                                     options.dstdir,
                                     partialdump=True)
    for fn in files:
        log.info("pos 2 Dumped %s" % fn)
    log.info("Total time: %s" % (datetime.datetime.now() - start_time))