我有一个用 Python 3 编写的应用程序,它通过其公共 IP 与外部 SIP 代理服务器通信。基本上,我编写的应用程序通过 UDP 套接字向 SIP 代理发送 SIP 邀请。不幸的是,当我运行我的应用程序时,没有数据通过防火墙发送。防火墙配置允许所有入站和出站连接。我非常确定 Python 应用程序正常工作,因为当脚本与本地运行的 SIP 代理通信时,一切都按预期工作。只有当脚本必须通过防火墙时,才会发生奇怪的事情。我使用一个名为 SIPp 的工具来模拟我的脚本的功能(发送 SIP 邀请),令我惊讶的是,通过该工具发送的邀请成功到达外部 SIP 代理。我对我的脚本和 SIPp 工具生成的数据包进行了数据包捕获比较,每个标头和字段值都完全相同。所以我开始相信 FW 不允许通过我的脚本发送数据包是因为编码不同。我尝试搜索该工具使用的编码,但无法从文档中找到它。我目前在脚本中使用“utf-8”作为我的编码。这种奇怪行为的原因是什么?关于由于编码不同而导致的防火墙问题的推断正确吗?请指教。
更新:我已将问题定位。问题出在我将数据发送到端口 5060 时。当我将数据发送到任何其他端口时,SIP 代理都可以获取它。我检查了我的 PC,没有其他应用程序正在使用端口 5060。SIPp 工具也使用了端口 5060。
我 100% 确信是 sip-alg 阻止了我脚本的数据包。我不确定 SIP ALG 如何检测并阻止我脚本的数据包。是因为特定的编码吗?