Facebook iOS应用程序如何知道其WebView用户代理中的移动运营商



今天,我在不同的iOS应用程序(如Facebook和Twitter(上分析WebView中的User-Agents。

当您单击帖子/推文中的链接时,它会打开应用内浏览器(仍在使用 iOS 浏览器引擎(。

我通过编写一个我放在网上的小 PHP 脚本来检索用户代理:

echo "PHP HTTP_USER_AGENT: " . $_SERVER['HTTP_USER_AGENT'] . PHP_EOL;

然后,您只需使用该URL创建一个新的Facebook帖子,即http://mywebserver.com/get-my-ua.php- 并在应用程序内浏览器中打开它。

令我惊讶的是,一个特定的User-Agent看起来非常有趣:来自Facebook应用程序:

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [FBAN/FBIOS;FBAV/133.0.0.11.22;FBBV/65438308;FBDV/iPhone8,4;FBMD/iPhone;FBSN/iOS;FBSV/10.3.3;FBSS/2;FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]

开头看起来和往常一样,但附件很有趣:

  1. 包括某种私有IP:133.0.0.11.22(我已经审查了最后两部分(
  2. 它知道移动运营商名称!Telekom.de

我在iPad上运行同样的事情,实际上现在没有安装SIM卡,只能在WiFi上运行,但是为了测试,我在几个月前安装了SIM卡。移动运营商配置文件在Settings - General - About - Carrier中仍然可见 - 即使在重新启动后它仍然存在。

我在网上找不到任何关于它的信息。私有IP看起来很无聊(在iPad上也是一样的(,但Facebook到底是如何获得移动运营商名称的?我会感到惊讶的是,iOS应用程序中允许这样做,Apple似乎对泄露此类数据非常严格。当然,Safari的用户代理没有这样的附件。

我很确定Facebook不只是使用像maxmind这样的地理IP定位服务来查找IP及其ASN。因为 1( maxmind 显示该移动 IP 的Deutsche Telekom AG,2( 即使我使用根本不运行电信的 WiFi,它仍然会显示Telekom.de

您可以打开和关闭WiFi,禁用移动数据,它将始终显示相同的用户代理。我认为这是因为仍然安装了移动运营商配置文件。但是它是如何获得这些信息的呢?

以下是来自Twitter应用内浏览器的用户代理:Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14G60 Twitter for iPhone

iPhone和iPad都安装了最新的应用程序,以及最新的iOS 10.3.3。

移动运营商可在 iOS 提供的 SIM 信息中找到。这是我所拥有的:

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
@property (nonatomic, strong) CTTelephonyNetworkInfo* networkInfo;
- (void)setup
{
self.networkInfo = [[CTTelephonyNetworkInfo alloc] init];
}
- (NSString*)simCarrierName
{
return [networkInfo subscriberCellularProvider].carrierName;    
}
- (NSString*)simIsoCountryCode
{
if ([[networkInfo subscriberCellularProvider].isoCountryCode length] == 2)
{
return [[networkInfo subscriberCellularProvider].isoCountryCode uppercaseString];
}
else
{
return nil;
}
}
- (NSString*)simMobileCountryCode
{
if ([[networkInfo subscriberCellularProvider].mobileCountryCode length] == 3)
{
return [networkInfo subscriberCellularProvider].mobileCountryCode;
}
else
{
return nil;
}
}
- (NSString*)simMobileNetworkCode
{
return [networkInfo subscriberCellularProvider].mobileNetworkCode;
}

相关内容

  • 没有找到相关文章

最新更新