公式分为web浏览,游戏,voip,办公等类型
import os
import math
import time
def getsoe(apptype,minv,maxv,aver,loss):
if minv == '0':
minv='1'
if maxv == '0':
maxv='1'
if aver == '0':
aver='1'
drop = float(loss)/10
jitter = math.sqrt(((float(maxv)-float(aver))*(float(maxv)-float(aver))+(float(minv)-float(aver))*(float(minv)-float(aver)))/2)
delay = float(aver)
#print("drop jitter delay ",drop,jitter,delay)
if apptype == 'web' or apptype == 'office' or apptype == 'sns':
a=5.008
b=-0.0045
c=0.03
soe = a*math.exp(b*delay)+c
if apptype == 'video':
#enhence effect
soe = math.exp(-drop)/(0.00628*jitter+delay*0.0138)+1.844
if apptype == 'game':
jitter=jitter
x = delay+0.686*jitter
if x>650.0:
x = 650.0
a = 3.08*(10**(-9))
b = 1.18*(10**(-5))
c = 1.15*(10**(-2))
soe = 4.33-a*(x*x*x)+b*(x*x)-c*x
if apptype == 'voip':
soe = 5-0.003*delay-16.14*drop
if apptype == 'download':
x = delay*200/1000
soe = 4.298*math.exp(-0.347*x)+1.39+1
if soe>5.0:
soe = 5.0
if soe<1.0:
soe = 1.0
return round(soe,3)
os.system("curl.exe --silent -o rpingdst.txt http://1.1.1.1/rpingres.txt")
dstlist=[]
fd = open('rpingdst.txt')
for v in fd:
if v.find('node')==0:
dstlist.append(v.split('#')[1])
fd.close()
dstlist = list(set(dstlist))
apptype=["web","office","video","game","voip","download","sns"]
appsoe = {}
appip = {}
for x in apptype:
appsoe[x]=[]
appip[x]=[]
for x in dstlist:
app = x.split(':')[0]
ip = x.split(':')[1]
#print(app,ip)
time.sleep(2)
cmd = "ping "+ip+" -n 10"
if app=='video' or app=='download':
cmd+=" -l 800"
tmpres = os.popen(cmd).readlines()
#print(len(tmpres))
loss = ''
minv = ''
maxv = ''
aver = ''
for t in tmpres:
#print(t)
if t.find('Lost')>=0:
loss = t.split('Lost')[1].split('(')[0].replace('=','').strip()
if t.find('Minimum')>=0:
minv = t.split(',')[0].split('=')[1].replace('ms','').strip()
maxv = t.split(',')[1].split('=')[1].replace('ms','').strip()
aver = t.split(',')[2].split('=')[1].replace('ms','').strip()
#print(getsoe(app,minv,maxv,aver,loss))
if minv=='' or maxv=='' or aver=='':
minv='999'
maxv='999'
aver='999'
if app=='video':
print(app,ip,minv,maxv,aver,loss,getsoe(app,minv,maxv,aver,loss))
appsoe[app].append(getsoe(app,minv,maxv,aver,loss))
appip[app].append(ip)
print('')
fd = open('qossoe.txt','w')
for x in apptype:
print(x,round(sum(appsoe[x])/len(appsoe[x]),2))
fd.write(x+'#'+str(round(sum(appsoe[x])/len(appsoe[x]),2))+'\n')
fd.close()
本文详细探讨了如何根据不同场景如Web浏览、游戏、VoIP和办公来计算网络质量体验(QOE)。通过一系列特定的公式,我们可以量化这些不同应用下的网络性能,从而提升整体用户体验。

3893

被折叠的 条评论
为什么被折叠?



