2016-03-29 1 views
-3

Я пытаюсь создать программу, которая обнюхивает пакеты DNS, а затем кладет qname пакетов в «ключ» словаря и dst ip пакет в «значение» словаря и по какой-то причине я получаю эту ошибку в строке 6«Ошибка отступа: unindent не соответствует внешнему уровню отступа»

from scapy.all import * 
 

 
def query_ip_name(dns_packet): 
 
\t dns_dict = {} 
 

 
6- strname = dns_packet[DNSQR].qname 
 
    ip_add = dns_packet[IP].dst 
 

 
    dns_dic.update(dns_name : dns_ip_name) 
 

 

 

 
def filter_dns(packet): 
 
     return (DNS in packet and packet[DNS].opcode == 0 and packet[DNSQR].qtype == 1) 
 

 
def main(): 
 
     print 'Starting to sniff!' 
 
     packets = sniff(count=30, lfilter=filter_dns, prn = query_ip_name) 
 

 
     print 'The sniffing was successfully ended.' 
 

 
     print 'The dictionary is : ' 
 

 

 

 
    \t \t \t 
 

 
main()

+2

Отступ строки 6 не соответствует строкам над ним внутри функции или вычитанию кода вне функции. – snakecharmerb

+0

@snakecharmerb Я не могу найти никаких других проблем. если я удалю «strname =», так что он хорошо работает – Shmuel

ответ

1

определение dns_dict с отступом дальше, чем strname Вы должны иметь их в то же как показано ниже. Я вижу, что у вас есть номер строки, включенный в эту строку в фрагменте кода. Убедитесь, что это не в вашем коде.

def query_ip_name(dns_packet): 

    dns_dict = {} 

    strname = dns_packet[DNSQR].qname 
+0

Большое спасибо, . В чем проблема с этой строкой сейчас: '\t dns_dict.update (strname: ip_add)'? – Shmuel

+0

@Shmuel Что это за ошибка? Какой редактор вы используете? – sabbahillel

0

Не смешивайте вкладки и пробелы. Строка dns_dict = {} имеет отступ с вкладкой, в то время как остальная часть файла предназначена для пробелов. Замените вкладку на 4 пробела.

+0

Большое спасибо, В чем проблема с этой строкой сейчас: '\t dns_dict.update (strname: ip_add)'? – Shmuel

+0

@Shmuel вы вызываете функцию с ':': разделительными аргументами вместо ','? Это может быть опечатка. – sabbahillel