Preface:
一开始打算通过subprocess
模块来调用masscan
,然后获取它输出的进度。
但是发现它的进度输出是覆盖刷新输出的。
这个时候,subprocess
就无法获得它的输出了。
想了下,masscan
这个刷新输出应该是优化过的结果,避免打印出太多重复无效的信息。
这个时候,我们只要修改一下它的输出就可以达到效果.
修改源码:
搜索了一下,参考:C语言实现在控制台同一行覆盖刷新输出,以及’\b’退格控制字符的使用
知道printf("\r");
是可以做到刷新输出的效果的。
搜索关键字:rate:
定位到main-status.c
这个文件
修改这一行.将覆盖刷新输出改成 换行输出。
重新编译运行.
可以看到效果:
获取进度百分比:
1 | def getPercentageNum(content): |
1 | cmd = shlex.split(shell_cmd) |
通过上面两个函数,就可以获取到 扫描的进度百分比了.
另一种思路:
开启一个msscan,按下回车键的时候,会再次输出进度。
或许可以与进程通信,然后发送信号,来获取进度信息。