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