今天我在不同的iOS应用程序(如Facebook和Twitter)上分析WebViews中的User-Agents。
当您点击帖子/推文中的链接时,它会打开应用内浏览器(仍然使用iOS浏览器引擎)。
我通过写一个我放在网上的小PHP脚本来检索用户代理:
echo "PHP HTTP_USER_AGENT: " . $_SERVER['HTTP_USER_AGENT'] . PHP_EOL;
然后您只需使用该网址创建一个新的Facebook帖子,即http://mywebserver.com/get-my-ua.php
- 并在应用内浏览器中打开它。
令我惊讶的是,一个特定的用户代理看起来非常有趣:来自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]
开头看起来像往常一样,但附件非常有趣:
133.0.0.11.22
(我审核了最后两部分)Telekom.de
我在iPad上运行同样的东西,现在实际上没有安装SIM卡并且仅在 WiFi 上运行,但是为了测试,我安装了一个SIM卡几个月前。移动运营商个人资料仍然可以在Settings - General - About - Carrier
中看到 - 即使重新启动后它仍会保留在那里。
我在网上找不到任何关于它的信息。私人IP似乎很无聊(在iPad上也是如此),但Facebook如何获得移动运营商名称?我很惊讶在iOS应用程序中允许,Apple似乎对泄露此类数据非常严格。 Safari的用户代理当然没有这样的附件。
我很确定Facebook不仅仅使用像maxmind这样的地理定位服务来查找IP及其ASN。因为1)maxmind显示该移动IP的Deutsche Telekom AG
和2)即使我使用的是根本没有运行Telekom的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。
答案 0 :(得分:1)
移动运营商可在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;
}