zoukankan      html  css  js  c++  java
  • zabbix ssh登录ip监控,登录ip归属地查询

      1 #!/usr/local/zabbix/scripts/src/bin/python
      2 # -*- coding: UTF-8 -*-
      3 from bs4 import BeautifulSoup as bsp
      4 import cookielib
      5 import requests
      6 import urllib2
      7 import re
      8 import sys
      9 import os
     10 import socket
     11 
     12 
     13 reload(sys)
     14 sys.setdefaultencoding('utf-8')
     15 #白名单,模拟sys.argv接收到的数据,sys.argv[0]为脚本名
     16 #ip_list=["","ip","ip"]
     17 ip_list=sys.argv
     18 del ip_list[0]
     19 #命令
     20 w_data=os.popen("who").read()
     21 w_data_split=w_data.split("
    ")
     22 #储存def w和def netstat的ip数据
     23 ip_data_list=[]
     24 #储存异常ip
     25 err_ip_data_list=[]
     26 #储存def w数据
     27 w_White_list_all_data_list=[]
     28 w_all_data_list=[]
     29 w_print_list=[]
     30 #储存def netstat数据
     31 netstat_list=[]
     32 netstat_list_White_t=[]
     33 #储存域名的ip
     34 domail_ip=[]
     35 
     36 #139IP归属地查询
     37 def ip_select(ip):
     38     
     39     #获取cookie
     40     #声明一个CookieJar对象实例来保存cookie
     41     cookie = cookielib.CookieJar()
     42     #利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
     43     handler=urllib2.HTTPCookieProcessor(cookie)
     44     #通过handler来构建opener
     45     opener = urllib2.build_opener(handler)
     46     #agent标识
     47     user_agent = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
     48     
     49     url="http://www.ip138.com/ips138.asp?ip="
     50     #ip="42.62.125.168"
     51     req_url="%s%s"%(url,ip)
     52     req=urllib2.Request(url=req_url,headers=user_agent)
     53     content=opener.open(req,timeout = 1)
     54     
     55     soup=bsp(content,'html.parser')
     56     data=soup.find_all("table")[2].find_all("td")
     57 
     58     return data[1].get_text(),data[2].get_text()
     59 
     60 #淘宝IP归属地查询
     61 def tb_ip(ip):
     62     url="http://ip.taobao.com/service/getIpInfo.php?ip=%s"%ip
     63     r = requests.get(url, timeout=1)
     64     data_list=[]
     65     if int(r.json()["code"]) == 0:
     66         for i in r.json()["data"].keys():
     67             if 'id' not in i:
     68                 data_list.append(r.json()["data"][i])
     69     return data_list
     70 
     71 
     72 #过滤出IP,并判断是否为白名单IP
     73 def w(w_data_split):
     74     #按行读取who命令
     75     for i in w_data_split:
     76         #储存是否为域名的开关
     77         ip_str=0
     78         #获取IP或域名,都不是则直接储存
     79         if len (i) > 0 and re.search("([a-z,A-Z,0-9]{1,}.){1,}[a-z,A-Z,0-9]{1,}",i):
     80             hostsname_str=re.search("([a-z,A-Z,0-9]{1,}.){1,}[a-z,A-Z,0-9]{1,}",i).group()
     81             #储存过滤出来的IP
     82             ip=[]
     83             #判断过滤出来的字符是否包含字母,包含则代表是域名,不包含则为IP
     84             if re.search("([a-zA-Z])",hostsname_str):
     85                 #将域名解析为IP
     86                 ip=socket.gethostbyname(hostsname_str)
     87                 #储存解析出来的IP
     88                 domail_ip.append(ip)
     89                 #更改状态为1
     90                 ip_str=1
     91             else:
     92                 #储存IP
     93                 ip=re.search("([0-9]{1,}.){1,}[0-9]{1,}",i).group()                
     94                 
     95             #将who行数据继续分割为数组
     96             i_split=i.split()
     97             #判断过滤出来的IP是否在此数组
     98             if ip not in ip_list:
     99                 #将非白名单IP记录
    100                 ip_data_list.append(ip)
    101                 #判断是否为域名
    102                 if ip_str == 1:
    103                     #为域名则在who行后面加上解析出来的IP
    104                     w_print_list.append("%s %s"%(i,ip))
    105                 else:
    106                     #不为域名就直接储存
    107                     w_print_list.append(i)
    108             else:
    109                 #删除ip,避免zabbix检查到存在白名单ip而不触发异常
    110                 del i_split[-1]
    111                 #隐藏IP
    112                 w_White_list_all_data_list.append("%s %s"%(' '.join(i_split),"(白名单ip)"))
    113                 #储存未隐藏IP的数据
    114                 if ip_str == 1:
    115                     #为域名则在who行后面加上解析出来的IP
    116                     w_all_data_list.append("%s %s"%(i,ip))
    117                 else:
    118                     #不为域名就直接储存
    119                     w_all_data_list.append(i)
    120                 
    121         else:
    122             #这里将数据储存到隐藏和非隐藏
    123             w_White_list_all_data_list.append(i)
    124             w_all_data_list.append(i)
    125 
    126                 
    127 w_off=0
    128 if w_off == 0:
    129     w(w_data_split)
    130     if len(list(set(ip_data_list))) <= 0:
    131         print("没有检查到非白名单ip")
    132         print('
    '.join(w_all_data_list))
    133         print("白名单列表
    %s"%(' '.join(ip_list)))
    134     else:
    135         print('
    '.join(w_print_list))
    136         print("%s"%'
    '.join(w_White_list_all_data_list))
    137     #IP归属地查询
    138     for ii in list(set(ip_data_list)):
    139         print(ii)
    140         print("ip138")
    141         try:
    142             ip,select=ip_select(ii)
    143             #ii为脚本过滤出的IP,ip为139返回的查询IP,select为查询到的数据
    144             print("%s
    %s"%(ip,select))
    145             print("")
    146         except:
    147             print("ip138查询失败")
    148             
    149         print("taobao")
    150         try:
    151             ip_list=tb_ip(ii)
    152             print(" ".join(ip_list))
    153         except:
    154             print("淘宝查询失败")

    用法同http://www.cnblogs.com/cainiaoit/p/6565376.html

  • 相关阅读:
    github上十二款最著名的Android播放器开源项目
    ReactiveX/RxJava文档中文版
    腾讯开源的Android UI框架——QMUI Android
    android EventBus的简单使用
    android EventBus的简单使用
    MVP实战心得—封装Retrofit2.0+RxAndroid+RxBus
    动态合并Repeater控件数据列
    动态合并GridView数据行DataRow的列
    找出1至10范围奇数
    判断某元素是否在Array中
  • 原文地址:https://www.cnblogs.com/cainiaoit/p/8578941.html
Copyright © 2011-2022 走看看