【问题标题】:Creating TCP packet with POX使用 POX 创建 TCP 数据包
【发布时间】:2015-07-08 14:45:12
【问题描述】:

我正在尝试使用 POX 控制器创建一个 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 标头为零。

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

谢谢

【问题讨论】:

  • 数据包看起来不错。你能不做一个 event.parsed.find('tcp') ,而是做一个 : parsedpkt = event.parsed 并撕掉标题?在您的情况下:parsedpkt 将是一个以太网数据包,此数据包的有效负载是一个 ipv4 数据包,此 ipv4 数据包的有效负载将是 TCP 数据包。
  • 撕掉标题是什么意思?我尝试了以下方法: ip = event.parsed.find('ipv4') 和 tcp = ip4.next 这样 tcp 似乎有 TCP 数据包,但有些损坏。 “MESSAGE”前面有一些符号。

标签: python tcp network-programming openflow pox


【解决方案1】:

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

tcp_packet.off = 5

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2015-06-21
    • 2019-02-07
    • 1970-01-01
    • 2022-08-22
    • 2010-09-09
    • 2015-01-10
    相关资源
    最近更新 更多