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都有好,其它語言自行擴展就行。
總結
以上是生活随笔為你收集整理的php(wap)获取手机号码,WAP获取访客手机号码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中兴数字服务器,几款中兴服务器对比介绍
- 下一篇: Android Telephony主要模