使用 exec函数,我可以执行一个外部程序。
我使用以下代码获得了 HTTP 进程的总数。
$count = exec("ps -ef | grep http | wc -l");
现在,这是我的问题。如何从特定 IP 获取 HTTP 进程总数?
谢谢。
最佳答案
我假设您使用的是 linux 系统。您可以通过 ss
实用程序检索套接字统计信息。例如。为了列出与您的 http 或 https 端口的所有连接,您可以使用:
ss -t '( sport = :http or sport = :https )'
您可以通过 IP 进一步过滤。因此,假设您想通过远程地址 1.2.3.4 过滤所有连接:
ss -t '( sport = :http or sport = :https )' dst 1.2.3.4
现在将连接映射到实际进程有点棘手,因为传统上,每个连接由一个进程处理。但情况并非总是如此。您可以让 ss
使用 p
开关显示收听程序,如下所示:
ss -tp '( sport = :http or sport = :https )' dst 1.2.3.4
您会发现 ss
将这些方便地列在一行中,因此我们可以将它们 grep 出来并计算唯一性:
ss -tp '( sport = :http or sport = :https )' dst 1.2.3.4 | grep users | sort | uniq | wc -l
综合起来:
$count = exec(sprintf(
'ss -tp "( sport = :http or sport = :https )" dst %s | grep users | sort | uniq | wc -l',
escapeshellarg($remoteAddress)
));
关于php - 如何使用 php 查找特定 IP 中的 HTTP 进程总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444835/