2

scapy sniff 関数を使用して UDP パケットを盗聴しようとしています。パケットを Looback インターフェイスで送信します。送信コードは次のように単純です。

from socket import *

IPv4 = "127.0.0.1"
Port = 45943

ClientSock = socket(AF_INET, SOCK_DGRAM) 

while True:
    MESSAGE = raw_input()
    ClientSock.sendto(MESSAGE, (IPv4, Port))

ただし、実行すると(scapyをインポートした後、別のターミナルタブで):

a = sniff(iface="lo0", count = 5)

次の結果が得られます。

>>> a.nsummary()
0000 Raw
0001 Raw
0002 Raw
0003 Raw
0004 Raw

私はUDPパケットを取得することになっていますが、ここで欠けているものを誰か指摘できますか. ありがとう

4

2 に答える 2

4

データリンク タイプを推測できません (interface=lo0 linktype=0)

このメッセージは、「Scapy は、*BSD および OS X のループバック デバイスで使用される DLT_NULL リンク層ヘッダー タイプを認識しないため、*BSD および OS X のループバック デバイスをサポートしていません」と解釈されます。

そのため、Scapy が DLT_NULL を処理するように拡張されない限り、ループバック デバイスでキャプチャするために OS X で Scapy を使用したい場合は運が悪いです。(DLT_NULL の処理はそれほど難しくないため、おそらく処理されない唯一の理由は、ループバック デバイスで使用しているほとんどの人が Linux で使用しているためです。ループバック デバイスのリンク層ヘッダー タイプの値は DLT_EN10MB です。つまり、イーサネットなので、誰もそれを修正しようとはしません。動作するかどうかを確認し、動作する場合は、パッチを送ります。)

于 2013-01-13T00:54:44.363 に答える
0

いくつかの提案。

a.nsummary() の代わりに、次のようなものを使用して、個々のパケットに関する詳細情報を出力できます。

a[1].show()
a[1].show2()
hexdump(a[1])

最初のパケットを調べます。2) プロトコルのデコードを特定のタイプのパケット形式に強制することができます。たとえば、RAW_IP パケット キャプチャ (リンク層ヘッダー タイプ = 101) を強制的に IPv6 にすることができます。

conf.l2types.register(101, IPv6)

UDP の上に新しいレイヤーを追加する場合は、使用するポートに基づいて新しいディセクタを追加できます。

于 2013-05-13T18:33:14.250 に答える