2016-03-20 4 views
0

私は最近、著書、「ブラックハットパイソン」を通じて、次のしてきた定義されていない、それは大丈夫をされているが、私はget_mac機能をしようとすると、コンソールには具体的には、エラーを吐く:UbuntuのPythonの:「get_mac」機能が

NameError: name 'get_mac' is not defined". 

これは単なるLinuxベースの問題であるかどうかはわかりません。

コード:

from scapy.all import * 
import os 
import sys 
import threading 
import signal 

interface="en1" 
target_ip="10.0.0.17" 
gateway_ip="10.0.0.138" 
packet_count=1000 

# set up our interface 
conf.iface=interface 

# turn off input 
conf.verg=0 

print"[*] Setting up %s"%interface 

gateway_mac=get_mac(gateway_ip) 
+0

このような機能はありません。それは本の早い段階で定義されたのでしょうか? –

答えて

1

あなたが本から、スクリプトの一部だけを転写していた:あなたは、このstackoverflowの質問からレシピを試してみてください選択したIPからのARPアドレスが必要な場合は

。この文章では、get_macの機能については、後で説明する予定です。

We start by resolving the gateway (1) and target IP (2) address's corresponding MAC addresses using a function called get_mac that we'll plumb in shortly.

関数は、53ページの後に定義されており、

def get_mac(ip_address): 
    responses, unanswered = 
     srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst_ip_address), 
      timeout=2, retry=10) 
    for s, r in responses: 
     return r[Ether].src 
    return None 

このコードは、複数の問題を抱えているになる;:53ページ

は、右のコードの後、著者は説明します最初のreturn文が字下げされていないインデントエラーを修正する必要がありました。もちろん、returnは1回しか実行できないため、ループと最後のreturnは事実上デッドコードです。おそらく著者はあなたが目を覚ましていることを確認しようとしています。

The book is available from Google Booksだから、私が使ったのです。彼らが別のエディションや何かを持っている場合、多分あなたのものは少し異なります。

+0

また、 'conf.verb'(* verboseのように)を間違って転記していることに気付きました。 – tripleee

+0

'import *'も明らかに貧弱なスタイルです。 – tripleee

-1

私はちょうど私のUbuntu 14.04でこのコードを試してみてください。

from uuid import getnode as get_mac 
mac = get_mac() 

すべての優れたをやって。 Obtain MAC Address from Devices using Python

+0

これは私の現在のコードに挿入すると動作しません、このエラーが表示されます: "TypeError:getnode()引数なし(1与えられます)" – Boris

+0

私は別のレシピとstackoverflowで同様の質問へのリンクを追加します。これを試してみてください。 –