0%

获取masscan的扫描进度

Preface:

一开始打算通过subprocess模块来调用masscan,然后获取它输出的进度。

但是发现它的进度输出是覆盖刷新输出的。

这个时候,subprocess就无法获得它的输出了。

想了下,masscan这个刷新输出应该是优化过的结果,避免打印出太多重复无效的信息。

这个时候,我们只要修改一下它的输出就可以达到效果.


修改源码:

搜索了一下,参考:C语言实现在控制台同一行覆盖刷新输出,以及’\b’退格控制字符的使用

知道printf("\r"); 是可以做到刷新输出的效果的。

搜索关键字:rate:

定位到main-status.c这个文件

修改这一行.将覆盖刷新输出改成 换行输出。

重新编译运行.

可以看到效果:


获取进度百分比:

1
2
3
4
5
6
7
8
9
10
def getPercentageNum(content):
'''
正则匹配百分比数字
'''
re_pattern = r"(\d{1,2}.\d{1,2})\%"
num_match_list = re.findall(re_pattern, content)
if num_match_list:
return num_match_list[-1]
else:
return None
1
2
3
4
5
6
7
8
9
10
cmd = shlex.split(shell_cmd)
print cmd

p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while p.poll() is None:
line = p.stdout.readline()
line = line.strip()
if line:
print('percentage: [{}]'.format(line))
print getPercentageNum(line)

通过上面两个函数,就可以获取到 扫描的进度百分比了.

另一种思路:

开启一个msscan,按下回车键的时候,会再次输出进度。

或许可以与进程通信,然后发送信号,来获取进度信息。