【问题标题】:Networking with Python: No response from IP Phone使用 Python 联网:IP 电话无响应
【发布时间】:2013-06-18 21:53:20
【问题描述】:

我是一名自动化开发人员,最近我开始自己控制办公桌上的 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 的优先级,但没有成功。

有人知道为什么我可能收不到 ACK 回复吗?

【问题讨论】:

  • 如果你直接从 shell 中使用 scapy,而不是从 python 中,它可以工作吗?
  • 我猜你实际上可以使用套接字或套接字服务器发送数据包,但使用 scapy 构建数据包。
  • 这是个好建议。您是否还怀疑发送数据包的延迟?
  • 是的,很可能。试试看,让我们知道。
  • 很难通过 shell 发送数据包,因为我的 Python 脚本为每个数据包确定了必要的 ID、序列和确认值。手动输入会比较慢。

标签: cisco python tcp scapy


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多