Actualmente estoy usando Sulley para borrar mi servidor FTP, pero tengo problemas. Quiero especificar el comando STRU, que tiene una sintaxis:
STRU [<SP> F|R|P] <CRLF>
Intenté especificar los argumentos opcionales F, R, P para el comando STRU como los siguientes:
s_initialize('DataSTRU')
s_static('STRU ')
s_group('struv', values=['F', 'R', 'P'])
s_block_start('strub', group='struv')
s_block_end()
s_repeat('strub', min_reps=0, max_reps=1, fuzzable=True)
s_static('\r\n')
Esto envía los comandos correctos al servidor FTP (STRU F; STRU R; STRU P), pero el problema es que eso es todo. No trata de omitir el personaje o de difuminarlo, lo que también me gustaría. Sé que solo puedo especificar el argumento para fuzz, pero me gustaría fuzz el argumento, así como mutar los argumentos válidos. ¿Alguna idea de cómo aplicar el argumento opcional + fuzzable al código anterior?
Otro problema es que no sé cómo puedo verificar qué comando se está usando actualmente. Estoy usando los comandos dentro de s_block_start y estoy iterando a través del elemento s_group como el siguiente:
s_initialize('DataSet')
s_group('commands', values=['MODE', 'PROT', 'STRU'])
s_block_start('DataBlock', group='commands')
s_delim(' ')
// TODO: how to check whether:
// if [current_command == 'MODE'] do this
// elif [current_command == 'PROT'] do this
// else [current_command == 'STRU'] do this
s_static('\r\n')
s_block_end()
Eso es todo. Cualquier idea y recomendaciones son bienvenidas. Gracias