python3根据沙雕TTL值判断操作系统 [赛题就是这样写的 我也没办法 不然谁会用TTL判断系统阿..]

赛题:
 

#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

考察了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('\n')
        checkTTL(ip);





if __name__ == '__main__':
    main();


运行结果:

python3根据沙雕TTL值判断操作系统 [赛题就是这样写的 我也没办法 不然谁会用TTL判断系统阿..]_第1张图片
关键点是RE模块的使用,至于通过TTL值判断操作系统这种玩具...真的懒得去写

你可能感兴趣的:(Python)