6

我看到很多问题询问如何获取短信发送者的电话号码,而不是接收者的电话号码。我已经使用这个站点上的工具生成了一个 PDU,并且可以在其中看到收件人的电话号码:

有用的 PDU 详细信息和 PDU 翻译工具

但是,我在 Android 提供的 SmsMessage 类中看不到任何地方可以获取收件人的电话号码。我想这样做的原因是我有一部双 SIM 卡手机,但在 Android 中看不到任何地方我可以确定用于传入 SMS 的 SIM 端口。至少,我想查看每条 SMS 消息并确定它们发送到的电话号码。

这个问题似乎与我的非常相似,但没有答案:

如何在 Android 中获取短信收件人的电话号码

我的问题有所不同,因为我已经详细介绍了有关 PDU 的站点的链接,这对于从 SmsMessage 类提供的原始 PDU 字节中提取电话号码可能很有用。

有任何想法吗?

4

1 回答 1

2

这取决于您从哪个点观看 SMS 消息。SMS PDU 位于 MAP 协议之上。

当您发送 SMS 消息时,手机将收件人号码放在一个 PDU 内的 TP-Destination 中,当您收到 SMS 消息时,任何地方都没有收件人号码。原因在于 SMS 的工作原理。当有人向您发送短信时,他身边的 GSM 网络为您请求 SRIsm 消息,这意味着他的 HLR 将尝试在他的家庭网络中或通过您的家庭 HLR 找到您。HLR 的响应是 IMSI 号码(您的 SIM 卡)和 VLR/MSC 号码,发送方网络必须向其发送 SMS。在第二个数据包中,实际上是 SMS 消息(Forward-MT),因此只是您的 IMSI 号码。由于您有双卡,您可以尝试根据此号码查找短信发往的 SIM 卡。请注意,IMSI 号码不是 PDU 的一部分,而是较低的 MAP 协议。

于 2016-11-01T11:02:52.100 回答