python - TypeError:无法将元组连接到字节
问题描述
我让这个程序运行以“嗅探”我网络上的流量,但我遇到的第一个问题是它以一些格式化的代码(如十六进制)提供给我。所以我尝试转换代码,但它不起作用,因为它是一个元组,所以我将元组转换为字符串。我得到这个错误代码:
$ 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)
解决方案
recvfrom
返回 的元组(data,address)
。如果您想要十六进制的数据,只需执行以下操作:
data,addr = s.recvfrom(800)
print(address,data.hex())
推荐阅读
- android - 我的 OnSucsess 和 OnFailure 侦听器不工作
- sql - SQL Server - 值通过 ISDATE() 但未能 CAST 为 DATE 或 DATETIME
- java - 如何避免 if else 语句并将它们重写为更小更清晰的代码?
- python - image_url = sys.argv[1] IndexError: 列表索引超出范围
- python - 为什么 python glob.glob 与我传入的通配符不匹配任何文件?
- powershell - 一组数据需要重新排列并导出为 CSV
- javascript - 如何通过 D3 重复和延迟对 API 的调用
- random - 在 Lua 中设置随机种子
- excel - 在 Excel 中使用索引和匹配;为什么命名范围不起作用?
- exception - DAG 从 Web 界面执行 OK,但在通过命令行运行时“失败”