linux – 如何找出发送数据包(生成网络流量)的进程的PID?

linux – 如何找出发送数据包(生成网络流量)的进程的PID?,第1张

概述几个星期前,我遇到了一个问题,我在大约300个节点的大型网络中更改了DNS地址.之后,一些节点仍然继续询问旧的DNS服务器,虽然resolv.conf没问题,而host / nslookup正在查询新的DNS服务器. 看着tcpdump并试图用iptables日志记录来记录请求,我确认确实有些主机仍在向旧的名称服务器发送查询. 我把其中一台主机停止生产,并开始关闭服务/支撑过程,试图找出罪魁祸首. 几个星期前,我遇到了一个问题,我在大约300个节点的大型网络中更改了DNS地址.之后,一些节点仍然继续询问旧的DNS服务器,虽然resolv.conf没问题,而host / nslookup正在查询新的DNS服务器.

看着tcpdump并试图用iptables日志记录来记录请求,我确认确实有些主机仍在向旧的名称服务器发送查询.

我把其中一台主机停止生产,并开始关闭服务/支撑过程,试图找出罪魁祸首.

最后 – 它是lldpd守护进程,它显然在启动时缓存了名称服务器,甚至没有注意到resolv.conf中的更改.

所以,我的问题是 – 是否有更智能的方法来找出哪个PID产生特定类型的流量?我尝试过auditctl,但没有取得多大成功. CentOS 6有问题,但如果有任何Linux发行版的解决方案,我将不胜感激.

解决方法 几天前我和同样的问题搏斗,并提出了一个非常简单的方法.它基于以下事实:发送进程将等待DNS响应来自它发送请求的同一端口:

>使用iptables -j LOG找出传出DNS请求的源端口@H_419_15@>使用lsof -i UDP:< source_port>找出哪个进程正在等待该端口的响应.

当然,当响应在几毫秒内到达时,你不能手动完成;此外,即使在自动化时,也无法保证在DNS响应到来之前您能够查询系统,并且发送过程终止.这就是为什么在执行上述步骤之前,我还配置内核流量控制器来延迟指向特定ip /端口的传出数据包(使用tc模块netem).这允许我在步骤1中获得的源UDP端口上控制我必须查询系统关于哪个PID等待DNS响应的时间窗口.

我已经在一个名为ptrap的小脚本中自动执行了上述步骤,包括tc延迟(这是一种更通用的解决方案,不限于DNS请求,因此有资格使用任何基于TCP / UDP的协议检测进程).在我的帮助下,我发现,在我的情况下,联系旧DNS服务器的服务是sendmail.

总结

以上是内存溢出为你收集整理的linux – 如何找出发送数据包(生成网络流量)的进程的PID?全部内容,希望文章能够帮你解决linux – 如何找出发送数据包(生成网络流量)的进程的PID?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/1034517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存