TypeError: невозможно преобразовать кортеж в байты - PullRequest
0 голосов
/ 26 сентября 2019

У меня запущена эта программа, чтобы «прослушивать» трафик в моей сети, но первая проблема, с которой я сталкиваюсь, это то, что она дает мне какой-то отформатированный код, такой как hex.поэтому я пытаюсь преобразовать код, но он не работает, так как это кортеж, поэтому я преобразую кортеж в строку.Я получаю этот код ошибки:

$ 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)

1 Ответ

0 голосов
/ 26 сентября 2019

recvfrom возвращает кортеж (data,address).Если вам нужны данные в шестнадцатеричном формате, просто сделайте:

data,addr = s.recvfrom(800)
print(address,data.hex())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...