1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. '''
  4. python deny_dns_allip.py your_filelog_name
  5. 动态获取dns日志的IP地址,把不满足条件的都drop掉
  6. 此脚本修改后可以动态拒绝任何日志内的IP
  7. 相当于 tail -f filename | awk -F "你的条件" ,然后 把结果输送到iptables -I INPUT -s %s -j DROP
  8. '''
  9. from sys import argv
  10. import collections
  11. import time,os,re
  12. o = open(argv[1], 'r')
  13. print(''.join(collections.deque(o, 5)).strip('\n')) # last 5 lines
  14. o.seek(0,2) # jump to last line
  15.  
  16. ip_list = []
  17. while 1:
  18. line = o.readline()
  19. if not line:
  20. time.sleep(0.1)
  21. continue
  22. ret = line.strip('\n')
  23. try:
  24. #正则的条件,根据该字段获取该字段的IP
  25. ip = str(ret.split("query: hoffmeister.be IN ANY +E")[0])
  26. ipstr = re.search('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',ip).group()
  27. #排除部分IP,排除172网段124网段211网段,根据需要自己定义
  28. exclude_ips = str(ipstr.split(".")[0])
  29. allow_ips = ['','','']
  30. #
  31. #print("ip_list:",ip_list)
  32. if ipstr not in ip_list and exclude_ips not in allow_ips:
  33. ip_list.append(ipstr)
  34. #取最新的IP,然后drop掉
  35. print("======>>i:",ip_list[-1])
  36. os.system("iptables -I INPUT -s %s -j DROP"%(ip_list[-1]))
  37. print("iptables -I INPUT -s %s -j DROP"%(ip_list[-1]))
  38. else:
  39. pass
  40. except:
  41. b=None

加强版

动态获取日志,然后调用淘宝ip查询的API 智能判断 来源IP属于什么地方,当是国外的IP时,直接干掉。

解决了部分用户 使用手机4G测试时的被意外干掉的情况。

  1. # -*- coding: utf-8 -*-
  2. import requests,os
  3.  
  4. def checkip(ip):
  5.  
  6. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  7. try:
  8. r = requests.get(URL, params=ip, timeout=2)
  9. except requests.RequestException as e:
  10. #pass
  11. print(e)
  12. else:
  13. json_data = r.json()
  14. if json_data[u'code'] == 0:
  15. #print "ipvalues",type(ip.values())
  16. ret = json_data[u'data'][u'country'].encode('utf-8') + str(ip.values())
  17. #print ret
  18. country = json_data[u'data'][u'country'].encode('utf-8')
  19. if country != '中国':
  20. ret_ip = ip.values()[0]
  21. print "---------------country and ip",country, ret_ip
  22. os.system("iptables -I INPUT -s %s -j DROP"%(ret_ip))
  23. print("iptables -I INPUT -s %s -j DROP"%(ret_ip))
  24. else:
  25. print"----china",ip.values()[0]
  26. #return json_data[u'data'][u'country'].encode('utf-8') + str(ip.values())
  27. #print '所在地区: ' + json_data[u'data'][u'area'].encode('utf-8')
  28. #print '所在省份: ' + json_data[u'data'][u'region'].encode('utf-8')
  29. #print '所在城市: ' + json_data[u'data'][u'city'].encode('utf-8')
  30. #print '所属运营商:' + json_data[u'data'][u'isp'].encode('utf-8')
  31. else:
  32. #pass
  33. print '查询失败,请稍后再试!'
  34.  
  35. #ip= {'ip':'67.177.203.45'}
  36. #checkip(ip)
  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3.  
  4. from sys import argv
  5. import collections
  6. import time,os,re
  7. import ip_check
  8.  
  9. o = open(argv[1], 'r')
  10. print(''.join(collections.deque(o, 5)).strip('\n')) # last 5 lines
  11. o.seek(0,2) # jump to last line
  12.  
  13. ip_list = []
  14. while 1:
  15. line = o.readline()
  16. if not line:
  17. time.sleep(2)
  18. continue
  19. ret = line.strip('\n')
  20. try:
  21. ip = str(ret.split("query: hoffmeister.be IN ANY +E")[0])
  22. ipstr = re.search('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',ip).group()
  23. #
  24. exclude_ips = str(ipstr.split(".")[0])
  25. allow_ips = ['','','']
  26. #
  27. #print("ip_list:",ip_list)
  28. if ipstr not in ip_list and exclude_ips not in allow_ips:
  29. ip_list.append(ipstr)
  30. print("======>>i:",ip_list[-1])
  31. #f = open('ip.txt','a+')
  32. #f.write(ip_list[-1]+'\n')
  33. #f.close()
  34. check_ips = {'ip':ip_list[-1]}
  35. ip_check.checkip(check_ips)
  36. else:
  37. pass
  38. except:
  39. b=None

