2010-11-25 4 views

Antwort

2

Sie können die Benutzer-IP-Adresse mit $_SERVER['REMOTE_ADDR'] abrufen und dann ein traceroute Dienstprogramm verwenden, um die Hops zu erhalten und nach den Routern zu suchen, die Sie finden möchten, wenn Sie die IPs von beiden kennen.

Angenommen, der Router übersetzt sie nicht für die Adresse, sonst funktioniert das nicht, da es darauf angewiesen ist, dass der Router den Benutzer wieder erreichen kann. Wenn einer der Router zum Benutzer zurückkehren kann, funktioniert er überhaupt nicht. Gut für Dial-In-Benutzer.

<?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"; 
    } 
} 
?> 
+0

Es gibt keine Garantie, dass der Rückweg mit dem Pfad übereinstimmt, den Sie in diese Richtung zurücklegen. Dies ist also bestenfalls eine Vermutung. Es hängt auch davon ab, ob "REMOTE_ADDR" das Vorhandensein eines Headers "X-FORWARDED-FOR" berücksichtigt. –

+0

@Nick Bastin: Ganz richtig, es ist eine Vermutung - aber im Vergleich zu "keine Ahnung" besteht eine gewisse Chance zu erraten. Es würde für Einwahlbenutzer funktionieren. Ich habe meine Antwort aktualisiert, um das zu sagen. – Orbling

4

Die allgemeine Antwort wird grundsätzlich no sein - Erkennung der Netzwerktopologie ist ein nicht-trivialer Vorgang (und das Erkennen der Pfadpakete, die Sie benötigen, kann von einem Endpunkt nahezu unmöglich sein). Es klingt jedoch so, als hätten Sie eine bestimmte Topologie, die Ihnen vielleicht mehr darüber sagt, dass wir Ihnen vielleicht helfen können.

Vorausgesetzt, die folgenden Dinge:

  • Sie haben zwei Ingress-Router
  • Ihr Webserver hat nur eine Ethernet-Schnittstelle
  • Sie versuchen zu bestimmen, welche den Verkehr Router kam durch

Sie könnten den eingehenden Verkehr an jeder Eingangsschnittstelle mit VLAN markieren (und alle Ihre Hosts auf unmarkierte Switch-Schnittstellen setzen) und sich einen Schnittstellen-Alias ​​auf Ihrem Web-Server geben Für jedes VLAN, und damit wissen Sie, aus welchem ​​virtuellen Interface Sie gekommen sind, wissen Sie, von welchem ​​Ingress-Router der Traffic kam.

+0

+1 Für die VLAN-Idee, clever. – Orbling

1

Das Beste, was Sie tun können, ist eine Benutzer-IP-Adresse mit der $_SERVER['REMOTE_ADDR'] identifizieren. Wenn IP-Adresse Router entspricht, haben Sie Glück.

Verwandte Themen