关于“TypeError:a byteslike object is required,not'str'”

2024-10-03 06:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

第一个帖子在这里。我几个月前就开始接触python了。我一直在读辛格雷斯的《暴力Python》。在

生成了一个txt文件,其中列出了vsFTPd的几个版本,另存为vuln_横幅.txt. 它只是一个txt文件中的一些行的列表。在

我做错什么了?如果这是一个愚蠢的问题,或者是非常简单的/愚蠢的,我道歉。感谢任何形式的帮助。在

运行代码后,我遇到了以下回溯错误:

Traceback (most recent call last):
  File "ban_grab2.py", line 33, in <module>
    main()
  File "ban_grab2.py", line 29, in main
    checkVulns(banner)
  File "ban_grab2.py", line 18, in checkVulns
    if line.strip('\n') in banner:
TypeError: a bytes-like object is required, not 'str'

以下是相关代码部分:

^{pr2}$

以下是完整的脚本,如果这有助于更好地了解情况:

import socket


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


def checkVulns(banner):
    f = open('vuln_banners.txt', 'r')
    for line in f.readlines():
        if line.strip('\n') in banner:
            print('[+] Service is vulnerable: ', + banner.strip('\n')


def main():
    portList = [21, 22, 25, 80, 110, 443]
    for r in range(1, 255):
        ip = '192.168.0.' + str(r)
        for port in portList:
            banner = retBanner(ip, port)
            if banner:
                checkVulns(banner)
                print('[+] ' + ip + ': ' + str(banner))


main()

这个脚本并不是什么了不起的东西,只是在我的虚拟网络POC中使用它。在


Tags: inpyiptxtifmainportline
1条回答
网友
1楼 · 发布于 2024-10-03 06:31:53

我相信,不知何故,您将bytes对象作为banner参数传递给函数。在

问题是banner.strip('\n')——要么你应该把字符串和字符串去掉,要么用banner.strip(b'\n')去掉字节(但稍后会遇到串联的问题)。在

混合使用字符串和原始字节通常是个坏主意,除非你知道你在做什么。我建议您跟踪函数的调用位置和方式

相关问题 更多 >