首页
在线工具
统计
友链
Search
1
暴力破解忘记的zip,rar, pdf等文件密码
2,070 阅读
2
typecho添加打赏功能
1,125 阅读
3
躲避校园网客户端的检测实现移动热点开启
1,106 阅读
4
创建自签名 ssl 证书
857 阅读
5
摸鱼人日历
849 阅读
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
登录
Search
标签搜索
HCNA
Huawei
Linux
Python
web
Blog
windows
Network
PC
Docker
HCNP
LOVE
Virus
eNSP
DNS
typecho
MySQL
k8s
HTTPS
Security
TanHaX
累计撰写
71
篇文章
累计收到
58
条评论
首页
栏目
随笔杂记
Web建设
运维茶点
编程之路
网络配置指南
Huawei
网络安全
资源下载
生活中的点滴
页面
在线工具
统计
友链
搜索到
4
篇与
的结果
2024-02-20
优化 Python 批量备份交换机配置-重构部分功能
在游水的时候看到 @winty 大佬 被 @aa7088414 大佬重构的代码后 感觉可以再优化那么一丢丢。主要修改以下几点:代码结构整理:对原始代码进行了逻辑重构和优化,将部分重复代码提取成函数进行复用,简化代码结构。错误处理:在连接设备时添加了异常处理,并记录连接失败的设备信息。文件操作:使用了os.makedirs替换了os.path.join和os.makedirs组合,同时对异常进行了处理。数据读取:使用openpyxl库的iter_rows方法直接获取单元格值,避免了通过循环逐一获取单元格值的冗余操作。日志记录:使用logging库记录了操作日志,并对错误进行详细记录。代码细节:对变量和字典键值等进行了类型转换和判空处理。import json import logging import time from datetime import datetime import os import re from netmiko import ConnectHandler, exceptions from openpyxl import load_workbook # 取消以下注释开启调试模式 # logging.basicConfig(level=logging.DEBUG) # 读取excel内设备列表信息 def check_and_get_dev_list(filename, sheet_name): excel_information = [] wb = load_workbook(filename) sh = wb[sheet_name] # 获取最大行数 rows = list(sh.iter_rows(values_only=True)) sheet_header = [cell for cell in rows[0]] data = [dict(zip(sheet_header, row)) for row in rows[1:]] # 去除ip为空的数据 data = [i for i in data if i.get('ip') is not None] return data # 获取excel数据并整合成dev字典 def get_dev(): res = check_and_get_dev_list('./resource.xlsx', 'Sheet1') devices = [] for i in res: if i['protocol'] == 'telnet': i['type'] = i['type'] + '_telnet' dev = { 'device_type': str(i['type']), 'host': str(i['ip']), 'username': str(i['username']), 'password': str(i['password']), 'secret': str(i['enpassword']) if i['enpassword'] else None, 'port': str(i['port']), 'session_log': 'session.log' } devices.append(dev) return devices def get_cmds(): with open("./dis_cmds.conf", 'r', encoding='utf-8') as f: js = json.load(f) return js def devices_confbak(devices=None): if devices is None: devices = [] current_date = datetime.now().strftime("%Y-%m-%d") path = f'./conf_bak/{current_date}' try: os.makedirs(path, exist_ok=True) except OSError as e: logging.error(f"Failed to create directory: {path}, error: {e}") failed_ips = [] for dev in devices: try: with ConnectHandler(**dev) as conn: print('\n----------成功登录到:' + dev['host'] + '----------') if dev['secret'] and dev['secret'] != "None": try: conn.enable() except Exception as e: logging.error("enable登录失败: %s", e) pwd = f"{path}/{dev['host']}" os.makedirs(pwd, exist_ok=True) dis_cmds = get_cmds() for cmd_string_dict in dis_cmds: print(f"正在获取:{cmd_string_dict['name']}") time.sleep(0.1) output = None for dev_type, command in cmd_string_dict.items(): if dev['device_type'].startswith(dev_type): output = conn.send_command(command_string=command) if output is None: print(f"error:未找到设备类型为{dev['device_type']}的{cmd_string_dict['name']}预设命令,请检查并修改dis_cmds.conf文件") continue fname = f"{dev['host']}_{cmd_string_dict['name']}.txt" file_path = f"{pwd}/{fname}" with open(file_path, mode='w', encoding='utf8') as f: try: f.write(output) print(f"备份{fname}成功!") except PermissionError: print("*****-无写入权限,请将文件夹赋予读写权限-*****") except (exceptions.NetmikoAuthenticationException, exceptions.NetmikoTimeoutException, exceptions.ReadTimeout) as e: logging.error(f"连接设备{dev['host']}失败: {e}") failed_ips.append(dev['host']) except Exception as e: logging.error(f"发生了意料外的错误:{e}") failed_ips.append(dev['host']) if failed_ips: print("\n以下设备连接失败,请检查:") for ip in failed_ips: print(ip) return 0 def devices_autocheck(devices='', cmd=''): results = [] try: for device in devices: with ConnectHandler(**device) as conn: conn.enable() print('正在巡检:' + device['host'] + ' ...') result = [device['host'], device['device_type']] for item in cmd: if 'cisco_ios' in device['device_type']: output = conn.send_command(command_string=str(item['cisco'])) elif any(x in device['device_type'] for x in ['huawei', 'hp_comware']): conn.send_command(command_string='sys', expect_string=']') output = conn.send_command(command_string=str(item['huawei'])) result.append(output) results.append(result) except (exceptions.NetmikoAuthenticationException, exceptions.NetmikoTimeoutException, exceptions.ReadTimeout) as e: logging.error(f"连接设备{device['host']}失败: {e}") return results def get_mem(memstr, devtype=''): if 'cisco' in devtype: total_match = re.search(r'Processor Pool Total:\s+(\d+)', memstr) used_match = re.search(r'Used:\s+(\d+)', memstr) if total_match and used_match: total = int(total_match.group(1)) used = int(used_match.group(1)) percentage = used / total * 100 return f"{percentage:.0f}%" elif 'huawei' in devtype: match = re.search(r"Memory Using Percentage Is:\s*(\d+)%", memstr) if match: return match.group(1) + '%' return "No match found." def get_cpu(cpustr, devtype=''): if 'cisco' in devtype: match = re.search(r"CPU utilization for five seconds: (\d+)%", cpustr) if match: return match.group(1) + '%' elif 'huawei' in devtype: match = re.search(r"\b(\d+(\.\d+)?)%.*?\bMax", cpustr) if match: return match.group(1) + '%' return "No match found." if __name__ == '__main__': while True: print("\n##############################################\n") print("1:批量备份交换机信息与配置") print("2:批量巡检交换机设备") print("0:退出") option = input("请输入需要的操作编号:") if option == '1': dev = get_dev() devices_confbak(devices=dev) continue elif option == '2': cmds = [ {'cisco': 'show clock', 'huawei': 'display clock'}, {'cisco': 'show env power', 'huawei': 'display power'}, {'cisco': 'show env fan', 'huawei': 'display fan'}, {'cisco': 'show env temperature status', 'huawei': 'display environment'}, {'cisco': 'show processes cpu', 'huawei': 'display cpu-usage'}, {'cisco': 'show processes memory', 'huawei': 'display memory-usage'}, ] dev = get_dev() checkres = devices_autocheck(dev, cmds) for res in checkres: print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++') print(res[0] + '-巡检结果:') print('\n时钟:\n' + res[2]) print('电源:\n' + res[3]) print('风扇:\n' + res[4]) if 'Unrecognized command' in res[5]: print('温度:\n该设备不支持获取此数据!') else: print('温度:\n' + res[5]) print('CPU利用率:\n' + get_cpu(res[6], res[1])) print('内存利用率:\n' + get_mem(res[7], res[1])) print('\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++') continue elif option == '0': break else: print("请输入正确的编号!") 注:python 的版本为3.9以下是配套的文件dis_cmds.conf(修改时引号必须为英文双引号):[ {"name": "查看版本", "hp_comware": "display version", "huawei": "display version", "cisco_ios": "show version"}, {"name": "查看时间", "hp_comware": "display clock", "huawei": "display clock", "cisco_ios": "show clock"}, {"name": "查看序列号", "hp_comware": "display device ma", "huawei": "display device manufacture-info", "cisco_ios": "show inventory"}, {"name": "查看风扇", "hp_comware": "display fan", "huawei": "display fan", "cisco_ios": "show environment"}, {"name": "查看电源状态", "hp_comware": "display power", "huawei": "display power", "cisco_ios": "show environment power"}, {"name": "查看CPU利用率", "hp_comware": "display cpu-usage", "huawei": "display cpu-usage", "cisco_ios": "show processes cpu"}, {"name": "查看内存利用率", "hp_comware": "display memory", "huawei": "display memory-usage", "cisco_ios": "show processes memory"}, {"name": "查看VLAN配置", "hp_comware": "display vlan", "huawei": "display vlan", "cisco_ios": "show vlan"}, {"name": "查看二层接口状态", "hp_comware": "display interface brief", "huawei": "display interface brief", "cisco_ios": "show interfaces switchport"}, {"name": "查看三层接口IP", "hp_comware": "display ip interface brief", "huawei": "display ip interface brief", "cisco_ios": "show ip interface brief"}, {"name": "查看ACL控制列表", "hp_comware": "display acl", "huawei": "display acl all", "cisco_ios": "show access-lists"}, {"name": "查看路由表", "hp_comware": "display ip routing-table", "huawei": "display ip routing-table", "cisco_ios": "show ip route"}, {"name": "查看ARP表", "hp_comware": "display arp", "huawei": "display arp", "cisco_ios": "show arp"}, {"name": "查看MAC表", "hp_comware": "display mac-address", "huawei": "display mac-address", "cisco_ios": "show mac address-table"}, {"name": "查看日志", "hp_comware": "display logbuffer", "huawei": "display logbuffer", "cisco_ios": "show logging"}, {"name": "查看所有配置", "hp_comware": "display current-configuration", "huawei": "display current-configuration", "cisco_ios": "show running-config"} ]{cloud title="交换机批量备份_源码" type="lz" url="https://tanghan.lanzoul.com/ixtqL1ou6mla" password="ao5m"/}
2024年02月20日
87 阅读
0 评论
0 点赞
2022-09-01
躲避校园网客户端的检测实现移动热点开启
加密躲避校园网认证客户端的检测,实现开启移动热点 来到一个坑人的学校,校园网费用一个学期都要430,其中30RMB还是师兄师姐当着我们的新生的面收的,懵懂的新生的我还浑然不知,校园的WiFi还是卡到没朋友!。校园网共享检测 在我使用路由器的时候,发现如果连接的设备太多的话,还是一样会被检测到共享网络。在一开始的时候,我认为校园网是通过 IP 地址和 MAC 地址分析是否在共享网络;我就又加了一个路由器再加一层 NAT 转换,隐藏掉那些信息。事实证明是我过于天真了,当连接多个设备还是会被检测出来。经过思考与实验发现,共享检测是根据 User-Agent 来判定是否存在一个网络下有多台设备什么是 User-AgentUser Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。由此可得出,只要我们的数据直接经过校园网传输,那么就可以被分析到设备的情况。那么只要我们借助一台校园网外的服务器作用代理服务器,运用 socks5 代理就可以使我们进行网络共享而不会被校园网检测到。 随后我在论坛上看见一位技术牛人对校园网研究THGs网络分析监测系统通过校园网格外部服务请求和软件的帧发生器两种方式来测试校园网格的数据流量和负载。其功能流程如图3所示改此文本。这是测试文本。 随后我根据思路采取了以下几种加密的方式来躲避系统的检测1.ttl值伪装ttl值被设置为初始值。防止学校服务器检查到多个ttl值判断为共享上网。2.IPID值伪装修改数据包IPID值全部统一,windows网络协议栈一台主机的ipid值是连续的,如果检测到ipid值跳跃,说明有网络共享行为。3.对数据进行加密对未加密协议的流量进行加密走代理,比如http协议,防止学校服务器对明文数据包分析出设备信息,如果分析到多个含有不同设备的数据包,则判断为共享上网。我曾经用路由器对所有流量走服务器代理,成功破解了校园网。前提是你得在学校外面有一台有固定ip的服务器我通过分析数据包特征发现,数据包的ttl值通过gswifi路由器会被设置为初始值,正常的路由器会对数据包的ttl值减一,其次是IPID值,全部为一个统一值。 在高级防检测功能里的服务器提供商。{cloud title="校园网" type="lz" url="https://tanghan.lanzoul.com/igpmc03ezh3i" password=""/}
2022年09月01日
1,106 阅读
3 评论
19 点赞
2021-08-27
使用堡塔面板部署Hexo
Hexo基于 nodejs编写的博客类型的网站。{message type="success" content="1、在部署之前我们需要安装一个nodejs"/}2. 安装完后,使用Hexo 提供了快速方便的一键部署功能,让您只需一条命令就能将网站部署到服务器上 npm install hexo -g3. 注意,如果部署完Node.js后如果无法使用一键部署命令的话,需要设置把registry源 设置为淘宝源5. 通常情况下在(wwwroot)目录下创建网站目录6. 设置Hexo 环境变量隐藏内容,请前往内页查看详情
2021年08月27日
236 阅读
0 评论
2 点赞
2021-05-18
Web Notepad
Notepad这是一个开源的网络记事本项目,这基于Minimalist-Web-Notepad项目,能够在每次打开的时候,提供一个独特的网址,用来临时保存文本内容,只要知道这个网址,就能在其他地方浏览到这些文本内容。请参阅 https://nihaotang.com在同一个平台上平时只需要记住后缀就可以了,如这里的hello。安装在index.php文件顶部,更改$base_url变量以指向您的站点。确保允许 Web 服务器写入_tmp目录。在Apache.htaccess您可能需要启用 mod_rewrite 并在站点配置中设置文件.请参阅如何为 Apache 设置 mod_rewrite。在 Nginx 上要启用 URL 重写,请在配置文件中添加如下内容:如果项目位于根目录中: location / { rewrite ^/([a-zA-Z0-9_-]+)$ /index.php?note=$1; }如果项目位于子目录中:location ~* ^/notes/([a-zA-Z0-9_-]+)$ { try_files $uri /notes/index.php?note=$1; }{cloud title="项目地址" type="github" url="https://github.com/Smilinghan/Web-Notepad" password=""/}
2021年05月18日
273 阅读
0 评论
3 点赞