【问题标题】:How to fix TypeError: a bytes-like object is required, not 'str'如何修复 TypeError:需要一个类似字节的对象,而不是“str”
【发布时间】:2022-07-07 23:28:44
【问题描述】:

我遇到了 python 错误,但我不知道如何修复它。这是我收到的错误消息:

错误:TypeError:需要一个类似字节的对象,而不是'str'

这是我的代码:

import socket

def retBanner(ip,port):
        try:
                socket.setdefaulttimeout(2)
                s = socket.socket()
                s.connect((ip,port))
                banner = s.recv(1024)
                return banner
        except:
                return


def main():
        ip = input("[*] Enter Target IP: ")
        for port in range(1,100):
                banner = retBanner(ip,port)
                if banner:
                        print("[+]" + ip + "/" + str(port) + " : " + banner.strip('/n'))

main()

请给我这个错误的解决方案

【问题讨论】:

  • 请为您的问题添加完整的回溯。会有很大帮助的。
  • 需要完整的错误和线路
  • 但您的bannervariable 可能是字节,而不是字符串。所以在你的打印电话中使用str(banner)
  • @ex4 会导致反向错误。
  • @Sören 你是对的。应该将 str 转换为字节,而不是其他方式。写之前应该三思。

标签: python


【解决方案1】:

您的函数返回一个bytes 对象,并且您正在使用需要一个str 的strip 方法。如果您只是先转换它,那您就很成功了,只需进行一点小改动:

import socket

def retBanner(ip,port):
        try:
                socket.setdefaulttimeout(2)
                s = socket.socket()
                s.connect((ip,port))
                banner = s.recv(1024)
                return banner
        except:
                return


def main():
        ip = input("[*] Enter Target IP: ")
        for port in range(1,100):
                banner = retBanner(ip, port)
                if banner:
                    print("[+]" + ip + "/" + str(port) + " : " + str(banner).strip('/n'))

main()

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多