poxコントローラーを使用してワーム検出コードを書いています。コントローラーがパケットをホストに直接送信する関数を作成する方法を誰か教えてください。つまり、ホスト A がホスト B にフロー ルールとして ****TCPSYN**** パケットを送信すると仮定します。スイッチがコントローラーにパケットを送信するよりも利用できません.****コントローラー****がフロールールをインストールせずにホストBにパケットを送信する関数を書きたい.私はパケット処理コードを書いています.
def _handle_PacketIn (自己、イベント):
packet = event.parsed
log.info("Packet come in %s"%packet.type)
dpidstr = dpid_to_str(event.dpid)
# updating out mac to port mapping
self.macToPort[(event.connection,packet.src)] = event.port
dst_port = self.macToPort.get((event.connection,packet.dst))
tcpp = packet.find('tcp')
if tcpp and tcpp.SYN:
#here i want to write code where my controller will send tcp syn packet received from host A to the destination host(B) with installing any flow rules
if tcpp and tcpp.ACK:
#here i want to write code where my controller will receive tcp synack packet and send this syn ack packet to the sender(A) which has sent syn packet to host (B)
実際、私のアルゴリズムは
- 内部ホスト A が新しい外部ホスト B に TCP SYN を送信するとします。スイッチにはこのパケットに一致するフローがないため、POX コントローラに送信されます。
- POX コントローラで実行されている TRW-CB インスタンスは、フローを設定せずに、スイッチを介してこのパケットを転送するだけです。同時に、アルゴリズムは通常の処理も行います (つまり、A が以前に接続したホストのリストに B を追加し、接続要求を A のキューに追加します)。
- B からの 2 つの可能な応答は次のとおりです。SYNACK を受信すると、コントローラの TRW-CB インスタンスはスイッチに 2 つのフローをインストールします。最初のフローは、A から B に送信されたすべてのパケットに一致します。これには、IP src フィールドに A の IP アドレスが含まれ、IP dst フィールドに B の IP アドレスが含まれます。Ether タイプ (IP に設定されている) を除いて、フロー内の他のすべてのフィールドはワイルドカードです。2 番目のフローは最初のフローと似ていますが、B から A に送信されたすべてのパケットに一致します。各フローには、一致するパケットをスイッチの関連するポートから転送するアクションが含まれています。さらに、TRW-CB は通常の処理も行います (つまり、この接続要求を A のキューから削除し、A の尤度比を減らします)。