[英]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')
返回None,就好像沒有TCP數據包一樣。 使用Wireshark捕獲流量,我看到了該數據包(用OF數據包包裝),但是Wireshark警告說TCP報頭為零。
這確實是標題的問題,如果可以的話我該如何解決?
謝謝
問題是尚未設置數據偏移量字段。 因為,TCP數據包的最小標頭長度是5個32位字(20個字節),因此標頭中沒有設置任何選項。 因此,為了解決此問題,我必須添加:
tcp_packet.off = 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.