Fatal
написал 2 июня 2005 года в 12:06 (1763 просмотра)
Ведет себя
как мужчина; открыл 123 темы в форуме, оставил 484 комментария на сайте.
объясните, пожалуйста, следующее:
почему не работает tcpdump -i lo0 > file ?
на другом терминале я ввожу:
ping -c4 localhost
а, файл остаётся пустым, почему так?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
#tcpdump -i lo -l | tee file
отобразит работу tcpdump и сохранит результат в файле.
спасибо!
можно и так tcpdump -i lo0 -l > file, ну это не важно.
важно то, что судя по ключу -l нельзя перенаправить не буферезированный вывод!
или я ошибаюсь?
я ошибаюсь. проверил я, написав маленькую прогу (игра на том, что write() не буферезируется).
#include
int main(void)
{
char str[] = «Hello!\n»;
write(1, str, sizeof(str)-1);
return 0;
}
результат:
# cc output.c
# ./a.out > file
# cat file
Hello!
..#
хотя в man tcpdump написано про ключ -l
Make stdout line buffered.
то есть без этого ключа stdout не буферезированный…
и значит, что не буферезированный поток не перенаправляется, хотя моя прога показала, что это ошибочно.
в чём фишка? почему с ключём -l перенаправляется, а без него нет?
проверял на FreeBSD 5.3
У меня работают оба варианта, система — ASPLinux.
У тебя точно есть интерфейс lo1?
вы хотите сказать, не lo1, а lo0?
tcpdump выдаёт:
# tcpdump -D
1. lnc0
2. lo0
может это особенности версии для BSD? Пробовал под линь?
не пробовал, у меня нет его. думаю достаточно, что вы попробовали.
скорее всего действует то, что при указании -l в процессе вывода вызывается flush над stdout.
таким образом, вывод в файл производится не целым буфером, а несколькими строчками.
без указания этого ключа вывод в файл происходит по двум событиям: заполнении буфера, закрытия дескриптора файла.
а так как время выполнения tcpdump несколько продложительное, то…. второе событие может не наступать очень долго.
и остаётся только одна причина.
проверил бы ты её, а? ;)
без ключа строки выводятся в stdout, значит эти строки выбрасываются из буфера, выбрасывание скорее всего происходит при выводе новой строки. Поэтому даже если файл выводится несколькими строчками он должен перенаправляться в файл.