使用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
很方便地在一行中列出了这些,所以我们可以把它们放出来并计算出唯一性:
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)
));