牛人写的文章 caller-id-in-sip https://smartvox.co.uk/voip/caller-id-in-sip/SIP 中的主叫号码识别2025年4月16日•约翰接收呼叫的设备无论是简单的手机还是复杂的呼叫中心ACD系统都希望知道主叫方的身份。它可能只是在液晶显示屏上显示主叫号码在通讯录中查找以便显示主叫姓名或者用从数据库中检索到的关于主叫方的信息来预填充屏幕。然而网络也需要知道主叫方的身份因为这可能对计费、呼叫追踪或通知紧急服务主叫方位置至关重要。隐私法或当地通信法规通常要求允许主叫方选择屏蔽其身份使其对被叫方不可见。但是这不得干扰更重要的网络需求例如计费或紧急999/911呼叫定位。为了兼顾这两项要求电话信令协议倾向于使用两种不同的数据——一个“显示号码”实际上是用于显示的ID可以选择性地被屏蔽以及一个“网络号码”它实际上是一个被断言的身份标识用于标识进入通信网络的入口点。在电话技术中主叫号码识别通常被称为CLI即主叫线路识别Calling Line Identification。网络号码有时被称为ANI即自动号码识别Automatic Number Identification。ANI这个术语源于在VoIP发明之前传统电话系统上使用的原始ATT规范。SIP协议包含的元素可以满足所有主叫号码识别的要求——CLI、ANI和隐私。From头域From头域提供基本的主叫号码数据由一个SIP URI和一个可选的显示名称组成。它等同于显示号码或CLI。以下是一个示例From: “John Quick” sip:1001svr2.smartvox.co.uk:5061;tag2014274981遗憾的是它非常容易被修改、屏蔽或伪造。出于隐私原因它也可能通过重写其关键部分而被故意模糊化例如将显示名称和用户名替换为“Anonymous”。在下一个示例中主叫方希望隐藏其身份因此用户的设备——或SIP服务器——覆盖了From头域并匿名化了详细信息From: “Anonymous” sip:anonymousanonymous.invalid;tagas7fb2d045这些弱点通常使其不适合由网络中需要可验证主叫号码用于计费等目的的下游服务器使用。因此必须在SIP协议中添加其他机制来传递网络号码。Remote-Party-ID头域许多年前有人提议扩展SIP协议以支持Remote-Party-IdRPI或RPID头域的使用。它在一份IETF备忘录中被描述但从未获得足够的支持和推动来被广泛采用。如今它远不及P-Asserted-Identity头域常用我将不再进一步讨论它。P-Asserted-Identity头域这个头域——也简称为PAI或PAID头域——在RFC 3325中有所描述。它阐述了在使用P-Asserted-Identity头域来传递主叫方经过验证的身份以及使用单独的Privacy头域来指示这些数据是否必须隐藏的信任网络中提供经过验证的主叫号码的要求。它包含主叫方经过验证的身份信息通常由主叫设备在呼叫开始前插入。当建立新呼叫时您可能会在SIP INVITE请求中看到PAI头域。其目的是提供主叫方的可验证网络级标识符。PAI旨在由相互信任的服务提供商共享和使用。它可被运营商用于呼叫追踪、计费或路由。有时它也被用于呼叫中心或PBX电话系统中的路由决策或主叫号码显示。它还允许在拨打紧急服务电话时显示正确的主叫方号码。它可以与SIP端点关联的默认主叫号码通常是From头域一起使用并且不必与接收电话上显示的主叫号码相同。它是一个应始终包含SIP URI并且也可以包含显示名称的标识符。它不一定必须是一个有效的实时号码但应该是一个可以用于追踪主叫方的正确分配的号码。以下是一个P-Asserted-Identity头域的示例P-Asserted-Identity: “Oliver Jennings” sip:44172732112310.0.0.1Privacy: id这个SIP头域在主叫方希望通过隐藏其主叫号码来保护身份的情况下特别有用。即使主叫号码被故意覆盖PAI头域仍然提供有效信息。在这些情况下中间VoIP服务器可以从PAI头域读取主叫方的真实身份即使该信息在From头域中已被隐藏或覆盖。如上所示可能会使用一个额外的Privacy头域来指示PAI头域中的数据不得被泄露。PAI头域应仅在受信任的SIP实体之间共享。遗憾的是即使Privacy头域要求隐藏信息PAI头域也很容易泄露到信任边界之外并被传递给未知的下游运营商。在这种情况下该头域不应被传递给最终端点最终端点也不应将其显示为CLI。实际上如果Privacy头域禁止则不应将PAI头域传递给任何不受信任的下游服务器。对于VoIP服务提供商来说要知道所谓的“信任边界”位于何处可能很困难——将网络号码传递给下游服务器以允许它们识别呼叫的真正发起者是合理的但如果这些下游服务器可能滥用信息则不合理。但是由谁来做出判断以及如何判断呢PAI头域在实践中如何工作假设一个用户注册了VoIP服务提供商并连接了一部SIP电话。他们从该电话发出的呼叫可能包含PAI头域但这取决于电话本身的配置。最终用户通过填充虚假信息到PAI头域来伪造其主叫号码是相当容易的。假设VoIP服务提供商是尽职尽责的他们不会允许伪造的主叫号码通过到公共电话网络并且要么拒绝该呼叫要么更可能使用已知对该用户有效的号码覆盖该头域。如果缺少该头域他们很可能会添加它。一旦他们将呼叫请求传递给链中的下一个电信运营商遵守请求中包含的任何隐私设置就成为他们的责任。顺便提一下VoIP服务提供商通常要求所有新用户提供一个可以与其号码关联的地址。服务提供商需要这个地址以便他们可以更新紧急服务使用的数据库从而允许紧急呼叫能够被地理位置定位。如果无法满足这些条件提供商很可能会发布通知明确说明紧急呼叫可能无法正常工作。美国提供商门户网站上的示例通知那么您接到的电话呢您是否期望收到PAI头域对此没有硬性规定但普通的最终用户不应该能够收到被隐藏的号码——即使是在SIP头域中隐藏也不应该。上游运营商只应将隐藏的号码传递给受信任的方。这可能包括与他们有长期批发中继合同的大型电信服务提供商但极不可能包括最终用户注册的VoIP服务提供商。因此如果您确实收到了PAI头域它可能包含主叫方的号码也可能包含类似“sip:anonymousanonymous.invalid”的内容这取决于主叫方是否隐藏了他们的号码。如果您的VoIP设备在入站呼叫时需要PAI头域但没有收到请与您的服务提供商讨论。我希望大多数提供商都能够提供此功能。了解更多通信电话服务提供商电子邮件在FreePBX中配置主叫号码FreePBX为分机、出局路由和中继提供了用户可配置的参数用于设置主叫号码。通常这些条目的格式如下“主叫名称” #########其中主叫名称只是一些文本例如个人或部门的名称###### 代表一个电话号码。如前所述您可以配置一个与分机关联的主叫号码另一个与出局路由关联第三个与中继关联。除了正常的主叫号码外还有可能配置所谓的紧急主叫号码。FreePBX有一些内置规则来决定哪个主叫号码可能优先于另一个。例如以下是出局路由配置页面中帮助提示的文本基本上主叫号码会从分机向下传递到路由再到中继并且可能在每个阶段被覆盖具体取决于规则是否允许以及某些复选框是否被勾选。通过一些试验应该可以实现您需要的任何结果。然而这还不是全部情况。如果您在FreePBX中使用pjsip每个中继内都有设置在pjsip设置 高级选项卡下用于控制是否包含额外的RPI和/或PAI头域这些设置看起来像这样“Trust”设置涉及处理入站呼叫接收到的PAI或RPI。上面显示的第二个设置是关键设置。它允许您包含RPI头域、PAI头域或两者都包含或都不包含。还有一个选项可以覆盖隐私设置。应谨慎使用最后这个选项。法规约束、隐私和垃圾电话预防英国法规和OFCOM在英国OFCOM指南要求允许大多数主叫方选择屏蔽其身份使其对被叫方不可见。一种方法——在每次呼叫的基础上——是在拨打的号码前加拨141。OFCOM提供了以下文件解释了英国的要求主叫线路识别设施提供指南这是一份有用且结构良好的文件英国的服务提供商应阅读。其中需要注意的几点“任何进行直接营销呼叫或自动呼叫系统呼叫的人不得阻止主叫线路身份在被叫线路上的显示并且必须显示一个可以联系到他们的电话号码的身份。”“对于在英国境外网络发起的呼叫检查CLI数据有效性的责任落在英国网络第一个入口点的通信提供商身上。”以及“来自国外的呼叫不应使用英国CLI作为网络号码除非在有限的用例中”。文件接着列出了例外情况。Stir/Shaken请关注这个起源于美国的标准它可能有一天会在欧盟和/或英国被采纳。它的引入是为了阻止或大幅减少伪造号码的过度使用特别是在机器人呼叫设备上。本质上它是VoIP中的一个新标准应该有助于克服现有PAI和主叫号码标准薄弱的安全性问题。我祝它好运并期待不再收到那些荒谬而烦人的电话——它们以长时间的沉默开始接着是短暂的声音爆发然后是一个外国口音试图说服我安装可疑的软件、投资可疑的项目、购买可疑的产品或泄露个人信息和银行详情。

