大规模 SSDP 洪水,如何查找原因

大规模 SSDP 洪水,如何查找原因

自从安装新服务器后,我的网络性能下降,我一直使用 Wireshark 来捕获我的网络。我发现有几次我的服务器在 30 秒内发送了 170,000 个 SSDP 请求。似乎有点过分 :p

Simple Service Discovery Protocol
    M-SEARCH * HTTP/1.1\r\n
    Host: 239.255.255.250:1900\r\n
    <Host: 239.255.255.250:1900\r\n>
    Man: "ssdp:discover"\r\n
    ST: ssdp:all\r\n
    MX: 5\r\n
    \r\n
    [Full request URI: http://239.255.255.250:1900*]
    <Request: True>
    [HTTP request 10/149390]
    [Prev request in frame: 9]
    [Next request in frame: 12]

这正是发送了超过 10 万次的请求。现在我想知道,有没有一种聪明的方法可以找出我的服务器上哪个进程导致了这个请求?

编辑:原来是 PLEX 服务器为 DNLA 创建了所有这些消息。我的路由器同时出现了一个错误,导致路由器超时和崩溃。升级路由器软件解决了这个问题。

答案1

要查找执行此操作的进程,请使用:

sudo lsof -n -P -i +c 13 | grep 1900

来自man lsof:列出打开的文件

打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、执行文本引用、库、流或网络文件(Internet 套接字、NFS 文件或 UNIX 域套接字)。可以通过路径选择文件系统中的特定文件或所有文件。

  1. -n:禁止将网络号转换为网络文件的主机名。禁止转换可能会使lsof运行速度更快。当主机名查找无法正常工作时,它也很有用。

  2. -P:禁止将网络文件的端口号转换为端口名。禁止转换可能会使lsof运行速度稍快一些。当端口名查找不正常时,它也很有用。

  3. -i [i]:选择 Internet 地址与 i 中指定的地址相匹配的文件列表。如果未指定地址,则此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。

  4. +c w:定义要打印在列中的与进程关联的 UNIX 命令的名称(由 UNIX 方言提供)的最大初始字符数。COMMANDlsof默认值为 9。)


 sudo lsof -n -P -i +c 13 | grep 1900

它列出了系统中进程打开的文件,并使用上面列出的选项来修改显示的内容。例如,我使用了:

 sudo lsof -P -i +c 13

结果:

  1. 没有 则较慢-n,并且

  2. 网络号到主机名的转换

     postgres       2930        postgres   11u  IPv4  28152      0t0  UDP localhost:56771->localhost:56771 
     postgres       2931        postgres   11u  IPv4  28152      0t0  UDP localhost:56771->localhost:56771 
     postgres       2932        postgres   11u  IPv4  28152      0t0  UDP localhost:56771->localhost:56771 
     postgres       2933        postgres   11u  IPv4  28152      0t0  UDP localhost:56771->localhost:56771 
     postgres       2934        postgres   11u  IPv4  28152      0t0  UDP localhost:56771->localhost:56771 
     postgres       2936        postgres   11u  IPv4  26439      0t0  UDP localhost:46276->localhost:46276 
     postgres       2937        postgres   11u  IPv4  26439      0t0  UDP localhost:46276->localhost:46276 
     postgres       2938        postgres   11u  IPv4  26439      0t0  UDP localhost:46276->localhost:46276 
     postgres       2939        postgres   11u  IPv4  26439      0t0  UDP localhost:46276->localhost:46276 
     postgres       2940        postgres   11u  IPv4  26439      0t0  UDP localhost:46276->localhost:46276 
    

但使用:

sudo lsof -n -P -i +c 13

结果:

  1. 速度更快,无需将网络号转换为主机名

     postgres       2930        postgres   11u  IPv4  28152      0t0  UDP 127.0.0.1:56771->127.0.0.1:56771 
     postgres       2931        postgres   11u  IPv4  28152      0t0  UDP 127.0.0.1:56771->127.0.0.1:56771 
     postgres       2932        postgres   11u  IPv4  28152      0t0  UDP 127.0.0.1:56771->127.0.0.1:56771 
     postgres       2933        postgres   11u  IPv4  28152      0t0  UDP 127.0.0.1:56771->127.0.0.1:56771 
     postgres       2934        postgres   11u  IPv4  28152      0t0  UDP 127.0.0.1:56771->127.0.0.1:56771 
     postgres       2936        postgres   11u  IPv4  26439      0t0  UDP 127.0.0.1:46276->127.0.0.1:46276 
     postgres       2937        postgres   11u  IPv4  26439      0t0  UDP 127.0.0.1:46276->127.0.0.1:46276 
     postgres       2938        postgres   11u  IPv4  26439      0t0  UDP 127.0.0.1:46276->127.0.0.1:46276 
     postgres       2939        postgres   11u  IPv4  26439      0t0  UDP 127.0.0.1:46276->127.0.0.1:46276 
     postgres       2940        postgres   11u  IPv4  26439      0t0  UDP 127.0.0.1:46276->127.0.0.1:46276
    

这里我只使用了-n,进行网络号转换需要更多时间,如果没有选项,-n搜索速度会更快,删除以查看主机名。尝试使用其他选项来查看不同的输出。总的来说,这些选项可以改善搜索并使其更快。

相关内容