Python 使用POX创建TCP数据包

Python 使用POX创建TCP数据包,python,tcp,network-programming,openflow,pox,Python,Tcp,Network Programming,Openflow,Pox,我正在尝试使用POX控制器和 将其发送到其中一个交换机 以下是创建数据包的方式: payload = "MESSAGE" tcp_packet = tcp() tcp_packet.srcport = 10000 tcp_packet.dstport = 10001 tcp_packet.payload = payload tcp_packet.seq = 100 ipv4_pack

我正在尝试使用POX控制器和 将其发送到其中一个交换机

以下是创建数据包的方式:

        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捕获流量,我看到了数据包(包的包装) 但是Wireshark警告说TCP头是零

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


谢谢

问题在于未设置数据偏移字段。 因为,TCP数据包的最小报头长度是5 32位字(20字节),我在报头中没有设置任何选项。 因此,为了解决这个问题,我必须补充:

tcp_packet.off = 5

这包看起来没问题。你能不做一个event.parsed.find('tcp')而做一个:parsedpkt=event.parsed并撕开标题吗??在您的例子中:parsedpkt将是一个以太网数据包,此数据包的有效负载是一个ipv4数据包,而此ipv4数据包的有效负载将是TCP数据包。您所说的rip头是什么意思?我尝试了以下方法:ip=event.parsed.find('ipv4')和tcp=ip4。接下来,tcp似乎有tcp数据包,但有些损坏。“消息”前面有一些符号。