2014-04-26 13 views
6

C'è un modo per rilevare la connessione dell'utente utilizzando lo script PHP. Vuoi rilevare 3g, WIFI, 4g e Lite. Voglio rilevare da dove provengono gli utenti. Ho già una soluzione in JavaScript ma la voglio in PHP per alcune ragioni.Rileva la connessione utente 3g, 4g, wifi o lite utilizzando php

+0

non credo che sia possibile. Perché la macchina client dovrebbe dirti? Qual è la soluzione javascript? –

+0

In JavaScript mi ​​ci trovo [navigator.connection] (https://developer.mozilla.org/en/DOM/window.navigator.connection) Come possiamo trovare i clienti IP utilizzando PHP è per questo che stavo pensando che è qualsiasi soluzione per ottenere il suo tipo di connessione. –

+0

e questo è solo in Firefox. –

risposta

0

Una soluzione in qualche modo possibile utilizza la funzione php geoip_isp_by_name per ottenere il nome dell'ISP e quindi tramite alcune API o scraping verificare quali tecnologie questo ISP sta offrendo.

18

A volte si può notare la differenza tra WIFI e non WIFI e talvolta non si può notare alcuna differenza.

Non si può mai capire la differenza tra 3G/4G/LTE con php.

Ipotesi e la terminologia

Io parto dal presupposto che uno smartphone si connette al server HTTP tramite un browser e il server utilizza PHP per gestire la richiesta. Se questo non è il caso, ti preghiamo di chiarire la tua domanda.

Terminologia: userò la parola "ISP" per indicare le società che forniscono servizi Internet ma non i gestori di telefonia.

Quali informazioni riceve il server?

Quando il dispositivo si connette a un server PHP, esso indica al server alcune informazioni su se stesso, il server può conoscere l'indirizzo IP del dispositivo, user agent, ecc

Il problema

Il il problema è che il browser "Non importa" su quale connessione è attiva e non ha alcun effetto sulle informazioni che il browser invia al server. Se il browser è su 3G/4G/LTE, invierebbe esattamente le stesse informazioni che avrebbe inviato se fosse sul Wifi.

Semi "Prova": il protocollo HTTP che trasferisce i dati dal dispositivo al server HTTP è completamente all'oscuro dello stack di rete sottostante.

Come identificare la connessione, quindi?

L'unica differenza tra un Wifi/Non-Wifi è: L'indirizzo IP.

Gli ISP hanno una grande lista di indirizzi IP riservati. Se è possibile rilevare che questo indirizzo IP appartiene a un determinato ISP, questa deve essere una connessione Wi-Fi.

Analogamente, le compagnie telefoniche dispongono di una grande lista di indirizzi IP riservati. Se è possibile rilevare che questo indirizzo IP appartiene a un particolare gestore telefonico, questa deve essere una connessione 3G/4G/LTE!

Farlo in pratica

Abbiamo bisogno di correlare in qualche modo ogni indirizzo IP per un ISP/Carrier, un modo per farlo è quello di avere un enorme database di tutti gli ISP/Carriers ed il loro rispettivo riservata IP. In pratica, una semplice ricerca WHOIS può rivelare la fonte.

Ad esempio, una ricerca WHOIS per un IP casuale: 109.168.97.31 ha rivelato tra l'altro:

descr: 013 Netvision

Netvision è un provider Internet israeliano. Pertanto, se si tratta di una connessione telefonica (è possibile controllare che utilizzando l'user-agent), questa deve essere una connessione Wifi!

Farlo in PHP

Ho un po 'di conoscenza di PHP, forse qualcuno con una migliore conoscenza sarà meglio modificare questa sezione. Il codice va probabilmente come questo:

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

La funzione is_this_wifi dovrebbe ricerca il nome della società in una banca dati e decidere se si tratta di un gestore di telefonia o di una società di provider di servizi Internet.

Problemi

  • È ancora bisogno di avere un elenco di dell'ISP/I vettori al fine di confrontare tue ricerche WHOIS con loro.

  • Alcune persone usano le reti/Anonimato di VPN, un indirizzo IP può mentire.

  • Alcune aziende sono sia ISP che corrieri, non si saprà mai indipendentemente dal fatto che si tratti o meno di una connessione Wifi in tal caso.

+0

Forse dovrei iniziarlo come progetto su github. –

+0

Definitivamente! Finora non ho trovato API pronte per l'uso. –

+0

Wikipedia ospita un elenco (parziale) di operatività della rete mobile. Potrebbe essere un buon punto di partenza: http://en.wikipedia.org/wiki/List_of_mobile_network_operators – Stephan

0

Non è possibile in PHP o in qualsiasi altra lingua lato server. Devi ottenere questo tipo di informazioni da client (browser) e attualmente non c'è un'intestazione HTTP standard che i browser possono utilizzare per trasmettere informazioni tipo di connessione (List of HTTP header fields).

Browser potrebbe sapere il tipo di connessione e si potrebbe essere in grado di ottenere tali informazioni utilizzando script lato client (cioè JavaScript) o plugin.

Problemi correlati