python icmp\dns\http监控网络各个节点状态,并记录日志
配置文件如下:支持多节点:
{
"dns":[{"domainname":"www.baidu.com","dnsserver":"114.114.114.114"}],
"icmp":[{"ip_address":"114.114.114.114"},{"ip_address":"172.17.1.1"},{"ip_address":"192.168.101.1"},{"ip_address":"192.168.9.1"}],
"http":[{"url":"www.baidu.com","title":"百度"}]
}
# 读取配置文件,配置文件,每个监控类型允许多个监控节点,函数返回包含多个节点的列表
def read_config():
try:
file = open("config.json")
config = file.read()
file.close()
config = json.loads(config) http = config["http"]
icmp = config["icmp"]
dns = config["dns"] return http,icmp,dns
except Exception:
print("read config error")
write_logs("read config error")
return None
# 用来写result结果,只有网络异常的时候才会输出
def write_resules(filename,results):
try :
file = open(filename,"a")
file.write(time.asctime(time.localtime(time.time())) + " : " + results + "\n")
file.close()
except Exception:
print(time.asctime(time.localtime(time.time())) + "write results is error")
# 写日志文件,方便在出现错误的时候判断错误原因,只有在出错的时候才会输出
def write_logs(logs):
try :
file = open("logs.txt","a")
file.write(time.asctime(time.localtime(time.time())) + " : " + logs + "\n")
file.close()
except Exception:
print(time.asctime(time.localtime(time.time())) + "write log is error")
# 调用requests发送数据包
def send_http_packet(url):
# requests.packages.urllib3.disable_warnings()
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
headers = {'User-Agent': user_agent}
url = "http://" + url
try:
response = requests.get(url, headers)
response_html = response.content.decode()
return response_html
except Exception:
print('send http packet error,error')
write_logs('send http packet error,error')
return None
# 使用bs4解析获取到的数据,并和给出的网页标题对比
def check_http(url,title):
response_html = send_http_packet(url)
if response_html != None and title != None :
soup = bs4.BeautifulSoup(response_html, 'lxml')
html_title = soup.title.text
if title in html_title:
return True
else:
write_logs("title not same ,web title is : " + html_title)
return False
else:
print('html or title is None')
return False
# 发送数ping数据包
def send_icmp_packet(ip_address):
try:
response_packet = sr1(IP(dst=ip_address)/ICMP(),timeout=2,verbose = False)
return response_packet
except Exception:
print('send icmp packet error,error')
write_logs('send icmp packet error,error')
return None
# 检查icmp数据包有没有正常恢复
def check_icmp(ip_address):
response_packet = send_icmp_packet(ip_address)
if response_packet != None:
return True
else:
return False
# 发送DNS请求
def send_dns_packet(domainname,dnsserver):
i = IP(dst=dnsserver)
u = UDP(dport = 53)
d = DNS(rd=1)
d.qd = DNSQR(qname = domainname , qtype = "A" ,qclass = "IN")
dns_request_packet = i/u/d try:
dns_response_packet = sr1(dns_request_packet,timeout=2,verbose = False)
return dns_response_packet
except Exception:
print("send dns packet error ")
write_logs('send icmp packet error,error')
return None
# 检查DNS请求是否正常返回
def check_dns(domainname,dnsserver):
dns_response_packet = send_dns_packet(domainname,dnsserver) if dns_response_packet != None:
return True
else:
return False
# 为了方便多线程调用,每个监控类型都设置一个启动程序
def start_http(url, title):
while True:
if check_http(url, title) :
print("http True : " + url + "," + title)
else:
print("http False : " + url + "," + title)
write_resules("http_results.txt","http False : " + url + "," + title)
time.sleep(2)
# 为了方便多线程调用,每个监控类型都设置一个启动程序
def start_icmp(ip_address):
while True:
if check_icmp(ip_address) :
print("icmp True : " + ip_address)
else:
print("icmp False : " + ip_address)
write_resules("icmp_results.txt","icmp False : " + ip_address)
time.sleep(2)
# 为了方便多线程调用,每个监控类型都设置一个启动程序
def start_dns(domainname,dnsserver):
while True:
if check_dns(domainname,dnsserver) :
print("dns True : " + domainname + "," + dnsserver)
else:
print("dns False : " + domainname + "," + dnsserver)
write_resules("dns_results.txt","dns False : " + domainname + "," +dnsserver)
time.sleep(2)
# 主函数
def main():
http,icmp,dns= read_config() # 循环取出http监控节点,每个节点启动一个线程
for h in http:
url = h["url"]
title = h["title"]
moniter_http = threading.Thread(target=start_http,args=(url, title))
moniter_http.start() # 循环取出icmp监控节点,每个节点启动一个线程
for i in icmp:
ip_address = i["ip_address"]
moniter_icmp = threading.Thread(target=start_icmp,args=(ip_address,))
moniter_icmp.start() # 循环取出dns监控节点,每个节点启动一个线程
for d in dns:
domainname = d["domainname"]
dnsserver = d["dnsserver"]
moniter_dns = threading.Thread(target=start_dns,args=(domainname,dnsserver))
moniter_dns.start()
if __name__ == '__main__':
main()
python icmp\dns\http监控网络各个节点状态,并记录日志的更多相关文章
- 运用Ntop监控网络流量(视频Demo)
运用Ntop监控网络流量 ____网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降.网络性能降低.通过流量 ...
- Ntop监控网络流量
运用Ntop监控网络流量 ____ 网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降. 网络性能降低.通过 ...
- Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量
Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...
- C# 利用性能计数器监控网络状态
本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...
- python基础教程总结13——网络编程,
1.网络设计模块 1.1 socket模块 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接 ...
- 用python进行服务器的监控
用python进行服务器的监控 在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的:百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统 ...
- 【python之路35】网络编程之socket相关
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- zabbix监控网络的出入口流量
首先我们登录到zabbix 点击配置---->模板-->Template OS Linux 下的监控项 点击右上角的添加监控项目 我们的服务器是在Ucloud上的,我们的网卡名称为eth0 ...
随机推荐
- js生成[n,m]的随机数,js如何生成随机数,javascript随机数Math.random()
一.预备知识 Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ 1 ...
- Java 10 var关键字详解和示例教程
在本文中,我将通过示例介绍新的Java SE 10特性——“var”类型.你将学习如何在代码中正确使用它,以及在什么情况下不能使用它. 介绍 Java 10引入了一个闪亮的新功能:局部变量类型推断.对 ...
- Spring之旅第三篇-Spring配置详解
上一篇学习了IOC的概念并初步分析了实现原理,这篇主要学习Spring的配置,话不多说,让我们开始! 一.Bean元素配置 1.1 基本配置 看一个最基本的bean配置 <bean name=& ...
- 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的
概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...
- 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...
- Window环境下配置MySQL 5.6的主从复制、备份恢复
1.环境准备 Windows 7 64位 MySQL 5.6 主库:192.168.103.207 从库:192.168.103.208 navicat无法连接MySQL8解决方案 #修改加密规则 A ...
- element-ui 动态换肤
1.在安装好 element-ui@2.x 以后,首先安装sass-loader npm i sass-loader node-sass -D 2.安装 element-theme npm i ele ...
- 【春华秋实】.NET Core之只是多看了你一眼
感官初体验 技术学习是一件系统性的事情,如果拒绝学习,那么自己就会落后以至于被替代..NET也是一样,当开源.跨平台成为主流的时候,如果再故步自封,等待.NET的就是死路一条,幸好.NET Core问 ...
- golang标准库 context的使用
本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇. goroutine的简单固然有利于我们的开发,但 ...
- .Net学前入门
概念:.NET和C# .NET/dotnet:一般指.Net Framework框架,是一种平台,一种技术: .net由.net平台以及.Net Framework框架组成,我们可以把.net平台比喻 ...