Python 3.x 打印DNS信息时Pyshark属性错误

Python 3.x 打印DNS信息时Pyshark属性错误,python-3.x,pyshark,Python 3.x,Pyshark,我在获取数据包的DNS信息时遇到pyshark问题。我正在使用Python3 我的代码如下所示: import pyshark cap = pyshark.LiveCapture(interface="en1") cap.sniff(timeout=5) def print_dns_info(pkt): if pkt.dns.qry_name: print 'DNS Request from %s: %s' % (pkt.

我在获取数据包的DNS信息时遇到pyshark问题。我正在使用Python3

我的代码如下所示:

    import pyshark
    cap = pyshark.LiveCapture(interface="en1")
    cap.sniff(timeout=5)

    def print_dns_info(pkt):
        if pkt.dns.qry_name:
            print 'DNS Request from %s: %s' % (pkt.ip.src, pkt.dns.qry_name)
        elif pkt.dns.resp_name:
            print 'DNS Response from %s: %s' % (pkt.ip.src, pkt.dns.resp_name)
    cap.apply_on_packets(print_dns_info, timeout=100)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    cap.apply_on_packets(print_dns_info, timeout=100)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 201, in apply_on_packets
    return self.eventloop.run_until_complete(coro)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/base_events.py", line 300, in run_until_complete
    return future.result()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/futures.py", line 287, in result
    raise self._exception
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 255, in _step
    result = next(coro)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 424, in wait_for
    raise Return(fut.result())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/futures.py", line 287, in result
    raise self._exception
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 251, in _step
    result = coro.throw(exc)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 215, in packets_from_tshark
    packet_count=packet_count))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 253, in _step
    result = coro.send(value)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 238, in _go_through_packets_from_fd
packet_callback(packet)
  File "<pyshell#5>", line 2, in print_dns_info
    if pkt.dns.qry_name:
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/packet/packet.py", line 110, in __getattr__
    raise AttributeError()
错误如下所示:

    import pyshark
    cap = pyshark.LiveCapture(interface="en1")
    cap.sniff(timeout=5)

    def print_dns_info(pkt):
        if pkt.dns.qry_name:
            print 'DNS Request from %s: %s' % (pkt.ip.src, pkt.dns.qry_name)
        elif pkt.dns.resp_name:
            print 'DNS Response from %s: %s' % (pkt.ip.src, pkt.dns.resp_name)
    cap.apply_on_packets(print_dns_info, timeout=100)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    cap.apply_on_packets(print_dns_info, timeout=100)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 201, in apply_on_packets
    return self.eventloop.run_until_complete(coro)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/base_events.py", line 300, in run_until_complete
    return future.result()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/futures.py", line 287, in result
    raise self._exception
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 255, in _step
    result = next(coro)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 424, in wait_for
    raise Return(fut.result())
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/futures.py", line 287, in result
    raise self._exception
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 251, in _step
    result = coro.throw(exc)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 215, in packets_from_tshark
    packet_count=packet_count))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/trollius/tasks.py", line 253, in _step
    result = coro.send(value)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py", line 238, in _go_through_packets_from_fd
packet_callback(packet)
  File "<pyshell#5>", line 2, in print_dns_info
    if pkt.dns.qry_name:
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/packet/packet.py", line 110, in __getattr__
    raise AttributeError()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
对数据包应用上限(打印dns信息,超时=100)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/pyshark/capture/capture.py”,第201行,在apply\u on\u数据包中
返回self.eventloop。运行\u直到完成(coro)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/base_events.py”,第300行,运行_直到_完成
返回future.result()
结果文件为“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/futures.py”,第287行
提出自己的意见
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/tasks.py”,第255行,步骤
结果=下一个(coro)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/tasks.py”,第424行,等待
上升返回(未来结果())
结果文件为“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/futures.py”,第287行
提出自己的意见
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/tasks.py”,第251行,步骤
结果=核心投掷(exc)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyshark/capture/capture.py”,第215行,来自_-tshark的数据包
数据包计数=数据包计数)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/trollius/tasks.py”,第253行,步骤
结果=coro.send(值)
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/pyshark/capture/capture.py”,第238行,从fd到fd
数据包回调(数据包)
文件“”,第2行,在打印\u dns\u信息中
如果pkt.dns.qry_名称:
文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/pyshark/packet/packet.py”,第110行,在__
raise AttributeError()

我甚至不打印任何关于数据包的信息,只打印错误。

您可以将其包装成try/except,忽略所有非DNS数据包

    try:
        if pkt.dns.qry_name:
            print 'DNS Request from %s: %s' % (pkt.ip.src, pkt.dns.qry_name)
    except AttributeError as e:
        #ignore packets that aren't DNS Request
        pass
    try:
        if pkt.dns.resp_name:
            print 'DNS Response from %s: %s' % (pkt.ip.src, pkt.dns.resp_name)
    except AttributeError as e:
        #ignore packets that aren't DNS Response
        pass