2

我编写了一个脚本,将数据输入到一个名为 ctffind 的 exe 程序中。exe 程序将一堆数据输出到我试图在日志文件中捕获的屏幕。

这是我现在正在使用的

my $logout = logfile 
open STDOUT, '>>', "$logout";
open my $PIPE1, '|-', '/opt/ctf/ctffind3_mp.exe' or die $!;

它可以将屏幕上出现的所有内容输出到日志文件中。

如果我more $logfile按预期显示文件,它大约有 5000 行长,并且大约有 50 行包含字符串“最终值”。在我的下一步中,我grep "final values" logfile认为日志文件是一个二进制文件并且不起作用,而是返回:

Binary file logfile matches

如何设置它以便正确编码日志文件?ctffind.exe 在运行时也会生成二进制文件,这是问题的一部分吗?

4

3 回答 3

3

感谢评论者的建议,我找到了两种不同的方法来解决问题:

  1. 一个可以更改grep logfilegrep -a logfile.

  2. 可以strings logfile logfile2用来制作可用版本的日志文件。

于 2012-09-08T01:43:59.693 回答
1

文件第一个块中的 Ascii NUL (\000) 足以让 Perl 将文件称为“二进制”文件。

echo "hello world\000" > myfile
perl -E '$f=shift;open $fh,"<",$f or die;say -e $f && -B $f ? "binary":"text"' myfile
于 2012-09-07T19:55:11.900 回答
1

可能ctffind3_mp.exe有代码在其中进行屏幕格式化,例如更改颜色、加粗、清除屏幕等。有几种方法可以消除这些:

  • 您可以通过管道cat -v将所有不可打印的内容转换为 ASCII 表示形式(例如 NUL 变为^@)。
  • 可能有用于从文本中去除 ANSI 或 VT100 序列的特定实用程序——尝试询问超级用户。
  • 您可以尝试设置$TERM(或在 perl 中$ENV{'TERM'})以unknown希望程序不再发出任何特殊的颜色、粗体等序列。
于 2012-09-07T21:26:55.920 回答