私はPython RAWソケットを使ってTCPハンドシェイクを実装しています。しかし、Linuxカーネルはこのプロトコルの特定の側面を処理しようとしているため、かなり面倒です。Python RAWソケットを使ったTCPハンドシェイク
たとえば、SYNパケットを送信すると、サーバーはSYN、ACKパケットで応答しました。カーネルはRSTパケットで自動的に応答し、接続をリセットします。今私はSYN、サーバーから送信されたACKパケットを受信し、それをプリントアウトしたい
-A OUTPUT -p tcp -m tcp --sport 999 --tcp-flags RST RST -j DROP
:私は、私は次のiptableのルールを使用して、すべてのそのようなリセットパケットをドロップし、これを克服しました。私は次の操作を実行したときにしかし、私は何も受け取らない:
a = self.s.recvfrom(4096)
私はソケットを使用してrecvをする前に、カーネルはSYN、ACKを落としていると思われます。誰も合理的な回避策を知っていますか?
Scapyを使用することを検討しますか? https://github.com/secdev/scapy/ –
scapyはSYN、ACKを復活させ解析することができますか?信じられないことに、このパケットはカーネルによって削除されたということでした。 – SivaDotRender
私はそれをすべて最初からやり直すのではなく、使用できる(または少なくとも学ぶ)可能な高レベルライブラリとして提案しました。 –