我目前正在使用Sulley来模糊我的 FTP 服务器,但我遇到了问题。我想指定 STRU 命令,它的语法如下:
STRU [<SP> F|R|P] <CRLF>
我尝试为 STRU 命令指定可选的 F、R、P 参数,如下所示:
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')
这会将正确的命令发送到 FTP 服务器 (STRU F; STRU R; STRU P),但问题就是这样。它不会尝试省略角色或对其进行模糊处理,这也是我想要的。我知道我可以只指定模糊的参数,但我想模糊参数以及改变有效参数。任何想法如何将可选+模糊参数应用于上述代码?
另一个问题是我不知道如何检查当前正在使用哪个命令 - 我正在使用 s_block_start 中的命令,并且正在迭代 s_group 元素,如下所示:
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()
而已。欢迎任何想法和建议。谢谢