gpt4 book ai didi

php - 使用 php 检测用户连接 3g、4g、wifi 或 lite

转载 作者:可可西里 更新时间:2023-11-01 13:07:20 26 4
gpt4 key购买 nike

有什么方法可以使用 PHP 脚本检测用户的连接。想要检测 3g、WIFI、4g 和 Lite。我想检测用户来自哪里。我已经有了一个 JavaScript 解决方案,但出于某些原因我想用 PHP 解决。

最佳答案

WIFI和非WIFI有时能分得清,有时分不出来。

你永远无法用 php 区分 3G/4G/LTE。

假设和术语

我假设智能手机通过浏览器连接到您的 HTTP 服务器,并且您的服务器使用 PHP 来处理请求。如果不是这种情况,请澄清您的问题。

术语:我将使用“ISP”一词来指代提供互联网服务但不是电话运营商的公司。

服务器获取什么信息?

当您的设备连接到 PHP 服务器时,它会告诉服务器一些关于它自己的信息,服务器可以知道设备的 IP 地址、用户代理等。

问题

问题是浏览器“不关心”它在什么连接上,它对浏览器发送到服务器的信息没有影响。如果浏览器在 3G/4G/LTE 上,它会发送与在 Wifi 上发送的信息完全相同的信息。

半“证明”:将数据从设备传输到 HTTP 服务器的 HTTP 协议(protocol)完全不知道底层网络堆栈。

那么我们如何识别连接呢?

Wifi/非 Wifi 之间的唯一区别是:IP 地址。

ISP 有一个很大的保留 IP 地址列表。如果您可以检测到此 IP 地址属于特定 ISP,则这一定是 Wifi 连接。

同样,电话运营商也有大量保留的 IP 地址。如果您可以检测到此 IP 地址属于特定电话运营商,则这一定是 3G/4G/LTE 连接!

在实践中做到这一点

我们需要以某种方式将每个 IP 地址与 ISP/运营商相关联,一种方法是拥有一个包含所有 ISP/运营商及其各自保留 IP 的庞大数据库。实际上,一个简单的 WHOIS 查询就可以揭示来源。

例如,对随机 IP 的 WHOIS 查询:109.168.97.31 除其他外显示:

descr: 013 Netvision

Netvision 是一家以色列互联网提供商。因此,如果这是一个电话连接(您可以使用用户代理检查),这一定是一个 Wifi 连接!

用 PHP 实现

我对 PHP 略有了解,也许知识更丰富的人会更好地编辑此部分。代码大概是这样的:

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

is_this_wifi 函数应该在数据库中查找公司名称并确定这是电话运营商还是 ISP 公司。

问题

  • 您仍然需要一份 ISP/运营商列表才能进行比较您与他们的 WHOIS 查询。

  • 有些人使用 VPN/匿名网络,IP 地址可能会说谎。

  • 有些公司既是 ISP 又是运营商,您永远不会知道在这种情况下是否是 Wifi 连接。

关于php - 使用 php 检测用户连接 3g、4g、wifi 或 lite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com