
扫描批量ip开放的web服务
发布日期:2021-05-07 10:48:31
浏览次数:21
分类:原创文章
本文共 2947 字,大约阅读时间需要 9 分钟。
文章目录
前言
最近闲的没事,就想着平时遇到的ip,一个一个手动测试它是否开启web服务太慢了,准备用python脚本来实现;正好学一学python中处理excel表格的模块xlrd
xlrd模块前置知识
python处理excel表格主要是用到xlrd
和xlwt
两个模块,xlrd是读excel,xlwt是写
因为最新版本的xlrd只能处理xls
,无法处理xlsx
文件,所以需要下载一个旧版本的
安装
pip install xlrd==1.2.0
打开excel并读取数据
workbook = xlrd.open_workbook(filename=r'文件路径')
此时workbook中存储了要打开excel文件的位置,路径前加r
是为了防止路径中有中文而报错
获取workbook中的一个sheet
table = data.sheets()[0] #通过索引顺序获取table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取table = data.sheet_by_name(sheet_name)#通过名称获取以上三个函数都会返回一个xlrd.sheet.Sheet()对象names = data.sheet_names() #返回book中所有工作表的名字data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
对sheet中行的操作
nrows = table.nrows #获取该sheet中的有效行数table.row(rowx) #返回由该行中所有的单元格对象组成的列表table.row_slice(rowx) #返回由该列中所有的单元格对象组成的列表table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表table.row_len(rowx) #返回该列的有效单元格长度
对sheet中列的操作
ncols = table.ncols #获取列表的有效列数table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表
对单元格的操作
table.cell(rowx,colx) #返回单元格对象table.cell_type(rowx,colx) #返回单元格中的数据类型table.cell_value(rowx,colx) #返回单元格中的数据table.cell_xf_index(rowx, colx) # 暂时还没有搞懂
实现
首先,在excel中,一共有六个sheet,想要分别获取,可以用一个for循环
for i in range(0, 5): data_sheet = workbook.sheets()[i] print(data_sheet)
然后可以看到ip都是集中在第三列的,也就是要对列进行操作,在将一列的ip提取出来后,是用列表存储的,发现列表中有空白''
存在,要将其删除;最后将六个列表中的ip合并到一个大的列表中。
col = data_sheet.col_values(colx=2, start_rowx=1, end_rowx=None)# print(col)for ips in col: while '' in col: col.remove('') ips_list.append(ips)
到此ip的提取全部结束。下面就是对ip的发起http请求,如果状态码是200,就保存该ip到文本中。
对于那些没开web服务的ip,不能让它一直加载,浪费时间,就要用到异常处理,我这里设置的延时是3秒,超过就继续检测下一个ip。
完整代码
import requestsimport xlrdif __name__ == '__main__': workbook = xlrd.open_workbook(filename=r'路径') # print(workbook) ips_list = [] ip_write_list = [] for i in range(0, 5): data_sheet = workbook.sheets()[i] print(data_sheet) col = data_sheet.col_values(colx=2, start_rowx=1, end_rowx=None) # print(col) for ips in col: while '' in col: col.remove('') ips_list.append(ips) # print(ips_list) for ip in ips_list: url = 'http://' + ip headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36' } try: r = requests.get(url=url, headers=headers, timeout=3) if r.status_code == 200: print(url) with open('./ips.txt', 'a', encoding='utf-8') as fp: fp.write(url + '\n') except: continue
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月26日 02时42分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!