php(wap)获取手机号码,WAP获取访客手机号码

抓取网站访客手机号

我们先了解一下常规移动网络的连接方式

WIFI,手机wifi上网其实电信、联通、移动的移动运营平台没啥事,因为他走的路由器其实是走的传统的有线上网。所以wifi上网默认走的有线,不扣流量,也无法获得号码了

常规三网访问方式中国移动APN:CMWAP(2G) CMNET(3G)

中国电信APN:CTWAP(2G) CTNET(3G)

只有移动网络有效(电信手机、移动、联通),其他方式访问无效

手机访问网站流程,以联通为例,其他都一样

3GNET的访问方式是,网络直连,及把你的手机当做一台PC一样,给你一个独立的通道接入互联网,联通只提供线路,不做服务器中转让你直达ChinaNet然后再中转到目标网站

3GWAP的访问方式是,压缩访问,方式是手机先发出一个访问的请求,由联通的WAP服务器中转站接收到你的请求后,由WAP服务器派出指定请求去访问你的网站,然后获取到数据后,经由WAP中转服务器进行数据压缩后回传到你的手机上。

经过以上分析大家应该都清楚,通过程序抓取WAP网站访客的手机号是完全可以显现的。但并非100%能获取到。

PHP WAP获取访客手机号码

function getPhoneNumber()

{

if (isset($_SERVER['HTTP_X_NETWORK_INFO '])) {

$str1 = $_SERVER['HTTP_X_NETWORK_INFO '];

$getstr1 = preg_replace('/(.*,)(11[d])(,.*)/i ', '2 ', $str1);

Return $getstr1;

} elseif (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID '])) {

$getstr2 = $_SERVER['HTTP_X_UP_CALLING_LINE_ID '];

Return $getstr2;

} elseif (isset($_SERVER['HTTP_X_UP_SUBNO '])) {

$str3 = $_SERVER['HTTP_X_UP_SUBNO '];

$getstr3 = preg_replace('/(.*)(11[d])(.*)/i ', '2 ', $str3);

Return $getstr3;

} elseif (isset($_SERVER['DEVICEID '])) {

Return $_SERVER['DEVICEID '];

} else {

Return false;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

functiongetPhoneNumber()

{

if(isset($_SERVER['HTTP_X_NETWORK_INFO '])){

$str1=$_SERVER['HTTP_X_NETWORK_INFO '];

$getstr1=preg_replace('/(.*,)(11[d])(,.*)/i ','2 ',$str1);

Return$getstr1;

}elseif(isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID '])){

$getstr2=$_SERVER['HTTP_X_UP_CALLING_LINE_ID '];

Return$getstr2;

}elseif(isset($_SERVER['HTTP_X_UP_SUBNO '])){

$str3=$_SERVER['HTTP_X_UP_SUBNO '];

$getstr3=preg_replace('/(.*)(11[d])(.*)/i ','2 ',$str3);

Return$getstr3;

}elseif(isset($_SERVER['DEVICEID '])){

Return$_SERVER['DEVICEID '];

}else{

Returnfalse;

}

}

JAVA

// 如果通信运营商给送的话,一般在Http请求头的x-up-calling-line-id项里

String mobile = request.getHeader("x-up-calling-line-id");   // GPRS

if (mobile == null) {

mobile = request.getHeader("x-up-subno");   // CDMA

}

if (mobile == null) {

mobile = request.getHeader("x-network-info");

}

if (mobile == null) {

mobile = request.getHeader("deviceid");

}

if (mobile == null) {

// 有些wap门户站点跳转过来,手机号码由参数mobile传递过来

mobile = request.getParameter("mobile");

}

if (mobile != null) {

// 某些情况下,手机号码前面会加上中国国际区号86,需要去掉

if (mobile.length() == 13 && mobile.startsWith("86")) {

mobile = mobile.substring(2);

}

// TODO: 现在,程序可以认为用户身份(手机号码)已经确认,免登录(手机上输入账号密码不太容易)

} else {

// TODO: 无法取得手机号码的情况

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// 如果通信运营商给送的话,一般在Http请求头的x-up-calling-line-id项里

String mobile = request.getHeader("x-up-calling-line-id");   // GPRS

if (mobile == null) {

mobile = request.getHeader("x-up-subno");   // CDMA

}

if (mobile == null) {

mobile = request.getHeader("x-network-info");

}

if (mobile == null) {

mobile = request.getHeader("deviceid");

}

if (mobile == null) {

// 有些wap门户站点跳转过来,手机号码由参数mobile传递过来

mobile = request.getParameter("mobile");

}

if (mobile != null) {

// 某些情况下,手机号码前面会加上中国国际区号86,需要去掉

if (mobile.length() == 13 && mobile.startsWith("86")) {

mobile = mobile.substring(2);

}

// TODO: 现在,程序可以认为用户身份(手机号码)已经确认,免登录(手机上输入账号密码不太容易)

} else {

// TODO: 无法取得手机号码的情况

}

取手机号码常用参数

String   Mobile_GPRS   =   request.getHeader("X-up-calling-line-id");

String   Mobile_CDMA   =   request.getHeader("x-up-subno");

String   Mobile_INFO     =   request.getHeader("x-network-info");

String   Mobile_DEVI     =   request.getHeader("deviceid");

1

2

3

4

String  Mobile_GPRS  =  request.getHeader("X-up-calling-line-id");

String  Mobile_CDMA  =  request.getHeader("x-up-subno");

String  Mobile_INFO    =  request.getHeader("x-network-info");

String  Mobile_DEVI    =  request.getHeader("deviceid");

既然原理和DEMO都有好,其它语言自行扩展就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值