Глушение вывода из 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