如何检测是哪个进程发起了tcp主动请求

一个不能正确工作的脚本 monitor.php:

不能正确工作的原因:

  1. 可能tcpdump没有立即输出抓到的数据包,当输出时连接已经断开许久了
  2. 就算tcpdump能足够快地输出抓到的数据包,执行ss的时候也可能已断开连接(这个至少不至于一个抓不到)
  3. 就算本地主动关闭连接的情况下,连接会一段时间内处于timewait状态,但是timewait状态是不关联pid的哦

验证猜想缓存问题导致的方法:

  1. 启动检测脚本: php monitor.php
  2. nc打开百度80端口连接,然后 ctrl+z
  3. while :; do curl  http://baidu.com ;done
  4. 检测脚本输出结果部分如下:

 

解决办法:

正确的解决办法是使用systemtap: https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html#nettop

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据