迭代
我们可以使用for循环来遍历多个元素。如下,我们可以遍历IP地址从192.168.0.1到192。168.0.254的整个/24子网,使用for循环可以打印出整个子网。
for x in range(1,255):
print("192.168.1"+str(x))
同样,如果我们想通过已知端口列表的方式来检查漏洞,只需遍历某个list中的所有元素即可,无需遍历范围内所有数字。
portList = [21,22,25,80,110]
for port in portList:
print (port)
通过循环嵌套,我们可以打印出每个IP地址上的每个端口。
portList = [21,22,25,80,110]
for x in range(1,255):
for port in portList:
print("[+] Checking 192.168.95."+str(x)+":"+str(port))
有了迭代的能力,我们可以对上篇的脚本进行更新。
import socket
def retBanner(ip,port):
try:
socket.setdefaulttimeout(2)
s = socket.socket()
s.connect((ip,port))
banner = str(s.recv(1024))
return str(banner)
except:
return
def checkVulns(banner):
if "FTP" in banner:
print("[+]The target prot OPEN")
else:
print("[-]The target prot not open")
return
def main():
portList = [21,25]
for x in range(218,220):
ip = '192.168.0.'+str(x)
for port in portList:
banner = retBanner(ip,port) #通过循环嵌套来进行迭代
if banner:
print('[+]'+ip+':'+banner)
checkVulns(banner)
if __name__ == '__main__':
main()
脚本执行还存在许多问题,但功能基本达到,能力加强后会优化。
文件输入/输出
在已知路径的文件夹下存在一个try.txt文档。可采用以下方法打开。
f=open("try.txt","r") #以只读模式打开
lines = f.readlines() #读取整篇,按行输出
for line in lines:
print (line)
f.close
f=open("try.txt","r")
lines = f.read() #读取整篇,按行输出
for line in lines:
print (line)
f.close
f=open("try.txt","r")
lines = f.readline() #读取首行,按字输出
for line in lines:
print (line)
f.close
f=open("try.txt","r+") #可读可写追加
f.write("后海有树的院子夏代有工的玉此时此刻的云二十来岁的你")
lines = f.readlines()
for line in lines:
print(line)
f.close