背景:门禁机器使用的WiFi连接,因为某些原因会不定期自动断开连接,需要人工及时干预,以免影响门禁数据同步,故写此脚本,定时检测门禁网络联通性。
bash
#首次使用要安装tcping模块
pip install tcping
bash
from tcping import Ping
import csv
from datetime import datetime
import requests, json
def SendWeiXinWork(user,context):
corpid='填企业ID' #企业ID
appsecret='填secret' #secret
agentid=填AgentID #AgentID
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=user
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": context
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
def pingip(ipAddress,request_nums):
"""
ping ip
:param ipAddress:
:param request_nums: 请求次数
:return: 丢包率loss和统计结果res
"""
ping = Ping(ipAddress,3718,3)#3718是端口号,我的门禁机器只有这个端口号可以ping通
ping.ping(request_nums)
res = ping.result.table
ret = ping.result.raw
retlist = list(ret.split('\n'))
loss = retlist[2].split(',')[3].split(' ')[1] # 获取数据包发送成功率
return loss, res
def main():
# 获取待ping的设备地址信息
with open('C:\\Users\\Junson\\Desktop\\Script\\巡检\\门禁\\门禁设备列表.csv','r') as ipList_csv:
ipList = csv.reader(ipList_csv)
next(ipList) #跳过首行
for ipAddress in ipList:
# 调用pingip方法得到数据包发送成功率
loss, res = pingip(ipAddress[0], 4)
if float(loss.strip('%')) / 100 <= 0.3: # 0.3为自定义数据包丢包率阈值,可修改
#数据包发送成功率低于30%时,发送消息到企微机器人
SendWeiXinWork('@all','%s %s无法ping通,请检查设备的网络连接!'%(ipAddress[0],ipAddress[1]))
#记录日志
file_handle=open('C:\\Users\\Junson\\Desktop\\Script\\巡检\\门禁\\log.txt',mode='a')
file_handle.write('\n%s %s %s无法ping通,请检查设备的网络连接!'%(datetime.now(),ipAddress[0],ipAddress[1]))
file_handle.close()
else:
#记录日志
file_handle=open('C:\\Users\\Junson\\Desktop\\Script\\巡检\\门禁\\log.txt',mode='a')
file_handle.write('\n%s %s %sping访问正常。'%(datetime.now(),ipAddress[0],ipAddress[1]))
file_handle.close()
if __name__ == '__main__':
#实现服务器网络状态监控
main()
pass
csv文件结构
创建计划任务:
最终效果: