【问题标题】:TypeError: can't concat tuple to bytesTypeError:无法将元组连接到字节
【发布时间】:2019-09-25 23:32:11
【问题描述】:

我让这个程序运行以“嗅探”我网络上的流量,但我遇到的第一个问题是它以一些格式化的代码(如十六进制)提供给我。所以我尝试转换代码,但它不起作用,因为它是一个元组,所以我将元组转换为字符串。我得到这个错误代码:

$ python sniffer.py
Traceback (most recent call last):
  File "sniffer.py", line 24, in <module>
    output1 = convertTuple(output)
  File "sniffer.py", line 8, in convertTuple
    output = functools.reduce(operator.add, (tup))
TypeError: can't concat tuple to bytes

这是我的完整代码:

import binascii
import struct
import socket
import functools
import operator

def convertTuple(tup):
    output = functools.reduce(operator.add, (tup))
    return output

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind(("192.168.2.16",80))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)


while True:
    output = s.recvfrom(800)
    output1 = convertTuple(output)
    bytearray.fromhex(output1).decode()
    print(output1)

【问题讨论】:

  • 顺便说一句:functools.reduce(operator.add, (tup)) 不要这样做,效率非常低。

标签: python python-3.x sockets networking


【解决方案1】:

recvfrom 返回一个 (data,address) 的元组。如果您想要十六进制的数据,请执行以下操作:

data,addr = s.recvfrom(800)
print(address,data.hex())

【讨论】:

  • 问题是它似乎是一些加密数据。我能做些什么
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 2018-05-02
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多