bind dns日志配置 添加如下行。有点诡异 日志的路径并非 根下的var  而是运行bind的根下的var

  1. [root@localhost var]# ls
  2. log named run tmp
  3. [root@localhost var]# cd log/
  4. [root@localhost log]# ls
  5. den_txt_ip.py deny_dns_ip.py ip-check.txt query.log query_log. query_log. query_log. query_log. query_log. query_log. test.log
  6. deny_dns_allip.py ip_check.py ip.txt query_log. query_log. query_log. query_log. query_log. query_log. query_log. test.py
  7. deny_dns_allip.py.bak ip_check.pyc query_log query_log. query_log. query_log. query_log. query_log. query_log. read_ip.py
  8. [root@localhost log]# pwd
  9. /var/named/chroot/var/log
  10. [root@localhost log]# ps -ef |grep "named"
  11. root Jun22 ? :: named -d
  12. named : ? :: /usr/sbin/named -u named -t /var/named/chroot
  13. root : pts/ :: grep named
  14. root Jun22 ? :: named -d
  1. logging {
  2. /*指定服务器日志记录的内容和日志信息来源*/
  3. channel "default_syslog" {
  4. syslog daemon; /* 发送给syslog 的daemon facility */
  5. severity info; /* 只发送此优先级和更高优先级的信息 */
  6. };
  7. channel default_debug {
  8. file "data/named.run"; /* 写入工作目录下的named.run 文件。注意:如果服务器用-f 参数启动,则"named.run"会被stderr 所替换。*/
  9. severity dynamic; /* 按照服务器当前的debug 级别记录日志 */
  10. };
  11. channel xfer_in_log {
  12. file "/var/log/named/xfer_in_log" versions size 10m;
  13. severity info;
  14. print-category yes;
  15. print-severity yes;
  16. print-time yes;
  17. };
  18.  
  19. channel xfer_out_log {
  20. file "/var/log/named/xfer_out_log" versions size 10m;
  21. severity info;
  22. print-category yes;
  23. print-severity yes;
  24. print-time yes;
  25. };
  26.  
  27. channel notify_log {
  28. file "/var/log/named/notify_log" versions size 10m;
  29. severity info;
  30. print-category yes;
  31. print-severity yes;
  32. print-time yes;
  33. };
  34.  
  35. channel general_log {
  36. file "/var/log/named/general_log" versions size 100m;
  37. severity info;
  38. print-category yes;
  39. print-severity yes;
  40. print-time yes;
  41. };
  42.  
  43. channel default_log {
  44. file "/var/log/named/default_log" versions size 100m;
  45. severity info;
  46. print-category yes;
  47. print-severity yes;
  48. print-time yes;
  49. };
  50.  
  51. channel update_log {
  52. file "/var/log/named/update_log" versions size 10m;
  53. severity info;
  54. print-category yes;
  55. print-severity yes;
  56. print-time yes;
  57. };
  58.  
  59. channel query_log {
  60. file "/var/log/query_log" versions size 100m;
  61. severity info;
  62. print-category no;
  63. print-severity no;
  64. print-time yes;
  65. };
  66.  
  67. category queries { query_log; };
  68. category default { default_log; };
  69. category general { general_log; };
  70. category xfer-in { xfer_in_log; };
  71. category xfer-out { xfer_out_log; };
  72. category notify { notify_log; };
  73. category update { update_log; };
  74. };

