使用Ubuntu,我正在尝试将tcpdump嗅探与来自客户端设备的自识别“ping”同步.问题是,通过看起来像tcpdump中的内置延迟,获得精确的启动和停止变得困难.这是我脚本的关键线:
sudo timeout .5s tcpdump -i wlan0 -e
当我设置超时以停止tcpdump之后,比如半秒(如我的例子中所示),不返回任何数据包.实际上,低于1.1s的任何值都不能返回数据包(而1.1和更长的工作时间非常好).
我已经尝试添加-n参数来抑制DNS,但这没有任何区别.我还尝试了两个完全不同的wifi卡(英特尔迅驰和TP-Link N900),以确保它不仅仅是一个硬件“功能”.
我不是开发人员,但我在tcpdump源代码中搜索“延迟”,“延迟”和“超时”,但似乎没有出现任何负责任的东西.
有任何想法吗?
gnu coreutils timeout.c对没有timer_settime()的系统有一个回退 – 它将恢复为单秒分辨率:
/* timer_settime() provides potentially nanosecond resolution. setitimer() is more portable (to Darwin for example),but only provides microsecond resolution and thus is a little more awkward to use with timespecs,as well as being deprecated by POSIX. Instead we fallback to single second resolution provided by alarm(). */
也许这就是你的问题.我不运行ubuntu所以我不能直接检查,但例如我的openbsd机器只有setitimer(),所以它只会使用全秒超时
– 编辑:在第二次看它仍然应该等待至少1秒,除非它的四舍五入…或者某种程度上tcpdump正在获得早期的sigterm……也许在这段时间内没有包裹?