python - 使用 POX 创建 TCP 数据包

标签 python tcp network-programming openflow pox

我正在尝试使用 POX Controller 创建一个 TCP 数据包,并且 将其发送到其中一个交换机。

数据包是这样产生的:

        payload = "MESSAGE"
        tcp_packet = tcp()
        tcp_packet.srcport = 10000
        tcp_packet.dstport = 10001
        tcp_packet.payload = payload
        tcp_packet.seq = 100

        ipv4_packet = ipv4()
        ipv4_packet.iplen = ipv4.MIN_LEN + len(tcp_packet)
        ipv4_packet.protocol = ipv4.TCP_PROTOCOL
        ipv4_packet.dstip = IPAddr('10.0.0.5')
        ipv4_packet.srcip = IPAddr('10.0.0.1')
        ipv4_packet.set_payload(tcp_packet)

        eth_packet = ethernet()
        eth_packet.set_payload(ipv4_packet)
        eth_packet.dst = EthAddr('00:00:00:00:00:05')
        eth_packet.src = EthAddr('00:00:00:00:00:01')
        eth_packet.type = ethernet.IP_TYPE

然后,它通过交换机的一个端口发送。当我尝试在 PacketIn 处理程序中捕获数据包时:

event.parsed.find('tcp')

返回 None,就好像没有 TCP 数据包一样。 使用 Wireshark 捕获流量,我看到了数据包(包裹在 OF 数据包中) 但 Wireshark 警告 TCP header 为零。

这确实是 header 的问题吗?如果是,我该如何解决?

谢谢

最佳答案

问题是没有设置数据偏移字段。 因为,TCP 数据包的最小 header 长度是 5 个 32 位字(20 字节),而且我没有在 header 中设置任何选项。 所以为了解决这个问题,我应该添加:

tcp_packet.off = 5

关于python - 使用 POX 创建 TCP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296084/

相关文章:

java - ArrayIndexOutOfBoundsException 写入文件

c# - 通过 UDP 的广播是重复发送它的数据包,还是只发送一次?

python - 创建套接字时"[Errno 1] Operation not permitted"

python - 如何在具有多个IP的机器上控制ZeroMQ数据包的源IP地址?

Python:开始使用 tk,小部件不在网格上调整大小?

Python与shell命令交互

linux - BASH - 如何在需要时通过 TCP 端口访问日志文件?

python - 对象中的 AttributeError 没有属性 'toHtml' - pyqt5

tcp - MQTT QoS 的用途/目的是什么?

c - 数据包嗅探器的原理