天天看點

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

轉載于:https://www.cnblogs.com/cainiaoit/p/8578941.html