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("\n") 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('\n'.join(w_all_data_list)) 133 print("白名单列表\n%s"%(' '.join(ip_list))) 134 else: 135 print('\n'.join(w_print_list)) 136 print("%s"%'\n'.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\n%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