【问题标题】:How can I identify which process is making UDP traffic on Linux?如何识别 Linux 上哪个进程正在产生 UDP 流量?
【发布时间】:2010-10-20 11:17:49
【问题描述】:

我的机器不断发出 udp dns 流量请求。我需要知道的是生成此流量的进程的 PID。

TCP 连接的正常方式是使用 netstat/lsof 并在 pid 处获取关联的进程。

是 UDP 连接是无状态的,因此,当我调用 netastat/lsof 时,只有在打开 UDP 套接字并且它正在发送流量时,我才能看到它。

我已尝试使用lsof -i UDPnetstat -anpue,但我无法找到哪个进程正在执行该请求,因为如果我调用 lsof,我需要在发送 udp 流量时准确调用 lsof/netstat /netstat 在发送 udp 数据报之前/之后是无法查看打开的 UDP 套接字的。

在发送 3/4 udp 数据包时调用 netstat/lsof 是不可能的。

如何识别臭名昭著的进程?

我已经检查了流量,试图从数据包的内容中识别发送的 PID,但无法从流量的内容中识别它。

谁能帮帮我?

我是这台机器的 root FEDORA 12 Linux noise.company.lan 2.6.32.16-141.fc12.x86_64 #1 SMP Wed Jul 7 04:49:59 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux

编辑:
我在超级用户平台上问过同样的问题。 更多与此类问题相关的地方!

Click here, You can find the right answer in the right place

【问题讨论】:

    标签: linux udp identity traffic


    【解决方案1】:

    这些 UDP DNS 请求是否会发送到您的 Fedora 机器配置使用的名称服务器?只需打开 Firefox 并转到 http://www.google.com 就会在名称解析发生时生成一个 UDP 数据包流。在终端窗口中运行 tcpdump port 53,打开 Firefox 并访问某个网站,你就会明白我的意思了。

    【讨论】:

    • 运行 tcpdump port 53 并将输出通过管道传输到日志文件,这样您将看到发出 UDP 请求的应用程序端口。通过了解应用程序的端口,您可以找到应用程序本身。
    • 您可以看到 src 端口,没错,但它是 UDP,当 OP 尝试运行 lsof 时,该端口很有可能不会被使用。这不是有状态的连接。事实上,快速浏览一下我的 tcpdump 输出会在一秒钟内列出四个不同的源端口。
    • mazianni,你已经明白了。 UDP 是无状态的,所以当我调用 lsof/netstat 时,端口不再使用,因此我无法看到进程的 PID。
    【解决方案2】:
     netstat -anp |grep -i udp
    

    进程在最后一列

    【讨论】:

    • 我已经尝试过使用更多选项 netstat -anpue,其中 u 代表 udp,e 代表扩展信息,我也尝试使用 -c 连续选项。问题是,当“臭名昭著”的进程产生 udp 流量时,我需要调用 netstat,并且无法在它完成后立即调用它。对于测试,我编写了一个调用 gethostbyname 的 C 循环,每 10 秒我就可以通过 netstat 查看流量,但我错过了很多请求。有什么方法可以拥有历史性和一致的 udp/进程流量方式?
    【解决方案3】:

    Linux Socket Monitor 可以跟踪网络套接字的变化。当新套接字打开时,它会提醒您。

    【讨论】:

    • Linux Socket Monitoring 只是一个调用 lsof/netstat 的 bash 脚本。这样一来,就不能准确的在 udp 流量产生的时候调用它。
    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多