Esempio n. 1
0
def rcon(command):
    connection = AdminClient()
    connection.settimeout(0.4)
    connection.configure(password=RCON_PASSWORD,
                         host=SERVER_IP,
                         port=ADMIN_PORT)
    connection.connect()
    failed = False
    try:
        protocol_response = connection.recv_packet()
        welcome_response = connection.recv_packet()
    except socket.error:
        failed = True

    if protocol_response is None or welcome_response is None:
        failed = True

    result = []
    if failed:
        pass
    else:
        connection.send_packet(AdminRcon, command=command)

        cont = True
        while cont:
            packets = connection.poll()
            if packets is None or packets is False:
                break
            cont = len(packets) > 0
            for packet, data in packets:
                if packet == ServerRcon:
                    result += [data['result']]
                elif packet == ServerRconEnd:
                    cont = False
                    break
                else:
                    pass
    connection.disconnect()

    return result
Esempio n. 2
0
    connection.packet_send += formatter_send
    connection.configure(password=options.password,
                         host=options.host,
                         port=options.port)
    if not connection.connect():
        print("Unable to connect to %(host)s:%(port)s" % {
            'host': options.host,
            'port': options.port
        })
        sys.exit()

    connection.poll(0.2)
    connection.poll(0.2)

    for packet, data, poll in packets:
        connection.send_packet(packet, **data)
        if not isinstance(poll, (list, tuple)):
            if isinstance(poll, float) and poll > 0:
                poll = [
                    poll,
                ]
            elif isinstance(poll, bool) and poll:
                poll = [
                    1.0,
                ]
        for timeout in poll:
            connection.poll(timeout)

    while (connection.poll(0.25) != False):
        time.sleep(0.1)
        packets.append([packet.__class__, data, poll])

    if options.verbose:
        print("Connecting to %(host)s:%(port)s" % {'host': options.host, 'port': options.port})
    connection = AdminClient()
    connection.packet_recv += formatter_recv
    connection.packet_send += formatter_send
    connection.configure(password=options.password, host=options.host, port=options.port)
    if not connection.connect():
        print("Unable to connect to %(host)s:%(port)s" % {'host': options.host, 'port': options.port})
        sys.exit()

    connection.poll(0.2)
    connection.poll(0.2)

    for packet, data, poll in packets:
        connection.send_packet(packet, **data)
        if not isinstance(poll, (list, tuple)):
            if isinstance(poll, float) and poll > 0:
                poll = [poll,]
            elif isinstance(poll, bool) and poll:
                poll = [1.0,]
        for timeout in poll:
            connection.poll(timeout)

    while(connection.poll(0.25) != False):
        time.sleep(0.1)

    if options.verbose:
        print("Test complete")
    connection.force_disconnect()
        welcome_response = connection.recv_packet()
    except socket.error:
        failed = True

    if protocol_response is None or welcome_response is None:
        failed = True

    if failed:
        print("Unable to connect to %(host)s:%(port)s" % {'host': options.host, 'port': options.port})
    else:
        for command in args:
            if not connection.is_connected:
                break
            if options.verbose:
                print("Sending Rcon command: '%s'" % command)
            connection.send_packet(AdminRcon, command = command)

            cont = True
            while cont:
                packets = connection.poll()
                if packets is None or packets is False:
                    print("Connection lost!")
                    break
                cont = len(packets) > 0
                for packet, data in packets:
                    if packet == ServerRcon:
                        print(">>> %s" % data['result'])
                    elif packet == ServerRconEnd:
                        print("<<< END OF COMMAND >>>")
                        cont = False
                        break
    if protocol_response is None or welcome_response is None:
        failed = True

    if failed:
        print("Unable to connect to %(host)s:%(port)s" % {
            'host': options.host,
            'port': options.port
        })
    else:
        for command in args:
            if not connection.is_connected:
                break
            if options.verbose:
                print("Sending Rcon command: '%s'" % command)
            connection.send_packet(AdminRcon, command=command)

            cont = True
            while cont:
                packets = connection.poll()
                if packets is None or packets is False:
                    print("Connection lost!")
                    break
                cont = len(packets) > 0
                for packet, data in packets:
                    if packet == ServerRcon:
                        print(">>> %s" % data['result'])
                    elif packet == ServerRconEnd:
                        print("<<< END OF COMMAND >>>")
                        cont = False
                        break