输入与输出


输入

用户的输入主要和ModuleClass的options有关,在用户使用set命令设置时为输入。 注意用户使用set命令输入时的所有值都是str类型。在exploit或后续调用时需要注意类型转换。 比如

options = {
'site': 'http://x0day.me',
'threads': 10,
}
….snip…
def exploit(self):
threads = int(self.options['thread'])

输入参数的处理


对于一些参数的输入,我们希望用户的输入符合规范,或者需要对输入进行判断或处理。这里有一些函数可以做到对一些参数进行判断与预处理。

rhosts/sites

这两个参数意指不定数量的IP,或者url。 retRhosts(rhosts)/retSites(sites)函数可以对rhosts/sites参数进行判断, 判断是否为文件(一行一条数据) 文件内容是否规范,是否为单一ip/url。并且retRhosts(rhosts)函数还可以判断是否为ip段。 如果不希望这样的判断,还可以用isip(),isUrl()函数判断单一输入。

True/False

有的情况下,需要对用户输入判断是否为真,单一的字符匹配不够人性化。这里可以使用 isTrue(check),isFalse(check)判断。

其他的输入处理可以参考函数文件。

输出

全局有一个输出函数:

color.echo(mess, color=None, append=False, verbose=False)

支持的颜色有:BLACK,BLUE,GREEN,CYAN,RED,PURPLE,YELLOW,WHITE,GREY

不换行输出

for x in range(1, 100):
    color.echo("test ... %d\r" % x , GREEN, append=True)
    time.sleep(0.1)

注意字符串后有 "\r"

verbose

如果输出不希望被全局冗余输出(verbose)设置影响,可以设置 verbose=True。 这样当全局禁止冗余输出时依然可以正常显示。