博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python练习题
阅读量:7104 次
发布时间:2019-06-28

本文共 2723 字,大约阅读时间需要 9 分钟。

1.监控日志的脚本:

  如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单里

  需求分析:

    1.60秒读一次文件

    2.分割,取到第一个元素,ip地址

    3.把所有的ip加入到list里,如果ip次数超过200次,加入黑名单

access.log的样式:

121.69.45.254 - - [04/Jun/2017:10:38:31 +0800] "POST /dsx/wp-admin/admin-ajax.php HTTP/1.1" 200 47 "http://www.imdsx.cn/dsx/wp-admin/post.php?post=723&action=edit" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" "-"42.236.49.31 - - [04/Jun/2017:10:40:01 +0800] "GET /questions HTTP/1.1" 200 41977 "http://bbs.besttest.cn/questions" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider" "-"

 

1 import time 2 point=0#文件指针 3 while True: 4     ips=[]#存放所有的ip地址 5     blk_set = set()#存放需要加入黑名单ip 6     with open('access.log',encoding='utf-8')as f: 7         f.seek(point) 8         for line in f: 9             ip=line.split()[0]10             ips.append(ip)11             if ips.count(ip)>10:12                 blk_set.add(ip)13         for ip in blk_set:#这里是因为防止ip重复加入黑名单,因为集合是去重的,所以里面没有重复的ip14             print('已经把%s加入黑名单'%ip)15         point=f.tell()16         time.sleep(60)

 2.对比请求报文:对比俩字典里面不一样的值

  需求分析:

    1.循环第一个字典,取到k。然后从第二个字典里面取值,然后判断两个值是否一样

1 d1={
'a':1,'b':2,'f':5} 2 d2={
's':3,'b':4} 3 def compare(d1,d2): 4 for k in d1: 5 v1=d1.get(k) 6 v2=d2.get(k) 7 if v2: 8 if v1!=v2: 9 print('value不一样的k是%s,v1是%s,v2是%s'%(k,v1,v2))10 else:11 print('key不一样是%s'%k)12 compare(d1,d2)

3.类型判断:

1 if type(d1)==dict: 2     print('字典') 3  4 def print_var_type(var): 5     if type(var)==str: 6         print('字符串') 7     elif type(var)==dict: 8         print('字典') 9     elif type(var)==int:10         print('整数')11     elif type(var)==list:12         print('列表')13     elif type(var) ==tuple:14         print('元组')15     elif type(var) ==float:16         print('小数类型')17     elif type(var) ==set:18         print('集合')

 4.

#1.写一个校验字符串是否为合法的小数 #0.88 #-0.99 #1.小数点的个数,小数点的个数1 #2.按照小数点分割
1 def check_float(s): 2     s=str(s) 3     if s.count('.')==1: 4         s_list=s.split('.') 5         left=s_list[0] 6         right=s_list[1] 7         if left.isdigit()and right.isdigit():#正小数 8             return True 9         elif left.startswith('-')and left.count('-')==1:10             if left.split('-')[-1].isdigit()and right.isdigit():11                 return True12     return False13 print(check_float(1.5))14 print(check_float(-1.5))15 print(check_float(2))16 print(check_float('s.8'))17 print(check_float('.8'))18 print(check_float(.8))19 print(check_float('.'))20 print(check_float('-.5'))21 print(check_float('-5.-5'))

 

转载于:https://www.cnblogs.com/wxcx/p/8232918.html

你可能感兴趣的文章
CSS块级元素、内联元素概念
查看>>
Ubuntu关闭进入screensaver模式
查看>>
android体系结构
查看>>
Ubuntu安装 和 python开发
查看>>
「洛谷P3931」 SAC E#1 - 一道难题 Tree
查看>>
C#压缩库SharpZipLib的应用
查看>>
C# Type
查看>>
我的博客地址和github地址
查看>>
最大公约数(gcd)还有最小公倍数(lcm)的共通之处
查看>>
2018.10.30-dtoj-4009-秀秀的森林(forest)
查看>>
[LeetCode] Strobogrammatic Number II
查看>>
《C语言》-(static和extern)
查看>>
HBase Snapshot简介
查看>>
//……关于TCP三次握手与四次挥手
查看>>
blocksit
查看>>
renderscript 浅析(一)
查看>>
弹出对话框---MessageBox
查看>>
定义的命令不可用的原因及解决办法
查看>>
libevent(十三)evhttp事件处理流程
查看>>
1004. 西西弗斯式的命运——java
查看>>