&引用;只能将str(而不是“字节”)连接到str;尝试在python3中打印IP地址时出错

&引用;只能将str(而不是“字节”)连接到str;尝试在python3中打印IP地址时出错,python,python-3.x,scapy,packet,sniffer,Python,Python 3.x,Scapy,Packet,Sniffer,我现在正在使用python制作一个包嗅探器程序。Im使用scapy模块嗅探数据包。当我尝试使用过滤器“端口53”嗅探DNS数据包时,我收到了这个错误 Traceback (most recent call last): File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 165, in <module> sniff(iface=net_iface

我现在正在使用python制作一个包嗅探器程序。Im使用scapy模块嗅探数据包。当我尝试使用过滤器“端口53”嗅探DNS数据包时,我收到了这个错误

Traceback (most recent call last):
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 165, in <module>
    sniff(iface=net_iface, filter=proto_sniff, count=int(pkt_to_sniff), timeout=int(time_to_sniff), prn=packet_log)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 1020, in sniff
    sniffer._run(*args, **kwargs)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 973, in _run
    session.on_packet_received(p)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sessions.py", line 82, in on_packet_received
    result = self.prn(pkt)
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 138, in packet_log
    print(str(ip_src)+" -> "+str(ip_dst)+ " : ( " + packet.getlayer(DNS).qd.qname+ " )")
TypeError: can only concatenate str (not "bytes") to str
这就是当用户给出过滤器参数端口53时,我处理过滤器的地方

def packet_log(packet):

....

    elif proto_sniff == "port 53":

        if IP in packet:
            ip_src = packet[IP].src
            ip_dst = packet[IP].dst
            if packet.haslayer(DNS) and packet.getlayer(DNS).qr == 0:
                print(str(ip_src) + " -> " + str(ip_dst) + " : ( " + packet.getlayer(DNS).qd.qname + " )")
“ip_src”和“ip_dst”是否以字节为单位?如何使它在print()方法中可写

我尝试了这个解决方案,但它仍然给我这个错误

Traceback (most recent call last):
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 166, in <module>
    sniff(iface=net_iface, filter=proto_sniff, count=int(pkt_to_sniff), timeout=int(time_to_sniff), prn=packet_log)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 1020, in sniff
    sniffer._run(*args, **kwargs)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 973, in _run
    session.on_packet_received(p)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sessions.py", line 82, in on_packet_received
    result = self.prn(pkt)
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 133, in packet_log
    ip_src = ip_src_byte.decode()
AttributeError: 'str' object has no attribute 'decode'

可能重复的注意事项还有,
elif proto_sniff in[“arp”,“bootp”,…]:
更像idomatic。我尝试过,但没有成功。这就是我所做的``?推出欢迎垫-欢迎使用堆栈溢出!请阅读,拿着,读关于,以及这个。还请学习如何创建一个。
Traceback (most recent call last):
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 166, in <module>
    sniff(iface=net_iface, filter=proto_sniff, count=int(pkt_to_sniff), timeout=int(time_to_sniff), prn=packet_log)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 1020, in sniff
    sniffer._run(*args, **kwargs)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sendrecv.py", line 973, in _run
    session.on_packet_received(p)
  File "C:\Users\adika\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scapy-2.4.3.dev61-py3.7.egg\scapy\sessions.py", line 82, in on_packet_received
    result = self.prn(pkt)
  File "D:/Semester 7/Packet Sniffer TA/coba_scapy/packet_sniffing_python/sniffer.py", line 133, in packet_log
    ip_src = ip_src_byte.decode()
AttributeError: 'str' object has no attribute 'decode'
        if IP in packet:
            ip_src_byte = packet[IP].src
            ip_dst_byte = packet[IP].dst
            ip_src = ip_src_byte.decode()
            ip_dst = ip_dst_byte.decode()
            if packet.haslayer(DNS) and packet.getlayer(DNS).qr == 0:
                print(str(ip_src) + " -> " + str(ip_dst) + " : ( " + packet.getlayer(DNS).qd.qname + " )")