使用 POX 创建 TCP 数据包
Creating TCP packet with POX
我正在尝试使用 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')
returnsNone,好像没有TCP包。
使用 Wireshark 捕获流量,我看到了数据包(包裹在 OF 数据包中)
但 Wireshark 警告 TCP header 为零。
这确实是 header 的问题吗?如果是,我该如何解决?
谢谢
问题是没有设置数据偏移字段。
因为,TCP 数据包的最小 header 长度是 5 个 32 位字(20 字节)并且我没有在 header 中设置任何选项。
所以为了解决这个问题,我应该添加:
tcp_packet.off = 5
我正在尝试使用 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')
returnsNone,好像没有TCP包。 使用 Wireshark 捕获流量,我看到了数据包(包裹在 OF 数据包中) 但 Wireshark 警告 TCP header 为零。
这确实是 header 的问题吗?如果是,我该如何解决?
谢谢
问题是没有设置数据偏移字段。 因为,TCP 数据包的最小 header 长度是 5 个 32 位字(20 字节)并且我没有在 header 中设置任何选项。 所以为了解决这个问题,我应该添加:
tcp_packet.off = 5