首页
在线工具
统计
友链
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 点赞
2024-02-19
解决 Debian 中的域名解析问题 - Temporary failure in name resolution
在新部署的镜像中更新软件源时遇到域名解析问题。1. 检查域名解析故障当遇到域名解析问题时,首先要确保网络连接正常工作。可以通过打开其他网页或使用其他网络工具来确认网络连接是否正常。2. 查看系统的 DNS 配置检查以下两个文件来查看系统的 DNS 配置:/etc/apt/sources.list 文件:检查 dns-nameservers 配置项,确保设置为可靠的、能够解析域名的 DNS 服务器地址。/etc/resolv.conf 文件:检查 nameserver 配置项,同样确保设置为可靠的 DNS 服务器地址。可以使用公共 DNS 服务器,如 Google DNS(8.8.8.8)或国内的公共 DNS(114.114.114.114)。3. 重启网络服务如果修改了 DNS 配置或者发现配置正确无误,但仍然无法解析域名,可以尝试重启网络服务。使用以下命令重启网络服务:systemctl restart networking通过执行以上步骤,您应该能够解决域名解析问题。如果问题仍然存在,可能需要进一步检查网络设置或尝试其他解决方法。
2024年02月19日
394 阅读
0 评论
1 点赞
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 点赞
2022-05-02
TCP/IP 协议
TCP/IP 是基于 TCP 和 IP 这两个网络传输协议的集合,按照OSI模型的不同层次,使用不同的传输协议进行分工合作。TCP/IP协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/I P模型与OSI模型各层的对照关系:TCP/IP协议分层链路层:有时候也称为数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或者其他任何传输媒介)的物理接口细节。网络层:有时也称为互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议,ICMP协议,以及IGMP协议。传输层:主要为两台主机上的应用程序提供端到端的通信,在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP相对安全稳定,但是UDP速度更快。应用层:负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:Telnet远程登陆FTP文件传输协议SMTP简单邮件传输协议SNMP简单网络管理协议TCP/IP协议是一个面向连接的可靠的网络协议 面向连接:一个逻辑概念,它需要自己与目标主机进行三次握手来建立连接才能完成通信。创建连接完成也会进行资源的分配。可靠的:连接时三次握手确认机制保证自己与目标主机的连接。四次分手机制来保证连接资源的释放。每次接收消息都会返回发送方ack确认包数据链路层网络通信就是把有特定意义的数据通过物理介质传送给对方,物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的互换。 数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(物理地址MAC,每一个主机会有一个独一无二的MAC地址)。 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。透明传输:零比特填充、转义字符。靠传输: 在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。检测(CRC):接收者检测错误,如果发现差错,丢弃该帧。网络层IP协议 1. IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。 2. IP地址目前有两个版本,分别是IPv4和IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。由于各类地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是网络地址,后8位就是主机地址。因此,如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码,IP地址和子网掩码通过按位与运算后就可以得到网络地址。A类IP地址: 0.0.0.0~127.255.255.255B类IP地址: 128.0.0.0~191.255.255.255C类IP地址: 192.0.0.0~239.255.255.255ARP和RARP协议 ARP 是根据IP地址获取MAC地址的一种协议。 1. ARP 首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,生成以太网数据包,它会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,最终由以太网广播给子网内的所有主机,那么每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机。而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。 2. RARP 使用与ARP相同的报头结构,作用与ARP相反。RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTP或DHCP所取代。传输层 传输层(Transport Layer)是 OSI 协议的第四层协议,是唯一负责总体的数据传输和数据控制传输层的一层协议。传输层提供端到端的交换数据机制,它不仅对会话层、表示层和应用层这高三层提供可靠的传输服务,还对网络层提供可靠的目的地站点信息。 传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议 TCP 和用户数据报协议 UDP 。TCP TCP是一种面向连接的端到端协议、可靠的、基于字节流的通信协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。TCP需要依赖网络协议为主机提供可用的传输路径。UDP UDP是一种面向无连接的传输层协议,传输可靠性没有保证。可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源端发送到目的端时,无需事先建立连接。UDP采用了简单,容易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接受到重复数据的情况。 传输层提供了应用进程之间的端到端连接,其作用如下: 1. 为网络应用程序提供接口。 2. 为端到端连接提供流量控制、差错控制、服务质量等管理服务。 3. 多路复用、多路分解机制。 应用层 应用层是网络协议栈中最上的一层,也是网络通信的第一层,它提供了让两个终端设备进行信息交换的服务。它定义了信息交换的格式,然后把定义好的信息交给它下面一层的传输层去传输。应用层是由应用层的硬件和软件组成。硬件主要是终端设备,软件主要是应用层网络协议,如 SSH、HTTP、DNS、FTP 等。(由于这一层的内容过多,就不在这里过多讲述,后期会单独记录一篇,在下面推荐一篇来着 aws 比较全面的详解PDF)总结 1. 链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据; 2. 网络层:定义IP地址,确认主机所在的网络位置,并通过IP进行MAC寻址,对外网数据包进行路由转发; 3. 传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序; 4. 应用层:定义数据格式,并按照对应的格式解读数据。注:本篇文章来自本人的学习总结和记录,如有错点和不全欢迎各位大佬指点。{cloud title="应用层" type="lz" url="https://tanghan.lanzoul.com/iPeYa0bgipsjj" password=""/}
2022年05月02日
388 阅读
0 评论
3 点赞