簡體   English   中英

如何在 pox 控制器中檢查數據包類型是 tcp syn 還是 rst

[英]how to check packet type is tcp syn or rst in pox controller

這是代碼

import pox.lib.packet as pkt
from pox.lib.packet import *
def _handle_PacketIn(self,event):
  packet=event.parsed
  if packet.type == pkt.IP_TYPE:
    ip_packet = packet.payload
    if ip_packet.protocol == pkt.TCP_PROTOCOL:
      tcp_packet = ip_packet.payload
    if <condition to check packet is TCP SYN or ACK or RST>: 
  1. if 中的表達式應該是什么來檢查該 TCP 數據包是否為 SYN/ACK/RST?

為了找到 SYN 、 ACK 等,你必須使用 packet.find 方法。 以下只是對POX(鯉魚)的forwarding.l2_pairs股票組件的一個小修改

假設我們已經啟動並運行了 mininet

sudo mn --controller remote

在packet = event.parsed之后的第41行的stock組件forwarding.l2_pairs處添加幾行代碼,我們將像這樣修改

packet = event.parsed
tcp_found = packet.find('tcp')
if tcp_found:
  if tcp_found.SYN:
    print "SYN found"

在與 mininet 不同的終端中運行 pox 組件,像這樣

python pox.py forwarding.l2_pairs host_tracker openflow.discovery

現在,為了獲得一些 SYN 標志,讓我們進入 mininet 終端並設置一個默認的 python http 服務器

h1 python -m SimpleHTTPServer 80 &

並從主機 2 獲取虛擬服務器的內容

h2 wget -O - h1

在我們運行 pox l2_pairs 組件的終端,我們檢查輸出

INFO:forwarding.l2_pairs:Pair-Learning switch running.
INFO:host_tracker:host_tracker ready
INFO:core:POX 0.2.0 (carp) is up.
INFO:openflow.of_01:[00-00-00-00-00-01 1] connected
INFO:host_tracker:Learned 1 2 6e:6e:ca:c9:2b:93
INFO:host_tracker:Learned 1 2 6e:6e:ca:c9:2b:93 got IP 10.0.0.2
SYN found
INFO:host_tracker:Learned 1 1 52:3b:b2:ff:ff:b7
INFO:host_tracker:Learned 1 1 52:3b:b2:ff:ff:b7 got IP 10.0.0.1
SYN found

這里的問題是,如 POX 文檔中所述,SYN、ACK 等是 tcp 屬性

TCP (tcp) 屬性:...... FIN (bool) - 當 FIN 標志設置為真 SYN (bool) - 當 SYN 標志設置為真......

為了獲得這些屬性,我們使用 find 方法將數據包的 tcp 部分分配給一個變量,然后我們使用點 (.) ex 訪問這些屬性。

variable.attribute

我們很高興(如果找到)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM