2016-10-12 12 views
0

私はscapyとPython 3を実験していましたが、ARPプロトコルを使ってネットワーク上のコンピュータのMACアドレスを探したいと思います。これは私のコードです:次にscapyパケットから個々のフィールドを抽出できません

>>> packet = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=IP_OF_HOST)) 

私は次の行を使用し、このパケットからデータを抽出するために:これはエラーを生成し、何らかの理由でしかし

>>> packet[0][Ether].src 

を:

AttributeError: 'list' object has no attribute 'src' 

すべてチュートリアルフィールドデータを抽出するために私が使用した方法を使って読んだのですが、どうしてそれは私にとってはうまくいかないでしょうか?

+0

エラーメッセージから 'packet [0] [ether]'のようなものがリストになります。あなたは 'print(packet [0] [ether])'を試してその内容を見ることができます。 – martineau

答えて

0

これは、関数srp()とsrp1()の違いと関係があります(ネットワーク層2の場合、レイヤ3の場合はそれぞれsr()とsr1()を使用します)。

srp()は、パケットを送信し、応答しているかどうかにかかわらず、すべてのパケットを保存します。私はこれを行うだろうと元MACアドレスと言う取得するには:)

answered_packets, unanswered_packets = packet 
for packet_i_sent, packet_i_received in answered_packets: 
    print(packet_i_received.src) 

SRP1は、(パケットを送信し、1つの答えを待ち、そして唯一の応答パケットを保存します。これは、未回答のパケットに対処する必要はありませんし、私の以前の方法がうまくいくので、フォーマットは、異なる意味:

print(packet.src)  #The [Ether] part doesn't matter, 
         #that's just for looking fancier when you print(packet) 

だから、基本的には私のようなコマンドSRPを使用()、応答を解読しようとしました私はsrp1()を使用していました

関連する問題