ユーザーのルーターを一意に識別するためにPHPにとにかくありますか? 同じルーターにどのユーザーがいるか知りたいです。
3 に答える
一般的な答えは、基本的に「いいえ」です。ネットワーク トポロジを検出することは重要な操作です (そして、パケットがたどったパスを検出することは、エンドポイントからはほぼ不可能です)。ただし、何らかの特定のトポロジーがあるように思えますが、詳細を教えていただければ、私たちがお手伝いできる可能性があります。
次のことを前提とします。
- 2 つのイングレス ルーターがある
- Web サーバーにはイーサネット インターフェイスが 1 つしかありません
- トラフィックが通過したルーターを特定しようとしている
各入力インターフェースですべての受信トラフィックに VLAN タグを付け (そしてすべてのホストをタグなしのスイッチ インターフェースに配置)、各 VLAN の Web サーバーにインターフェース エイリアスを自分自身に与えることができます。トラフィックがどの入口ルーターから来たかがわかります。
を使用してユーザーの 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";
}
}
?>
できる最善の方法は、 を使用してユーザーの IP アドレスを特定することです$_SERVER['REMOTE_ADDR']
。IP アドレスがルーターに対応する場合は、幸運です。