2014-04-26 5 views
6

erkennen Gibt es eine Möglichkeit, Verbindung von Benutzer mithilfe von PHP-Skript zu erkennen. Willst du 3g, WIFI, 4g und Lite erkennen. Ich möchte herausfinden, woher die Benutzer kommen. Ich habe bereits eine Lösung in JavaScript, aber ich möchte es in PHP aus bestimmten Gründen.Benutzerverbindung 3g, 4g, Wifi oder Lite mit Hilfe von PHP

+0

Ich glaube nicht, dass das möglich ist. Warum sollte die Client-Maschine es Ihnen sagen? Was ist die Javascript-Lösung? –

+0

In JavaScript finde ich das [navigator.connection] (https://developer.mozilla.org/en/DOM/window.navigator.connection) Wie wir Clients IP mit PHP finden können, warum ich dachte, dass da ist jede Lösung, um seinen Verbindungstyp zu erhalten. –

+0

und das ist nur in Firefox. –

Antwort

0

Eine etwas mögliche Lösung ist die Verwendung von geoip_isp_by_name PHP-Funktion, um den Namen des ISP und dann durch einige API oder Scraping zu überprüfen, welche Technologien dieser ISP bietet.

18

Sie können manchmal den Unterschied zwischen WIFI und nicht-WIFI unterscheiden, und manchmal können Sie keinen Unterschied feststellen.

Sie können nie den Unterschied zwischen 3G/4G/LTE mit PHP unterscheiden.

Annahmen und Terminologie

Ich gehe davon aus, dass ein Smartphone über einen Browser auf Ihrem HTTP-Server verbunden ist, und dem Server verwendet PHP die Anfrage zu bearbeiten. Wenn dies nicht der Fall ist, klären Sie bitte Ihre Frage.

Terminologie: Ich werde das Wort "ISP" verwenden, um auf Unternehmen zu verweisen, die Internetdienste bereitstellen, aber keine Telefonnetzbetreiber sind.

Welche Informationen erhält der Server?

Wenn Ihr Gerät mit einem PHP-Server verbindet, den Server einige Informationen über sich selbst sagt, der Server die IP-Adresse des Geräts kennen kann, User-Agent usw.

Das Problem

Die Problem ist, dass der Browser "Egal", welche Verbindung es ist, und es hat keine Auswirkungen auf die Informationen, die der Browser an den Server sendet. Wenn der Browser 3G/4G/LTE verwendet, würde er genau die gleichen Informationen senden, die er gesendet hätte, wenn er auf Wifi geschaltet wäre.

Semi "Proof": Das HTTP-Protokoll, das die Daten vom Gerät zum HTTP-Server überträgt, kennt den zugrunde liegenden Netzwerkstack überhaupt nicht.

Wie identifizieren wir die Verbindung dann?

Der einzige Unterschied zwischen einem Wifi/Non-Wifi ist: Die IP-Adresse.

ISPs haben eine große Liste von reservierten IP-Adressen. Wenn Sie feststellen können, dass diese IP-Adresse zu einem bestimmten ISP gehört, muss dies eine Wifi-Verbindung sein.

Ähnlich haben Telefon Carrier eine große Liste von reservierten IP-Adressen. Wenn Sie feststellen können, dass diese IP-Adresse zu einem bestimmten Telefonanbieter gehört, muss dies eine 3G/4G/LTE-Verbindung sein!

es in der Praxis tut

Wir müssen irgendwie jede IP-Adresse zu einem ISP/Carrier korrelieren, eine Möglichkeit, dies zu tun, ist eine riesige Datenbank aller ISP/Carrier haben und ihre jeweiligen reservierten IP-Adressen. In der Praxis kann eine einfache WHOIS-Suche die Quelle aufdecken.

Zum Beispiel ein WHOIS-Lookup für eine zufällige IP: 109.168.97.31 unter anderem offenbart:

Beschr: 013 Netvision

Netvision ist ein israelischer Internet-Provider. Wenn es sich also um eine Telefonverbindung handelt (Sie können dies mit dem Benutzer-Agent überprüfen), muss dies eine WLAN-Verbindung sein!

es in PHP

tun habe ich ein wenig Wissen über PHP, vielleicht jemand mit einem besseren Wissen besser Sektion bearbeiten. Der Code geht wahrscheinlich wie folgt aus:

$company_name = geoip_isp_by_name($_SERVER['REMOTE_ADDR']); 
$this_is_a_wifi_connection = is_this_wifi($company_name); 

Die Funktion is_this_wifi den Firmennamen in einer Datenbank nachzuschlagen sollte und entscheiden, ob es sich um ein Mobilfunk-Netzbetreiber oder ein ISP-Unternehmen.

Probleme

  • Sie müssen noch eine Liste von ISP/Carrier haben, um Ihre WHOIS-Lookups mit ihnen zu vergleichen.

  • Manche Leute benutzen VPNs/Anonymity-Netzwerke, eine IP-Adresse kann liegen.

  • Einige Unternehmen sind sowohl ISPs als auch Carrier, Sie werden nie wissen, ob es in diesem Fall eine Wifi-Verbindung ist.

+0

Vielleicht sollte ich dies als ein Projekt auf GitHub initiieren. –

+0

Definitiv! Ich habe bisher keine gebrauchsfertige API gefunden. –

+0

Wikipedia beherbergt eine (teilweise) Liste von Mobilfunknetzbetreibern. Es könnte ein guter Anfang sein: http://en.wikipedia.org/wiki/List_of_mobile_network_operators – Stephan

0

In PHP oder einer anderen serverseitigen Sprache ist das nicht möglich. Sie müssen diese Art von Informationen vom Client (Browser) erhalten und derzeit gibt es keinen Standard-HTTP-Header, der Browser verwenden kann, um Informationen zum Verbindungstyp zu übergeben (List of HTTP header fields).

Der Browser kann den Verbindungstyp kennen und Sie können diese Informationen möglicherweise mithilfe von clientseitigen Skripts (z. B. JavaScript) oder Plugins abrufen.

Verwandte Themen