赛题:
#coding=utf-8 import os import re def pingos(ip): a=os.popen('ping ' +Flag3+' -c 1 -w 10') b=a.read() c=re.search(r"ttl=[0-9]*",b) if c: c=c.group() ttl=re.search(r"[0-9]*[0-9]",c).group() if 128<int(ttl)<=255: print "unix" elif 64< int(ttl)<=128: print "windows /2000" elif 32<int(ttl) <=64: print "linux/win7" elif 0<int(ttl)<=32: print "windows 95/98" def main(): fp = open('/root/ip.txt',Flag2) for ip in fp.readlines(): pingos(Flag1) fp.close() if __name__ == '__main__': main() #FLAG1 = ip #FLAG2 = r #FLAG3 = ip #行吧 是我想多了 赛题出的空缺 完全没有re模块的
考察了re模块的基础使用,和os模块命令回显的使用
我重写后的代码:
#!/usr/bin/python3 import os import re def checkTTL(str_ip): #获取ping的值 ping_command = "ping " + str(str_ip) + " -c 1" +"-w 10" # print("ping_command:%s" %(ping_command)) ping_res = os.popen(ping_command).read(); #read()函数 获取ping后命令的回显 # print("ping_res:"+ping_res.read()); ttl_str = re.search("ttl=[0-9]*",ping_res).group() print("ttl = %s" %(ttl_str)) ttl = re.search("[0-9]*[0-9]",ttl_str).group() print("ttl:%s" % ttl) #通过2次正则表达式 得到出ttl的值 然后比较ttl的值 ttl_value = int(ttl); #print("%d" % ttl_value); os_version ={128:'Windows NT/2000', 32:'Windows 95/98', 255:'Unix', 64:'Linux or Win7' } if ttl_value in os_version: print(os_version[ttl_value]) else: print("Other Os"); def main(): fp = open("ip.txt","r") for i in fp.readlines(): ip = i.strip(' ') checkTTL(ip); if __name__ == '__main__': main();
运行结果: