我正在尝试评估一个名为ohrwurm的工具,它声称能够破坏两个 SIP 端点之间的 RTP 流量。通过阅读它的源代码,我不相信它有效,并且在我尝试之前想听听其他人的意见。
它的前提很简单:
- 假设端点 A 的 IP 地址为 192.168.0.11,端点 B 的 IP 地址为 192.168.0.22。
- 在与 A 和 B 位于同一子网的第三个框 C 上,在两个 SSH 会话中执行以下命令:
- arpspoof 192.168.0.11
- arpspoof 192.168.0.22
- 执行 ohrwurm。
查看ohrwurm 的源代码,它执行以下操作:
- 将 /proc/sys/net/ipv4/ip_forward 设置为 1。
- 在混杂模式下使用 libpcap 来拦截上面两个框之间的所有 IP 数据包。
- 对于那些是 SIP 的数据包,获取 RTP 端口号。
- 对于之前抓取的两个 RTP 端口之间的 UDP 数据包,模糊 RTP 内容。
这是我不明白的。我接受 arpspoofing 将导致 A 和 B 之间的所有 IP 流量通过 C 传输。此外,通过将 /proc/sys/net/ipv4/ip_forward 设置为 1,我们让内核正确转发此 IP 流量我们。
但我认为 libpcap 是只读的?如何就地修改我们在混杂模式下嗅探到的数据包?您会在ohrwurm.c 第 401 行注意到我们甚至试图丢弃 RTCP 数据包!这可能吗?
我对 libpcap 一无所知,很想知道更多!请教育我。谢谢。