Отключение вывода tcpdump при использовании popen

Я пишу программу на C для анализа пакетов, захваченных tcpdump. В моей программе я использую popen, чтобы открыть канал для процесса tcpdump, который захватывает пакеты и выводит необработанные данные на стандартный вывод, как показано ниже.

FILE *tcpdump = popen("tcpdump -s0 -w -", "r");

Однако предупреждения и сообщения об ошибках из tcpdump попадают прямо в stderr, который отображается в консоли. Я хотел бы как-то их скрыть, чтобы отображался только результат моей программы.

Один из способов, который я пробовал, состоял в том, чтобы добавить 2>&1 к команде tcpdump, но тогда моей программе пришлось бы различать предупреждения/ошибки tcpdump и необработанные данные пакета.

Есть ли простой способ отключить вывод stderr из tcpdump?


person DanielGibbs    schedule 19.07.2011    source источник


Ответы (1)


перенаправить stderr в /dev/null:

FILE *tcpdump = popen("tcpdump -s0 -w - 2>/dev/null", "r");

2>&1 означает перенаправление stderr в stdout, 2>file означает перенаправление stderr в файл (а перенаправление в /dev/null по существу игнорирует вывод)

Найдите объяснение перенаправления в man bash

person Foo Bah    schedule 19.07.2011