0

我是一名自动化开发人员,最近我开始自己控制办公桌上的 IP 电话(Cisco 7940)。

我有一个第三方应用程序可以使用 SCCP(Skinny)数据包控制 IP 电话。通过 Wireshark,我看到应用程序将发送 4 个唯一的 SCCP 数据包,然后收到一个 TCP ACK 消息。

SCCP 不是很为人所知,但它看起来像这样:

以太网(IP(TCP(SCCP())))

使用 Python 数据包生成器:Scapy,我已经能够将相同的 4 个数据包发送到 IP 电话,但是我从未收到 ACK。在我的数据包中,我已正确设置 TCP 标头中的序列、端口和确认值。IP 标头中的 ID 字段也是正确的。

我唯一能想象到的错误是 Python 发送四个数据包需要一整秒多一点的时间。而应用程序花费的时间要少得多。我试过提高 Python shell 的优先级,但没有运气。

有谁知道为什么我可能没有收到回复?

4

1 回答 1

1

该网站可能有助于调试在您的计算机上看不到预期流量的原因,并采取措施修改您的环境以产生所需的输出。

通常,Linux 内核负责设置和发送和接收网络流量。它会自动设置适当的标头值,甚至知道如何完成 TCP 3 次握手。以这种方式使用内核服务就是使用“熟”套接字。

Scapy 不使用这些内核服务。它创建一个“原始”套接字。绕过了操作系统的整个 TCP/IP 堆栈。正因为如此,Scapy 给了我们对流量的竞争控制。进出 Scapy 的流量不会被 iptables 过滤。此外,我们必须自己处理 TCP 3 方式握手。

http://www.packetlevel.ch/html/scapy/scapy3way.html

于 2013-06-18T13:53:20.043 回答