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