1

PHP中是否有唯一标识用户路由器的方法?我想知道同一路由器上有哪些用户。

4

3 回答 3

4

一般的答案基本上是否定的——检测网络拓扑是一项不平凡的操作(当然从端点检测到你的路径数据包几乎是不可能的)。但是,听起来您有某种特定的拓扑结构,如果您告诉我们更多信息,我们可能会为您提供帮助。

假设以下几点:

  • 你有两个入口路由器
  • 您的网络服务器只有一个以太网接口
  • 您正在尝试确定流量通过哪个路由器

您可以对每个入口接口处的所有传入流量进行 VLAN 标记(并将所有主机放在未标记的交换机接口上),并在 Web 服务器上为每个 VLAN 给自己一个接口别名,因此通过知道您进入哪个虚拟接口,您会知道流量来自哪个入口路由器。

于 2010-11-25T22:36:08.730 回答
2

您可以使用检索用户 IP 地址$_SERVER['REMOTE_ADDR'],然后使用traceroute实用程序获取跃点并检查您希望找到的路由器(如果您知道它们的 IP)。

假设路由器没有为他们进行地址转换,否则这将不起作用,因为它依赖于能够通过路由器返回给用户。如果任何一个路由器都可以返回给用户,那么它根本不起作用。不过对于拨入用户来说很好。

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$router1IP = "123.123.123.123";

$output = array();
exec('traceroute -n ' . $ip, $output, $result);

if ($result == 0) {
    $outputText = implode("\n", $output);
    if (preg_match("/" . preg_quote($router1IP) . "/", $output)) {
        echo "Router 1";
    } else {
        echo "Router 2";
    }
}
?>
于 2010-11-25T22:37:40.930 回答
1

您能做的最好的事情是使用$_SERVER['REMOTE_ADDR']. 如果IP地址对应于路由器,那么你很幸运。

于 2010-11-25T22:37:12.500 回答