首页 文章

使用POX创建TCP数据包

提问于
浏览
2

我正在尝试使用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标头为零 .

这确实是问题, Headers ,如果它是如何解决这个问题?

谢谢

1 回答

  • 0

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

    tcp_packet.off = 5
    

相关问题