相关新闻

最新新闻

深入解析Java String.intern():原理、应用与性能优化指南

深入解析Java String.intern():原理、应用与性能优化指南

1. 项目概述:为什么我们需要关注String.intern()?如果你写过Java,那你一定用过String。但你可能不知道,在Java的世界里,String对象的管理,尤其是内存管理,是一门大学问。今天我们不聊基础的equa…

2026/7/29 6:33:02
Android组件化架构下,基于APT注解的路由框架设计与实现详解

Android组件化架构下,基于APT注解的路由框架设计与实现详解

1. 项目概述:组件化浪潮下的导航难题在Android开发领域,组件化架构早已不是新鲜概念。它通过将庞大的单体应用拆分成多个独立、可复用的业务模块(如用户中心、商品详情、支付模块),极大地提升了团队的并行开发效率、代…

2026/7/29 6:33:02
模型权重开放与开源:从概念到生产部署的实用指南

模型权重开放与开源:从概念到生产部署的实用指南

这类关于模型权重开放和开源未来的讨论,最值得先搞清楚的不是口号,而是它到底在解决什么问题、对普通开发者和团队有什么实际影响。很多人一看到“开源”“开放权重”就兴奋,但如果不清楚背后的技术实现、使用成本和落地边界,很容…

2026/7/29 6:33:02
gRPC实战指南:从Protocol Buffers到高性能微服务通信

