我是自动化开发人员,最近我自己动手控制桌面上的IP电话(Cisco 7940)。
我有第三方应用程序可以使用SCCP(Skinny)数据包控制IP电话。通过Wireshark,我看到应用程序将发送4个唯一的SCCP数据包,然后接收TCP ACK消息。
SCCP并不是众所周知,但它看起来像这样:
以太网(IP(TCP(SCCP())))
使用Python数据包构建器:Scapy,我已经能够将相同的4个数据包发送到IP电话,但是我从来没有得到过ACK。在我的数据包中,我已正确设置TCP标头中的序列,端口和确认值。 IP标头中的ID字段也是正确的。
我唯一能想到的错误就是发送四个数据包需要花费一秒多一点的时间。而应用程序花费的时间要少得多。我试过提高Python shell的优先级但没有运气。
有没有人知道为什么我可能没有收到回复?
答案 0 :(得分:1)
此网站可能有助于调试您的机器上没有看到预期流量的原因,并采取措施修改您的环境以产生所需的输出。
通常,Linux内核负责设置和发送和 接收网络流量。它会自动设置合适的标题 值甚至知道如何完成TCP 3路握手。 Uising 这种方式的内核服务使用的是“熟”套接字。
Scapy不使用这些内核服务。它创建了一个“原始”套接字。该 操作系统的整个TCP / IP堆栈被规避。因此,Scapy 让我们竞争对交通的控制。来往Scapy的交通 将不会被iptables过滤。此外,我们将不得不照顾 TCP 3方式握手。