
def egressbuster():
    '''
    @description: Checks a range of ports to find available outbound ports. used to break egress filters.
    @author: original code by David Kennedy aka ReL1K
    @short: finds open outbound ports
    '''
    if len(sys.argv) <=2:
        print("[!] Must specify a port-range!")
        sys.exit()

    portrange = sys.argv[2]
    portrange = portrange.split("-")
    lowport = int(portrange[0])
    highport = int(portrange[1])        
    base_port = int(lowport)-1
    end_port = int(highport)

    print "Sending packets to egress listener..."

    while 1:
        base_port = base_port + 1
        thread.start_new_thread(start_socket, (RHOST,base_port))

        time.sleep(0.02)
        
        if base_port == end_port:
                break

    print "All packets have been sent"
    log_msg("\n\n [ Executed Egress Buster ]")
    log_msg("\n Start Time: %s" % logtime)


def start_socket(RHOST,base_port):
    try:  
        sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sockobj.connect((RHOST, base_port))
        sockobj.send(str(base_port))
        sockobj.close()
    except Exception, e:
        print e
        # pass through, ports closed
        pass


