600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 获取SIM卡号(IMSI)

获取SIM卡号(IMSI)

时间:2020-09-01 16:04:05

相关推荐

获取SIM卡号(IMSI)

又到一周周未时,该写博客了,但想了一下,突然发现这周什么也没干,也不知道写什么,最后突然在桌面上发现了这段代码,获取IMSI用的,也就拿这东东来写写吧,赶快写完得玩会游戏,游戏时间又到了,Dota……

IMSI也就是SIM卡号,是用户的唯一标识,IMSI号码结构为:

MCC------------- MNC------------------ MSIN

MCC=移动国家号码,由3位数字组成,唯一地识别移动客户所属的国家。我国为460。

MNC=移动网号,由2位数字组成,用于识别移动客户所归属的移动网。邮电部门GSM PLMN网为00,“中国联通公司”GSMPLMN网为0l。

MSIN=移动客户识别码,采用等长11位数字构成。唯一地识别国内GSM移动通信网中移动客户。

获取IMSI可以用ExTAPI中的lineGetGeneralInfo,它会将各种硬件信息返回到它的第二个结构成员中,即LINEGENERALINFO结构中。

这个结构定义如下:

typedef struct linegeneralinfo_tag {

DWORDdwTotalSize;

DWORDdwNeededSize;

DWORDdwUsedSize;

DWORDdwManufacturerSize;

DWORDdwManufacturerOffset;

DWORDdwModelSize;

DWORDdwModelOffset;

DWORDdwRevisionSize;

DWORDdwRevisionOffset;

DWORDdwSerialNumberSize;

DWORDdwSerialNumberOffset;

DWORDdwSubscriberNumberSize;

DWORDdwSubscriberNumberOffset;

} LINEGENERALINFO, * LPLINEGENERALINFO;

里面的信息都很清晰了,比如说要获得IMSI,则就这个结构的首地址再加上这个dwSubscriberNumberOffset所指示的偏移。即:

LPTSTR lstr = (TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset);

要使用lineGetGeneralInfo,也要按照使用tapi的顺序对程序进行初始化,做一些必要的操作才能调用lineGetGeneralInfo。

要使用tapi,大概的顺序为:

lineInitializeEx

lineNegotiateAPIVersion

lineOpen

这几个函数调用完之后就可以为获得IMSI来做准备了。

要获得类似IMSI、IMEI等的信息,要从名称为“Cellular Line”的设备线路来获得,所以开始就要枚举所有的设备线路,然后查找名字为“Cellular Line”的线路,找到之后,用这个设备线路的句柄来作为lineGeneralInfo的第一个参数。

在使用LINEGENERALINFO以前,先把它的dwTotalSize设为它本身的大小,然后调用一次lineGeneralInfo,执行完后,在lineGeneralInfo中的dwNeededSize结构中返回了要存放所有信息所需要的空间,这时候只需根据这个成员来申请一块内存,用一个LINEGENERALINFO的指针指向它,然后再次调用lineGetGeneralInfo,这时候它里面就已经包含了各种有用的信息了,你想要什么就获取什么吧

下面贴下简单的代码:

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){LPTSTRlpszIMSI;LINEINITIALIZEEXPARAMSlineExtParams;lineExtParams.dwTotalSize=sizeof(lineExtParams);lineExtParams.dwOptions=LINEINITIALIZEEXOPTION_USEEVENT;DWORDdwAPIVersion=TAPI_CURRENT_VERSION;HLINEAPPhLineApp;DWORDdwNumDevs;lineInitializeEx(&hLineApp,NULL,NULL,_T("Mengge"),&dwNumDevs,&dwAPIVersion,&lineExtParams);DWORDdwTSPILineDeviceID=0;for(DWORDdwCurrentDevID=0;dwCurrentDevID<dwNumDevs;dwCurrentDevID++){LINEEXTENSIONIDLineExtensionID;if(lineNegotiateAPIVersion(hLineApp,dwCurrentDevID,TAPI_API_LOW_VERSION,TAPI_CURRENT_VERSION,&dwAPIVersion,&LineExtensionID)==0){LINEDEVCAPSLineDevCaps;LineDevCaps.dwTotalSize=sizeof(LineDevCaps);if(::lineGetDevCaps(hLineApp,dwCurrentDevID,dwAPIVersion,0,&LineDevCaps)==0){BYTE*pLineDevCapsBytes=newBYTE[LineDevCaps.dwNeededSize];if(0!=pLineDevCapsBytes){LINEDEVCAPS*pLineDevCaps=(LINEDEVCAPS*)pLineDevCapsBytes;pLineDevCaps->dwTotalSize=LineDevCaps.dwNeededSize;if(::lineGetDevCaps(hLineApp,dwCurrentDevID,dwAPIVersion,0,pLineDevCaps)==0){LPTSTRlstr=(TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset);if(!_tcscmp(CELLTSP_LINENAME_STRING,lstr)){dwTSPILineDeviceID=dwCurrentDevID;delete[]pLineDevCapsBytes;break;}}delete[]pLineDevCapsBytes;}}}}HLINEhLine=NULL;if(::lineOpen(hLineApp,dwTSPILineDeviceID,&hLine,dwAPIVersion,0,0,LINECALLPRIVILEGE_OWNER,LINEMEDIAMODE_DATAMODEM,0)){::lineShutdown(hLineApp);returnFALSE;}LINEGENERALINFOlviGeneralInfo;lviGeneralInfo.dwTotalSize=sizeof(lviGeneralInfo);LONGlRes=::lineGetGeneralInfo(hLine,&lviGeneralInfo);if(lRes!=0&&lRes!=LINEERR_STRUCTURETOOSMALL){DWORDdd=GetLastError();::lineClose(hLine);::lineShutdown(hLineApp);returnFALSE;}LPLINEGENERALINFOplviGeneralInfo;LPTSTRtsSubscriberNumber;LPBYTEpLineGeneralInfoBytes=NULL;pLineGeneralInfoBytes=newBYTE[lviGeneralInfo.dwNeededSize];plviGeneralInfo=(LPLINEGENERALINFO)pLineGeneralInfoBytes;if(pLineGeneralInfoBytes!=NULL){plviGeneralInfo->dwTotalSize=lviGeneralInfo.dwNeededSize;if((lRes=::lineGetGeneralInfo(hLine,plviGeneralInfo))!=0){::lineClose(hLine);::lineShutdown(hLineApp);returnFALSE;}else{TCHARszUnavailable[]=L"Unavailable";if(plviGeneralInfo->dwSubscriberNumberSize){tsSubscriberNumber=(WCHAR*)(((BYTE*)plviGeneralInfo)+plviGeneralInfo->dwSubscriberNumberOffset);//此处就获得了IMSI }else{tsSubscriberNumber=szUnavailable;}}}delete[]pLineGeneralInfoBytes;return10;}

注:我用这段程序在有些模拟器上执行不成功,调试了一下发现没有找到名字为“Cellular Line”的设备线路 ,不知道这是为什么……

在SDK里面有个ExAPI的例子,里面有获取IMSI、IMEI、制造商、软件版本等信息的。

Dotaing.....

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。