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)

 

 

posted on 2018-11-09 21:26  武诚治  阅读(505)  评论(0编辑  收藏  举报

导航