Глушение вывода из tcpdump при использовании popen

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

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

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

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

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

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

Другие вопросы по тегам