我正在为Linux 下的nmap编写一个简单的 ncurses GUI 包装器,以使其更易于阅读和理解输出。但是,在解析输出时,使用 POSIX 正则表达式并评估代码中的每个表达式是否更快,或者将 nmap 输出通过管道传输到实用程序,例如grep
,sed
或cut
?
例如,如果我想检索子网中的在线主机,以下哪种解决方案可能更好?
pipe = popen("nmap -sn xxx.xxx.xxx.xxx/24", "r");
if (pipe == NULL) {
fprintf (stderr, "error creating the pipe: %s\n", strerror(errno));
exit (1);
}
while (!feof (pipe)) {
if (fgets (buff, BUFF_SIZE, pipe) != NULL) {
/* perform regex evaluations here */
printf ("%s", buff);
}
}
pclose (pipe);
对比
pipe = popen("nmap -sn xxx.xxx.xxx.xxx/24 | grep -E 'pattern' | ...", "r");
if (pipe == NULL) {
fprintf (stderr, "error creating the pipe: %s\n", strerror(errno));
exit (1);
}
while (!feof (pipe)) {
if (fgets (buff, BUFF_SIZE, pipe) != NULL) {
printf ("%s", buff);
}
}
pclose (pipe);