配置文件如下:支持多节点:

{
"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监控网络各个节点状态,并记录日志的更多相关文章

  1. 运用Ntop监控网络流量(视频Demo)

    运用Ntop监控网络流量 ____网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降.网络性能降低.通过流量 ...

  2. Ntop监控网络流量

    运用Ntop监控网络流量 ____ 网络流量反映了网络的运行状态,是判别网络运行是否正常的关键数据,在实际的网络中,如果对网络流量控制得不好或发生网络拥塞,将会导致网络吞吐量下降. 网络性能降低.通过 ...

  3. Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量

    Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...

  4. C# 利用性能计数器监控网络状态

    本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...

  5. python基础教程总结13——网络编程,

    1.网络设计模块 1.1 socket模块    根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接 ...

  6. 用python进行服务器的监控

    用python进行服务器的监控 在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的:百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统 ...

  7. 【python之路35】网络编程之socket相关

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  8. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  9. zabbix监控网络的出入口流量

    首先我们登录到zabbix 点击配置---->模板-->Template OS Linux 下的监控项 点击右上角的添加监控项目 我们的服务器是在Ucloud上的,我们的网卡名称为eth0 ...

随机推荐

  1. 在 ASP.NET Core 中使用 MySql 踩坑记录

    使用 Pomelo.EntityFrameworkCore.MySql 生成 MySQL 数据库 关于如何使用请查看项目文档即可 组件地址:https://github.com/PomeloFound ...

  2. Linux中Mysql的简介和安装

    MySQL 简介 点击查看MySQL官方网站 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗 ...

  3. java常用API的总结(1)

    本篇是对于这一段时间以来接触到的常用api的一些总结,便于以后的查阅.... 一.正则表达式 对于正则表达式,我的感觉就是当我们在做某些题的时候正则表达式会省去我们很多的时间,并且正则表达式的使用格式 ...

  4. 批量执行工具PSSH详解

    批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...

  5. springboot~ EventListener事件监听的使用

    EventListener事件触发和监听器可以对代码解耦,在一些与业务无关的,通用的操作方法,我们可以把它设计成事件监听器,像通知,消息这些模块都可以这样设计. 事件源 @Getter @Builde ...

  6. word中如何只修改英文的颜色

    替换->更多->使用通配符,查找[a-zA-Z],替换为^&,字体选红色

  7. DSAPI QQ用户相关

    获取指定QQ号头像 Label1.Image=DSAPI.QQ用户相关.下载QQ头像("20353841") 获取指定QQ群头像 Label1.Image = DSAPI.QQ用户 ...

  8. cordova+vue打包webapp

    使用cordova+vue打包webapp,可以快速给网页套上一个android和ios壳子,完成一个app的开发. 1. 环境准备. (1)node.js  下载地址: https://nodejs ...

  9. C#--深入理解类型

    今日无事,回顾了一下C#基础知识,颇有收获,就自己的理解,写了这篇文章,如有不对,欢迎指正. C#中的类型可以分为两类:值类型与引用类型,如下图所示. 值类型通常被分配到线程的堆栈上,而引用类型则被分 ...

  10. ## 本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘

    本篇文章对linux常用的一些命令做一下总结,如有需要补充以及不懂得地方,请在下方留言 适合于linux初学者,以及对命令掌握不牢的用来备忘一,磁盘管理1.显示当前目录位置 pwd2.切换目录 cd ...