第一个帖子在这里。我几个月前就开始接触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中使用它。在
我相信,不知何故,您将
bytes
对象作为banner
参数传递给函数。在问题是
banner.strip('\n')
——要么你应该把字符串和字符串去掉,要么用banner.strip(b'\n')
去掉字节(但稍后会遇到串联的问题)。在混合使用字符串和原始字节通常是个坏主意,除非你知道你在做什么。我建议您跟踪函数的调用位置和方式
相关问题 更多 >
编程相关推荐