Я пишу простую оболочку графического интерфейса ncurses для nmap под Linux, чтобы упростить чтение и понимание выходных данных. Однако, когда дело доходит до синтаксического анализа выходных данных, быстрее ли использовать регулярное выражение 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);