gRPC实战指南:从Protocol Buffers到高性能微服务通信

1. 从REST到gRPC:为什么我们需要新的通信范式如果你在过去几年里开发过后端服务,尤其是微服务,那你对RESTful API一定不会陌生。它简单、直观,基于HTTP协议,用JSON传递数据,几乎成了服务间通信的事实标准。…

2026/7/29 6:33:02
物联网安全连接:A5000与PIC18F27K40硬件加密方案

物联网安全连接:A5000与PIC18F27K40硬件加密方案

1. 物联网安全连接的必要性与挑战在工业4.0和智能家居快速发展的今天,物联网设备与云端的安全通信已成为刚需。我曾参与过一个智能电表项目,设备需要每15分钟上报用电数据到云端。初期采用明文传输,结果在公共WiFi环境下,攻击者仅…

2026/7/29 6:33:02
C语言指针数组与数组指针深度解析:从内存模型到实战应用

C语言指针数组与数组指针深度解析:从内存模型到实战应用

1. 项目概述:指针与数组的“复合”类型在C语言的世界里,指针和数组是构建复杂数据结构的基石,也是新手通往资深路上的“拦路虎”。很多朋友在学完基础指针和数组后,一看到“指针数组”和“数组指针”这两个长得像双胞胎兄弟的名词…

2026/7/29 6:28:02

月新闻