4

パケットをスニッフィングするときの scapy のタイムアウト オプションに問題があります。私が理解していることから、次のようなものを使用すると:

test = sniff(filter="ip and icmp ", timeout = 2)
print(test)

スニッフィングは 2 秒後にタイムアウトするはずです。ただし、これは 100% 機能しません。私が収集したものから、最大の問題の 1 つは、タイムアウト = 5 を設定してスニファーを実行し、次に並列コマンド プロンプトで ping google.com を実行すると、スニファーが検出されるまで表示されない4 つのパケットがキャプチャされることです。完了したら、あと 1 つの icmp パケットを 1 つだけ送信または受信するまで、無期限にそこに座ってから、スニフを強制終了し、最初の ping セットから合計 5 つの icmp 4、2 番目の ping から 1で印刷 (テスト) します。

私はWindowsを使用していますが、それは私が知らない問題かもしれません。私はpython 2.7を持っています。私のスクリプト全体は、この 1 つのことをテストするために、はるかに大きなスクリプトから分離する必要がありました

from scapy.all import *



test = sniff(filter="ip and icmp ", timeout = 5)
print(test)

それだけです - タイムアウト = 1 の場合、パケットが受信されるまで停止しません。

これは、スニッフ タイムアウト用の scapy の sendrecv.py のコードです。

if timeout is not None:
    stoptime = time.time()+timeout
remain = None
while 1:
    try:
        if timeout is not None:
            remain = stoptime-time.time()
            if remain <= 0:
                break

scapy sendrecv.py から関数をリッピングし、関数に同じ問題があることに気付いた後、問題を絞り込みました。フィルターをスニフ関数に渡すと、タイムアウトの動作方法が変更されます。あなたが実行した場合:

scapy.allインポートから *

test = sniff(timeout = 5)
print(test)

5 秒で自動的にタイムアウトします。それ以外の場合はハングし、タイムアウト ループを適切に完了しません。

4

1 に答える 1

0

まったく同じコードを試しましたが、完全に機能します。scapy を再インストールするか、古いバージョンに戻してください。私にとって、2.2.0dev はより安定したビルドの 1 つです。

于 2016-06-18T09:31:28.890 に答える