ip地址查询python3小工具_V0.0.1
看到同事在一个一个IP地址的百度来确认导出表格中的ip地址所对应的现实世界的地址是否正确,决定给自己新开一个坑。做一个查询ip“地址”的python小工具,读取Excel表格,在表格中的后续列输出尽可能多的ip地址查询平台的结果以供验证比对。
第一个版本写的比较丑,仅仅能用,后续慢慢完善吧。
1 # -*- coding: utf-8 -*- 2 # @Author: EnderZhou 3 # @E-mail: zptxwd@gmail.com 4 # @Date: 2018-11-09 15:17:21 5 # @Last Modified by: EnderZhou 6 # @Last Modified time: 2018-11-09 16:56:40 7 8 import sys 9 import requests #读取web页面 10 import openpyxl #读写Excel 11 import re #正则表达式 12 import time #延时 后期将尝试使用多线程和随机延迟、代理地址池等手段提高速度、降低搜索被禁风险。 13 14 def get_ip(text): #后续使用正则表达式判断是否是ip地址 15 #默认网页内的IP地址位于端口号之前,并且中间至少隔了一个非数字的字符串 16 # (?:((?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\2}|2[0-5][0-5])) 用于匹配IP地址 17 # (6[0-5]{2}[0-3][0-5]|[1-5]\d{4}|[1-9]\d{1,3}|[0-9]) 用于匹配端口号 注意端口号匹配规则应从大到校排序 18 # 使用 ([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5]) 替换即可观察到原因。 19 # 使用\D+?匹配IP地址与端口号中间至少隔了一个非数字的字符串 20 p = r'(?:((?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-5][0-5])\.(?:\d|[1-9]\d|1\2}|2[0-5][0-5]))' 21 iplist = re.findall(p,text) 22 for each in iplist: 23 print(each) 24 25 proxies = { 26 "http":"http://127.0.0.1:8080", 27 "https":"https://127.0.0.1:8080" 28 } 29 30 headers = { 31 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0', 32 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 33 'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 34 'Accept-Encoding':'gzip, deflate', 35 'Referer':'http://101.71.29.5:10023/', 36 'Content-Type':'application/x-www-form-urlencoded', 37 } 38 39 ipsearchurl = 'http://www.ip168.com/chxip/doGetIp.do' 40 41 def get_add(ipadd): 42 payload = {} 43 payload['keyword'] = ipadd 44 payload['btnsearch'] = '%E6%9F%A5%E8%AF%A2' 45 r = requests.post(ipsearchurl,timeout=10,data=payload,proxies=proxies,verify=False,headers=headers) 46 # print(r.status_code) 47 print(r.text[7:]) 48 return r.text[7:] 49 50 wb = openpyxl.load_workbook('非内陆IP攻击统计.xlsx') 51 # 获得所有sheet的名称 52 print(wb.get_sheet_names()) 53 # 根据sheet名字获得sheet 54 a_sheet = wb.get_sheet_by_name('Sheet1') 55 # 获得sheet名 56 print(a_sheet.title) 57 # 获得当前正在显示的sheet, 也可以用wb.get_active_sheet() 58 sheet = wb.active 59 60 # 获得最大行 61 row_num = sheet.max_row 62 print(row_num) 63 64 for i in range(2,row_num) : 65 ipadd = sheet['B'+str(i)].value 66 print (ipadd) 67 # get_ip(ipadd) 这里缺少一个判断单元格内容是否为正确的IP地址格式的函数,后续会利用以前写的IPv4地址正则来实现。 68 add = get_add(ipadd) 69 sheet['E'+str(i)] = add 70 wb.save('非内陆IP攻击统计_test.xlsx') 71 time.sleep(10)