动态获取bind dns日志IP脚本的更多相关文章

  1. 使用WIFI网卡 dhcp动态获取IP

    前面几篇博客中,wifi网卡的ip都是手工设置的,本篇博客将来移植dhcp,使得wifi网卡可以动态的获取ip.路由等信息. 那我们去哪里下载dhcp源码呢?在pc机上执行dh +tab键,看一下有哪 ...

  2. VMware虚拟机在仅主机模式下的网卡无法动态获取IP

    自己在VMware虚拟机中开启一台主机的时候,发现比以往的开机速度慢了好多,起初不以为然,直到用Xshell通过ssh远程连接eth1的ip地址才发现连接失败(这个ip是之前eth1正常的时候获取的i ...

  3. nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容

    1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...

  4. C# — 动态获取本地IP地址及可用端口

    1.在VS中动态获取本地IP地址,代码如下: 2.获取本机的可用端口以及已使用的端口:

  5. python3脚本获取本机公网ip

    python脚本获取本机公网ip   1.获取公网IP地址方式,访问:http://txt.go.sohu.com/ip/soip 2.代码实现 import requests import re r ...

  6. scrapy实战9动态设置ip代理从数据库中随机获取一个可用的ip:

    在目录下创建tools(python package) 在tools中创建crawl_xici_ip.py文件写入代码如下: #coding=utf-8 import requests from sc ...

  7. 日志系统实战(二)-AOP动态获取运行时数据

    介绍 这篇距上一篇已经拖3个月之久了,批评自己下. 通过上篇介绍了解如何利用mono反射代码,可以拿出编译好的静态数据.例如方法参数信息之类的. 但实际情况是往往需要的是运行时的数据,就是用户输入等外 ...

  8. Ngxin 开启CDN 日志获取不了真实IP的解决办法。

    nginx配置里面在http{ 后加入如下两行代码即可: set_real_ip_from 0.0.0.0/0;real_ip_header X-Forwarded-For; 重启nginx生效. 注 ...

  9. Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP

    由于电脑设置静态IP经常出现链接不上网络,动态IP又非常不方便,故有了这个想法并实现 原理: Linux,包含PC机器,树莓派等,通过shell 自动获取报告本机IP  | 通过 Mutt+Msmtp ...

随机推荐

  1. python可变对象

    - 每个对象中都保存了三个数据: id(标识) type(类型) value(值) - 列表就是一个可变对象 a = [1,2,3] - a[0] = 10 (改对象) - 这个操作是在通过变量去修改 ...

  2. Go的内存对齐和指针运算详解和实践

    uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...

  3. Spring Boot2 系列教程(十九) | @Value 和 @ConfigurationProperties 的区别

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 最近有跳槽的想法,所以故意复习了下 SpringBoot 的相关知识,复习得比较细.其中有些,我感觉是以前忽略掉的东西,比如 ...

  4. OpenGL ES for Android

    经过半年的准备OpenGL ES for Android系列文章终于要和大家见面了,在这里定一个小目标-先吸引1000个粉丝,万一实现了呢.写关于OpenGL ES的文章开始是有一些犹豫的,因为Ope ...

  5. C++数值计算

    1.序 (1)程序设计分两种: 1.结构化设计(面向过程)——分解算法为模块,将算法的步骤分解为模块. 2.面向对象程序设计——主要是“类”与“对象”. (2)进制的转换 1.二进制转十进制 整数部分 ...

  6. 初入python,与同学者的第一次见面(小激动)

    自2017来,接触python其实已经算是蛮久了,最苦的时光还是刚开始的时候,真的,我感觉编程就是一种感觉,有的时候就像找对象一样,感觉对了,怎么学都是带劲哈哈哈.在这个周围都在学习PHP的环境下,我 ...

  7. 高通量计算框架HTCondor(五)——分布计算

    目录 1. 正文 1.1. 任务描述文件 1.2. 提交任务 1.3. 返回结果 2. 相关 1. 正文 1.1. 任务描述文件 前文提到过,HTCondor是通过condor_submit命令将提交 ...

  8. MySQL-5.7.29 的安装与配置

    解压缩,我这里的解压路径是:D:\Program Files\Java MySQL-5.7.29下载地址:https://www.jianguoyun.com/p/DcKSfd8Q6LnsBxiY8c ...

  9. FluentData 学习 第一弹

    地址: http://fluentdata.codeplex.com/ 前世: FluentData 我们公司用的一个增删改查的里面的持久层.之前还不知道 这个持久层叫FluentData.  某天看 ...

  10. 填充区域 (Populating an Area) | 使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