2012-02-12 2 views
0

리눅스에서 nmap에 대한 간단한 ncurses GUI 래퍼를 작성하여 출력을 읽고 이해하기가 더 쉽습니다. 그러나 출력을 파싱 할 때 POSIX regex를 사용하고 코드에서 모든 표현식을 평가하는 것이 더 빠릅니다. 또는 grep, sed 또는 cut과 같은 유틸리티에 nmap 출력을 파이프합니까?Regex vs 파이핑 (속도면에서)

예를 들어, 서브넷에서 온라인 호스트를 검색하려면 다음 중 어느 솔루션이 더 좋을까요?

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); 
+0

내가 너라면 벤치마킹 테스트를 일부 수행 할 것입니다. – Eregrith

+0

벤치마킹 할 것이지만 정규식을 사용하는 것이 더 빠를 것이라고 생각합니다. 왜냐하면 그 도구가 어쨌든 수행 할 것이기 때문입니다. 또한 OS에 다른 프로세스를 시작하라는 오버 헤드가 있으며 그 모든 것을 의미하는 모든 것이 포함됩니다. –

+0

@Eregrith , 내가 왜이 질문에 대한 주된 이유는 이전에 POSIX regex 라이브러리를 사용한 적이 없기 때문입니다. 따라서 무의미하고 더 빠른 방법이 있다면 새로운 것을 배울 것입니다. –

답변

0

벤치 마크를 수행합니다. 테스트를 위해 http://goo.gl/E3jbM을 사용하겠습니다. 벤치 마크에 대한 도움이 필요하시면 알려 주시기 바랍니다.