
文章采集api
行业解决方案:WebRTC录采集平面数据
采集交流 • 优采云 发表了文章 • 0 个评论 • 119 次浏览 • 2022-10-20 18:39
1. 网络交易采集
WebRTC中有一个可用于获取桌面的API:获取显示媒体
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
约束是可选的 约束约束与 getUser 媒体函数中的约束一致。
2. 采集平面数据
采集平面数据:此功能在 Chrome 中是实验性的。
在实际战斗之前,我们需要打开浏览器并进行设置 chrome://flags/#enable-experimental-web-platform-features
如下图所示:
接下来,让我们看一下具体的js代码,如下所示:
C++音频和视频开发
学习地址:免费]FFMPEG/WebRTC/RTMP/NDK/安卓音视频流高级开发
【文章福利】:免费C++音视频学习包、技术视频、内容包括(音视频开发、大厂面试问题、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免费分享,如有必要,可以添加君阳接收! ~学习交流俊阳994289133点击加入即可接收信息包
'use strict'
var audioSource = document.querySelector('select#audioSource');
var audioOutput = document.querySelector('select#audioOutput');
var videoSource = document.querySelector('select#videoSource');
// 获取video标签
var videoplay = document.querySelector('video#player');
// 获取音频标签
var audioplay = document.querySelector('audio#audioplayer');
//div
var divConstraints = document.querySelector('div#constraints');
// 定义二进制数组
var buffer;
var mediaRecorder;
//record 视频录制 播放 下载按钮
var recvideo = document.querySelector('video#recplayer');
var btnRecord = document.querySelector('button#record');
var btnPlay = document.querySelector('button#recplay');
var btnDownload = document.querySelector('button#download');
//filter 特效选择
var filtersSelect = document.querySelector('select#filter');
//picture 获取视频帧图片相关的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是设备信息的数组
function gotDevices(deviceInfos){
// 遍历设备信息数组, 函数里面也有个参数是每一项的deviceinfo, 这样我们就拿到每个设备的信息了
deviceInfos.forEach(function(deviceinfo){
// 创建每一项
var option = document.createElement('option');
option.text = deviceinfo.label;
option.value = deviceinfo.deviceId;
if(deviceinfo.kind === 'audioinput'){ // 音频输入
audioSource.appendChild(option);
}else if(deviceinfo.kind === 'audiooutput'){ // 音频输出
audioOutput.appendChild(option);
}else if(deviceinfo.kind === 'videoinput'){ // 视频输入
videoSource.appendChild(option);
}
})
}
// 获取到流做什么, 在gotMediaStream方面里面我们要传人一个参数,也就是流,
// 这个流里面实际上包含了音频轨和视频轨,因为我们通过constraints设置了要采集视频和音频
// 我们直接吧这个流赋值给HTML中赋值的video标签
// 当时拿到这个流了,说明用户已经同意去访问音视频设备了
function gotMediaStream(stream){
<p>
// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定数据源来自stream,这样视频标签采集到这个数据之后就可以将视频和音频播放出来
// 通过stream来获取到视频的track 这样我们就将所有的视频流中的track都获取到了,这里我们只取列表中的第一个
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我们就能调用Track的方法
var videoConstraints = videoTrack.getSettings(); // 这样就可以拿到所有video的约束
// 将这个对象转化成json格式
// 第一个是videoConstraints, 第二个为空, 第三个表示缩进2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 当我们采集到音视频的数据之后,我们返回一个Promise
return navigator.mediaDevices.enumerateDevices();
}
function handleError(err){
console.log('getUserMedia error:', err);
}
function start() {
// 判断浏览器是否支持
if(!navigator.mediaDevices ||
!navigator.mediaDevices.getDisplayMedia){ // 判断是否支持录屏
console.log('getUserMedia is not supported!');
}else{
// 获取到deviceId
var deviceId = videoSource.value;
// 这里是约束参数,正常情况下我们只需要是否使用视频是否使用音频
// 对于视频就可以按我们刚才所说的做一些限制
/**
* video : {
width: 640, // 宽带
height: 480, // 高度
frameRate:15, // 帧率
facingMode: 'enviroment', // 设置为后置摄像头
deviceId : deviceId ? deviceId : undefined // 如果deviceId不为空直接设置值,如果为空就是undefined
},
*/
var constraints = { // 表示同时采集视频金和音频
video : true,
audio : false
}
// 调用录屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 这样就可以抓起桌面的数据了
.then(gotMediaStream) // 使用Promise串联的方式,获取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 当我选择摄像头的时候,他可以触发一个事件,
// 当我调用start之后我要改变constraints
videoSource.onchange = start;
// 选择特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 点击按钮获取视频帧图片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 调用canvas API获取上下文,图片是二维的,所以2d,这样我们就拿到它的上下文了
// 调用drawImage绘制图片,第一个参数就是视频,我们这里是videoplay,
// 第二和第三个参数是起始点 0,0
// 第四个和第五个参数表示图片的高度和宽度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//
function handleDataAvailable(e){ // 5、获取数据的事件函数 当我们点击录制之后,数据就会源源不断的从这个事件函数中获取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 将e.data放入二进制数组里面
// 这个buffer应该是我们在开始录制的时候创建这个buffer
}
}
// 2、录制方法
function startRecord(){
buffer = []; // 定义数组
var options = {
mimeType: 'video/webm;codecs=vp8' // 录制视频 编码vp8
}
if(!MediaRecorder.isTypeSupported(options.mimeType)){ // 判断录制的视频 mimeType 格式浏览器是否支持
console.error(`${options.mimeType} is not supported!`);
return;
}
try{ // 防止录制异常
// 5、先在上面定义全局对象mediaRecorder,以便于后面停止录制的时候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 调用录制API // window.stream在gotMediaStream中获取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、调用事件 这个事件处理函数里面就会收到我们录制的那块数据 当我们收集到这个数据之后我们应该把它存储起来
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面传入一个时间片,每隔一个 时间片存储 一块数据
}
// 3、停止录制
function stopRecord(){
// 6、调用停止录制
mediaRecorder.stop();
}
// 1、录制视频
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 开始录制
startRecord(); // 调用startRecord方法开启录制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按钮状态禁止
btnDownload.disabled = true; // 下载按钮状态禁止
}else{ // 结束录制
stopRecord(); // 停止录制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止录制之后可以播放
btnDownload.disabled = false; // 停止录制可以下载
}
}
// 点击播放视频
btnPlay.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
recvideo.src = window.URL.createObjectURL(blob);
recvideo.srcObject = null;
recvideo.controls = true;
recvideo.play();
}
// 下载视频
btnDownload.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'aaa.webm';
a.click();
}</p>
原创链接:WebRTC录制采集平面数据 - 信息中心 - 音视频发展中国网 - 打造中国最权威的音视频技术交流分享论坛
解决方案:百度seo快速排名工具!
软件介绍
百度seo快速排名工具,用来提高百度权重,百度排名的小工具。
使用场景
如果您以前没有看过它,您可以先回顾一下。
就是说做网站一般来说,如果你想做一个高权重的网站,要花很长时间,甚至很多年,如果你想花时间做一个高权重网站,可以刷品牌字。
比如第一次做煎蛋的时候,虽然权重是0,但是必须在上排名第一。
只是炒蛋网这个词没有索引,所以权重也是0。我们想一想:只要我们把炒蛋网这个词刷出索引,然后把这个词提交到站长家,那么我们可以在短时间内获得高权重。
另外,一个带有“网上赚钱”等索引的词,搜索这个词,你的网站可能在第10页,普通人找不到你的网站。
但是如果你用软件,搜索这个词,然后进入你的网站,搜索引擎也会认为你的网站满足了用户的需求,也会提升你的排名。
指示
打开软件设置“ip代理api地址”、搜索词、URL。
添加会有点慢。
也可以直接在文件夹中设置:
需要注意的是ip代理api地址需要购买和付费,有几个免费的已经测试过,不能使用。
另外,搜狗搜索也不行。
如果要刷多个字,可以多打开软件,放在多个文件夹中,全部打开!
下载链接 查看全部
行业解决方案:WebRTC录采集平面数据
1. 网络交易采集
WebRTC中有一个可用于获取桌面的API:获取显示媒体
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
约束是可选的 约束约束与 getUser 媒体函数中的约束一致。
2. 采集平面数据
采集平面数据:此功能在 Chrome 中是实验性的。
在实际战斗之前,我们需要打开浏览器并进行设置 chrome://flags/#enable-experimental-web-platform-features
如下图所示:
接下来,让我们看一下具体的js代码,如下所示:
C++音频和视频开发
学习地址:免费]FFMPEG/WebRTC/RTMP/NDK/安卓音视频流高级开发
【文章福利】:免费C++音视频学习包、技术视频、内容包括(音视频开发、大厂面试问题、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免费分享,如有必要,可以添加君阳接收! ~学习交流俊阳994289133点击加入即可接收信息包
'use strict'
var audioSource = document.querySelector('select#audioSource');
var audioOutput = document.querySelector('select#audioOutput');
var videoSource = document.querySelector('select#videoSource');
// 获取video标签
var videoplay = document.querySelector('video#player');
// 获取音频标签
var audioplay = document.querySelector('audio#audioplayer');
//div
var divConstraints = document.querySelector('div#constraints');
// 定义二进制数组
var buffer;
var mediaRecorder;
//record 视频录制 播放 下载按钮
var recvideo = document.querySelector('video#recplayer');
var btnRecord = document.querySelector('button#record');
var btnPlay = document.querySelector('button#recplay');
var btnDownload = document.querySelector('button#download');
//filter 特效选择
var filtersSelect = document.querySelector('select#filter');
//picture 获取视频帧图片相关的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是设备信息的数组
function gotDevices(deviceInfos){
// 遍历设备信息数组, 函数里面也有个参数是每一项的deviceinfo, 这样我们就拿到每个设备的信息了
deviceInfos.forEach(function(deviceinfo){
// 创建每一项
var option = document.createElement('option');
option.text = deviceinfo.label;
option.value = deviceinfo.deviceId;
if(deviceinfo.kind === 'audioinput'){ // 音频输入
audioSource.appendChild(option);
}else if(deviceinfo.kind === 'audiooutput'){ // 音频输出
audioOutput.appendChild(option);
}else if(deviceinfo.kind === 'videoinput'){ // 视频输入
videoSource.appendChild(option);
}
})
}
// 获取到流做什么, 在gotMediaStream方面里面我们要传人一个参数,也就是流,
// 这个流里面实际上包含了音频轨和视频轨,因为我们通过constraints设置了要采集视频和音频
// 我们直接吧这个流赋值给HTML中赋值的video标签
// 当时拿到这个流了,说明用户已经同意去访问音视频设备了
function gotMediaStream(stream){
<p>

// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定数据源来自stream,这样视频标签采集到这个数据之后就可以将视频和音频播放出来
// 通过stream来获取到视频的track 这样我们就将所有的视频流中的track都获取到了,这里我们只取列表中的第一个
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我们就能调用Track的方法
var videoConstraints = videoTrack.getSettings(); // 这样就可以拿到所有video的约束
// 将这个对象转化成json格式
// 第一个是videoConstraints, 第二个为空, 第三个表示缩进2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 当我们采集到音视频的数据之后,我们返回一个Promise
return navigator.mediaDevices.enumerateDevices();
}
function handleError(err){
console.log('getUserMedia error:', err);
}
function start() {
// 判断浏览器是否支持
if(!navigator.mediaDevices ||
!navigator.mediaDevices.getDisplayMedia){ // 判断是否支持录屏
console.log('getUserMedia is not supported!');
}else{
// 获取到deviceId
var deviceId = videoSource.value;
// 这里是约束参数,正常情况下我们只需要是否使用视频是否使用音频
// 对于视频就可以按我们刚才所说的做一些限制
/**
* video : {
width: 640, // 宽带
height: 480, // 高度
frameRate:15, // 帧率
facingMode: 'enviroment', // 设置为后置摄像头
deviceId : deviceId ? deviceId : undefined // 如果deviceId不为空直接设置值,如果为空就是undefined
},
*/
var constraints = { // 表示同时采集视频金和音频
video : true,
audio : false
}
// 调用录屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 这样就可以抓起桌面的数据了
.then(gotMediaStream) // 使用Promise串联的方式,获取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 当我选择摄像头的时候,他可以触发一个事件,
// 当我调用start之后我要改变constraints
videoSource.onchange = start;
// 选择特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 点击按钮获取视频帧图片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 调用canvas API获取上下文,图片是二维的,所以2d,这样我们就拿到它的上下文了
// 调用drawImage绘制图片,第一个参数就是视频,我们这里是videoplay,
// 第二和第三个参数是起始点 0,0
// 第四个和第五个参数表示图片的高度和宽度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//

function handleDataAvailable(e){ // 5、获取数据的事件函数 当我们点击录制之后,数据就会源源不断的从这个事件函数中获取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 将e.data放入二进制数组里面
// 这个buffer应该是我们在开始录制的时候创建这个buffer
}
}
// 2、录制方法
function startRecord(){
buffer = []; // 定义数组
var options = {
mimeType: 'video/webm;codecs=vp8' // 录制视频 编码vp8
}
if(!MediaRecorder.isTypeSupported(options.mimeType)){ // 判断录制的视频 mimeType 格式浏览器是否支持
console.error(`${options.mimeType} is not supported!`);
return;
}
try{ // 防止录制异常
// 5、先在上面定义全局对象mediaRecorder,以便于后面停止录制的时候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 调用录制API // window.stream在gotMediaStream中获取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、调用事件 这个事件处理函数里面就会收到我们录制的那块数据 当我们收集到这个数据之后我们应该把它存储起来
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面传入一个时间片,每隔一个 时间片存储 一块数据
}
// 3、停止录制
function stopRecord(){
// 6、调用停止录制
mediaRecorder.stop();
}
// 1、录制视频
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 开始录制
startRecord(); // 调用startRecord方法开启录制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按钮状态禁止
btnDownload.disabled = true; // 下载按钮状态禁止
}else{ // 结束录制
stopRecord(); // 停止录制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止录制之后可以播放
btnDownload.disabled = false; // 停止录制可以下载
}
}
// 点击播放视频
btnPlay.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
recvideo.src = window.URL.createObjectURL(blob);
recvideo.srcObject = null;
recvideo.controls = true;
recvideo.play();
}
// 下载视频
btnDownload.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'aaa.webm';
a.click();
}</p>
原创链接:WebRTC录制采集平面数据 - 信息中心 - 音视频发展中国网 - 打造中国最权威的音视频技术交流分享论坛
解决方案:百度seo快速排名工具!
软件介绍
百度seo快速排名工具,用来提高百度权重,百度排名的小工具。
使用场景
如果您以前没有看过它,您可以先回顾一下。
就是说做网站一般来说,如果你想做一个高权重的网站,要花很长时间,甚至很多年,如果你想花时间做一个高权重网站,可以刷品牌字。

比如第一次做煎蛋的时候,虽然权重是0,但是必须在上排名第一。
只是炒蛋网这个词没有索引,所以权重也是0。我们想一想:只要我们把炒蛋网这个词刷出索引,然后把这个词提交到站长家,那么我们可以在短时间内获得高权重。
另外,一个带有“网上赚钱”等索引的词,搜索这个词,你的网站可能在第10页,普通人找不到你的网站。
但是如果你用软件,搜索这个词,然后进入你的网站,搜索引擎也会认为你的网站满足了用户的需求,也会提升你的排名。
指示
打开软件设置“ip代理api地址”、搜索词、URL。

添加会有点慢。
也可以直接在文件夹中设置:
需要注意的是ip代理api地址需要购买和付费,有几个免费的已经测试过,不能使用。
另外,搜狗搜索也不行。
如果要刷多个字,可以多打开软件,放在多个文件夹中,全部打开!
下载链接
通用解决方案:程序员必备网站之一:API Coding
采集交流 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-10-18 15:17
大家好,我叫G。
前不久,我们推送了一篇文章文章《这个神器可以帮助你快速找到你想要的API接口!》,分享给大家网站:来自印度、丹麦的开发者制作的Public APIs,其主要功能是帮助开发者找到一些免费实用的API接口。
在文章的最后,顺便提到了作者的其他几个项目,并承诺以后会介绍给大家。今天,小G就是来兑现这个承诺的。
下面我们要介绍的网站就是API Coding。
它的主要功能是采集和汇总众多API相关的开放接口、学习资源、工具教程等,帮助开发者降低信息检索成本和学习成本。
地址:apicoding.io
从它的主页介绍来看,它的主要内容主要分为以下几类。
API 合集:自由开放的接口
它采集了互联网上大量免费开放的API接口,包括视频会议、股票分析、货币转换、PDF转换、IP查询、图像压缩、短链生成等众多不同功能的API接口。
地址:apicoding.io/public-apis
学习:解释API开发的文章
共收录6个文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 开发工具
共采集了22个有用的API工具,包括但不限于云存储、云托管、JSON在线编辑/解析/生成、API接口调试、假数据生成、数据爬取等功能。
地址:apicoding.io/tools
资源:API 教程和项目在线开放
主要采集网上众多作者发现的优质API教程,包括API的最佳开发实践、微软API设计指南、REST API的快速创建、真实环境在线部署等。
地址:apicoding.io/resources
总体来说,网站提供的界面列表、学习资源、开发工具都挺实用的。
如果你目前的API接口设计和开发能力比较薄弱,建议你看看这个网站,相信你能在上面找到很多好东西。
--
文末安利还有一波我们的公众号:GitHubDaily。目前每天至少更新3篇文章,主要分享比较实用或者有趣的开发工具和开源项目,偶尔聊聊技术圈的最新。有什么新鲜事,感兴趣的朋友可以关注一下。
高效的方法:如何利用SEO站长工具优化工作
网站 的提升都被优化器使用。没有搜索引擎优化,推广是不可能的。百度站长之物的推出,得到了草根站长们的大力支持。虽然这些东西不能满足很多地方站长的需求,但是很多内容都很好的支持了站长。如何更好地利用百度站长?有必要了解一下百度站长的一些成就。
1.如何发送外部链接应该从外部链接分析中获得。这些都是自然技巧,其他的网站在讲解的时候也需要说明。你会发现百度文章采集里面的文字很好,百度笔墨采集前面的链接也很不错。这很好。锚文本上下文链接是网站外链发布的重要推广上下文,也是站长们关注和值得做的事情。
2. 竞争对手数据也可以通过外链进行解释。通过外链搞定站长,可以轻松搞定一系列外链竞争对手。我们能知道有多少外展是有效的,外展的传递平台在哪里?俗话说:“知己知彼,百战百胜”。解释竞争对手的 网站 是我创建 网站 的常见情况。实时获取竞争对手的外链资源,挖掘新资源是重中之重。站长只有大量的熟人对竞争对手的所有信息进行粗略的解释和超越。竞争对手的外部链接也是站长学习的。
3. 丰富使用网页优化启动“可以提高网站的访问率,站长可以利用一系列条件来提高网站的运行率,这些成就每个都要学习丰富网站。这样一个敷衍的商业网站的结果是非常实用的。网页优化的结果是当我创建一个网站并更新它时,我可以实时照顾百度。如何优化我的网站网站? 同时,网站 上有一些headers 需要改进。
这可以让你在输入关键词后查看这些词中哪些相关词被用户搜索过,从而可以大致提高网站对关键词的收益。
站长使用东西在很大程度上简化了站长在使用过程中,服从性也提高了,站长的优化能力也提高了。这些都是百度站长用的东西。虽然现在百度的东西还不是很全面,但相信在不久的将来,站长的东西会全面转型,内容会越来越满意。 查看全部
通用解决方案:程序员必备网站之一:API Coding
大家好,我叫G。
前不久,我们推送了一篇文章文章《这个神器可以帮助你快速找到你想要的API接口!》,分享给大家网站:来自印度、丹麦的开发者制作的Public APIs,其主要功能是帮助开发者找到一些免费实用的API接口。
在文章的最后,顺便提到了作者的其他几个项目,并承诺以后会介绍给大家。今天,小G就是来兑现这个承诺的。
下面我们要介绍的网站就是API Coding。
它的主要功能是采集和汇总众多API相关的开放接口、学习资源、工具教程等,帮助开发者降低信息检索成本和学习成本。
地址:apicoding.io
从它的主页介绍来看,它的主要内容主要分为以下几类。
API 合集:自由开放的接口

它采集了互联网上大量免费开放的API接口,包括视频会议、股票分析、货币转换、PDF转换、IP查询、图像压缩、短链生成等众多不同功能的API接口。
地址:apicoding.io/public-apis
学习:解释API开发的文章
共收录6个文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 开发工具
共采集了22个有用的API工具,包括但不限于云存储、云托管、JSON在线编辑/解析/生成、API接口调试、假数据生成、数据爬取等功能。
地址:apicoding.io/tools

资源:API 教程和项目在线开放
主要采集网上众多作者发现的优质API教程,包括API的最佳开发实践、微软API设计指南、REST API的快速创建、真实环境在线部署等。
地址:apicoding.io/resources
总体来说,网站提供的界面列表、学习资源、开发工具都挺实用的。
如果你目前的API接口设计和开发能力比较薄弱,建议你看看这个网站,相信你能在上面找到很多好东西。
--
文末安利还有一波我们的公众号:GitHubDaily。目前每天至少更新3篇文章,主要分享比较实用或者有趣的开发工具和开源项目,偶尔聊聊技术圈的最新。有什么新鲜事,感兴趣的朋友可以关注一下。
高效的方法:如何利用SEO站长工具优化工作
网站 的提升都被优化器使用。没有搜索引擎优化,推广是不可能的。百度站长之物的推出,得到了草根站长们的大力支持。虽然这些东西不能满足很多地方站长的需求,但是很多内容都很好的支持了站长。如何更好地利用百度站长?有必要了解一下百度站长的一些成就。

1.如何发送外部链接应该从外部链接分析中获得。这些都是自然技巧,其他的网站在讲解的时候也需要说明。你会发现百度文章采集里面的文字很好,百度笔墨采集前面的链接也很不错。这很好。锚文本上下文链接是网站外链发布的重要推广上下文,也是站长们关注和值得做的事情。
2. 竞争对手数据也可以通过外链进行解释。通过外链搞定站长,可以轻松搞定一系列外链竞争对手。我们能知道有多少外展是有效的,外展的传递平台在哪里?俗话说:“知己知彼,百战百胜”。解释竞争对手的 网站 是我创建 网站 的常见情况。实时获取竞争对手的外链资源,挖掘新资源是重中之重。站长只有大量的熟人对竞争对手的所有信息进行粗略的解释和超越。竞争对手的外部链接也是站长学习的。
3. 丰富使用网页优化启动“可以提高网站的访问率,站长可以利用一系列条件来提高网站的运行率,这些成就每个都要学习丰富网站。这样一个敷衍的商业网站的结果是非常实用的。网页优化的结果是当我创建一个网站并更新它时,我可以实时照顾百度。如何优化我的网站网站? 同时,网站 上有一些headers 需要改进。

这可以让你在输入关键词后查看这些词中哪些相关词被用户搜索过,从而可以大致提高网站对关键词的收益。
站长使用东西在很大程度上简化了站长在使用过程中,服从性也提高了,站长的优化能力也提高了。这些都是百度站长用的东西。虽然现在百度的东西还不是很全面,但相信在不久的将来,站长的东西会全面转型,内容会越来越满意。
完整解决方案:JavaScript架构前端监控搭建过程步骤
采集交流 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-10-18 05:15
目录
前言
上一篇介绍了为什么前端会有监控系统?前端监控系统有什么意义?有朋友看完后留言,想听听一些详细的实现。那么在本文中,我们将开始介绍前端监控是如何实现的。
如果还是不明白为什么,监控有什么用,推荐阅读上一篇文章文章:前端为什么不能没有监控系统?
在实施之前,首先要在脑海中有一个整体的背景,了解构建前端监控的具体流程步骤。因为前端监控系统其实是一个完整的全栈项目,不仅仅是前端,甚至主要的实现都围绕着数据。
当然,还有一点需要说明。本文的实现主要针对普通业务和中小厂自研方向。我看过大厂做的监控系统。它非常复杂和强大,动辄数以亿计的数据。最终走向了大数据的方向。我只介绍如何实现main函数,如何解决问题。
前端监控的构建过程分为以下几个阶段:
下面我来梳理一下各个阶段的关键实现思路。
采集阶段:采集什么数据?
监控的第一步是采集数据。有数据是监控的前提。
采集数据的含义是记录用户在使用产品过程中的真实操作。结合我们上一篇的分析,实际操作产生的数据可以分为两类:异常数据和行为数据。
我们先分析异常数据。项目中的异常一般可以分为两类,一类是前端异常,一类是接口异常。
前端异常
前端异常大致可以分为:
最重要的,也是我们遇到最多的,就是各种js代码执行异常。比如类型错误、引用错误等。这些异常大部分是由于我们的编码不精确造成的,所以采集这些异常有助于我们提高编码质量。
然后是 Promise 异常。Promise 是 ES6 最重要的属性之一。考验我们的js异步编程能力,主要体现在接口请求上。因此,这两部分的异常捕获非常关键。
另外,静态资源加载异常一般是指引用了一些html中的图片地址、第三方js地址等,由于各种原因不能正常加载,这个也要监控。
console.error 异常一般用在第三方前端框架中。它自定义了一些错误,会被console.error抛出。此类异常也需要被捕获。
至于跨域异常,我们经常会遇到这种情况,通常可以在前后端开发联调阶段发现。但不确定是后端的配置突然在线更改,导致前端跨域。为了安全起见,您还应该对其进行监控。
前端异常采集大概只有这5种,基本覆盖了前端90%以上的异常。
接口异常
接口异常属于后端异常,但是接口异常会直接导致前端页面错误。因此,此类异常是我们判断线上问题根源的重要依据。接口异常可以根据响应结果分类:
有时由于网络问题或服务器问题,前端发起请求后没有收到响应,请求被挂起。这次是无响应/超时响应异常。对于此类异常,我们可以设置最大请求时间,超时后主动断开请求,添加接口超时记录。
另外,其他类型的接口异常可以根据HTTP状态码或者后端返回的error_code等指定字段来判断。
不管是使用状态码还是其他判断方式,只要能区分异常类型,这个不是严格要求的。
4xx异常类型是请求异常,一般是前端传递的参数有问题,或者接口验证参数有问题。处理此类异常的关键是保存请求参数,这样可以方便前端排查。
5xx 错误是服务器内部处理的异常。此类异常的关键信息是报错时间和返回的异常描述。保存这些可以方便后端查找日志。
我认为权限不足也是一种重要的错误类型。因为有些管理系统的权限设计比较复杂,有时候界面突然莫名其妙无法调整,影响用户接下来的操作,也需要记录和跟踪。
行为数据
行为数据比较广泛,用户任何有意义的操作都可以定义为行为数据。
例如,当一个按钮被点击时,它在那里停留了多长时间,新功能的点击率,何时使用等等。自主研发的监控系统的优势之一是灵活性。您需要的任何有用信息都可以在此阶段进行设计。
这个阶段非常关键,是监控系统设计的核心,所以我写的很详细,这个阶段大家要多考虑采集哪些数据。后面的阶段都是基于这个设计的具体实现。
API阶段:构建上报数据的API接口
在上一阶段,采集数据计划已经准备好了。当 采集 数据到达时,接下来会上报数据。
说白了,数据上报就是通过调用API接口将数据传输出来,然后存入数据库。因此,这个阶段的任务是构建一个用于报告数据的API接口应用程序。
作为一名光荣的前端工程师,在开发接口时自然会选择属于 JS 家族的 Node.js。Node.js 目前有很多框架。我比较喜欢轻量简洁,什么都需要自己安装,所以选择了简洁经典的Express框架。
构建 API 应用程序要做的事情是:
还有一些细节需要处理。这个阶段对于后端基础薄弱的同学来说是一个很好的学习机会。
强烈建议前端的朋友掌握一些后端的基础知识,至少从简单的原理上了解是怎么回事。这个阶段主要是了解API应用是如何搭建的,每个部分为什么要做,可以解决哪些问题,这样你对后端的基础知识就会建立起来。
框架搭建好后,主要是设计接口URL,然后编写处理逻辑,保证这一步设计的接口可以调整,可以接收数据。
数据存储阶段:与数据库接口对接
上一步我们构建了API接口,接收到采集的数据。然后,在这一步中,我们需要连接数据库,并将 采集 中的数据存储到数据库中。
数据库方面,选择对前端最友好的,属于NoSQL家族的文档数据库MongoDB。
这个数据库最大的特点就是存储的数据格式类似于JSON,操作就像在JS中调用函数,结合JOSN数据。我们很容易理解并开始使用前端。可以在实战过程中体验。优雅也。
数据存储阶段主要介绍数据库的基本信息和操作,包括以下几个方面:
这个阶段的关键是数据验证。在设计完数据库字段后,我们希望所有写入的数据都必须符合我们想要的数据格式。如果验证后不符合,我们可以补充或修改数据字段,或者干脆拒绝写入,这样可以保证数据的可靠性,避免不必要的数据清洗。
数据写入完成后,需要添加一些简单的查询和修改功能。因为要在写完数据后查看执行是否成功,可以查看一个列表来查看结果。
还需要修改功能。前端监控中一个很常见的需求就是计算用户的页面停留时间。我的计划是在用户进入某个页面时创建一条记录,然后在用户离开时修改该记录并添加一个结束时间字段,这需要修改功能。
最后但并非最不重要的一点是,许多人都在谈论如何清理数据。实际上,这取决于您在将数据存储在您面前时如何验证。如果确实可以存储无效数据,可以写一个清空数据的接口,自己写清空逻辑,定时执行。
查询统计阶段:数据查询和统计分析
经过一系列的准备,我们已经完成了API接口和数据写入的功能。假设我们有 采集 足够的数据并存储在数据库中,这个阶段就是充分利用这些数据的时候了。
这个阶段的主要任务是对数据进行检索和统计分析,基本上是“查询”操作。
这里的查询不仅仅是为了检查,如何检查,关系到我们采集到的数据能否得到有效利用。我的想法是从这两个方面入手:
当然,这只是笼统的说法。行为数据也将在一行中查询。例如,如果我想查看用户在某个时间做了什么,这就是精确搜索。还有异常数据的统计,比如异常接口的触发频率排名。
行为数据量会非常大,在用户使用系统的过程中会频繁生成并写入数据库。因此,在这类数据的大部分情况下,都是通过聚合查询的方式,从页数、时间等多个维度进行整体统计,最后得出一些百分比的结论。这些统计值可以大致反映产品的实际使用情况。
这里有个优化点,因为频繁的请求会增加接口的负担,所以一部分数据也可以在本地存储,达到一定数量后,一次性请求并存储接口。
异常数据对于开发者来说非常重要,对于我们定位和解决bug来说是天赐之物。与行为数据的多重统计不同,我们更关心异常数据的每一条记录的详细信息,让错误一目了然。
查询异常数据也比较简单。和普通的列表查询一样,只需要返回最新的异常数据即可。当然,我们排查问题后,也要把处理的异常标记为已处理,这样可以防止重复排查。
可以看出,这个阶段最重要的是做一个统计界面,为下一阶段图表展示的可视化做准备。
可视化阶段:最终数据图表展示
在最后阶段,我们开发了一个统计界面并找到了想要的数据结果。不幸的是,这些结果只有程序员才能理解,其他人可能无法理解。所以最后,为了更直观的反映数据,我们需要使用前端的可视化图表,让这些数据活起来。
在这个阶段,我们终于回到了最熟悉的前端领域。这个阶段的任务比较简单,比较顺利。基于React构建一个新的前端应用,访问上一步的统计界面,然后集成前端图表库,以图表的形式展示统计结果。
这个新应用是一个前端监控系统,真正需要展示给外界。供团队内部的开发人员或产品学生使用,方便他们实时查看产品产生的数据信息,解决自己的问题。
事实上,现阶段没有关键问题可谈。主要是选择一个好用的图表库并连接接口。还有各种类型的图表。需要考虑哪些数据适合哪些图表,根据实际情况做出判断。
最后,监控系统的前端页面和界面数据不是人人都能看到的,所以要有基本的登录页面和功能。做到这一点,这个阶段的任务就结束了。
报警阶段:发现异常立即报警通知
前一阶段,监控系统前端搭建完成,统计数据以图表形式展示后,整个监控系统基本可用。
但是还有另一种情况,就是用户在使用我们的产品时突然报错,错误信息也被写入了数据库。如果此时你不主动刷新页面,实际上你也不能一直刷新页面,那么我们根本不知道这个错误。
如果这是一个非常致命的bug,影响范围很广,我们甚至不知道这个bug是什么时候发生的,那会给我们带来很大的损失。
所以,为了保证我们能及时解决bug,告警通知的功能就显得非常重要了。它的作用是在出现异常的第一时间推送给开发者,让大家第一时间发现问题,然后以最快的速度解决,避免遗漏。
报警通知,现在一般的解决方案是连接钉钉或者企业微信的机器人,我们这里使用钉钉。使用哪个平台取决于您的主题所在的平台。比如我的团队主体在钉钉上,所以在发送报警通知时,可以直接用手机号@任意一个团队成员,实现更精准的提醒。
本部分是对 API 应用的补充。申请钉钉开发者权限后,访问API中的相关代码。
部署阶段:万事俱备,只等上线
前期我们完成了数据采集、API应用构建、数据存储、前端可视化展示、监控告警。整个前端监控系统功能齐全。最后一步是将所有的前端和后端数据库都在线部署,供大家访问。
部署主要是nginx解析、https配置、数据库安装、nodejs的应用部署等,这个阶段的内容会多一点运维。不过不用担心,这里我也会详细介绍关键操作。
系统上线后,你可以尝试在你的任意一个前端项目中通过API保存数据采集,按照第一篇中的采集方法,然后登录监控系统查看真实使用数据。
当这部分完成后,恭喜,一个小型的前端监控系统搭建完成。未来我们可以在此基础上继续扩展功能,慢慢让这个自研的监控系统变得更强大。
总结
本文介绍了前端监控系统的搭建流程,将整个流程分为几个阶段,简要介绍了每个阶段要做什么,有哪些关键问题,帮助大家理清搭建监控系统的思路,以及更多关于前端监控和构建JavaScript架构的信息,请关注脚本之家文章的其他相关话题!
最佳实践:DEDE采集规则过滤与替换
删除最常用的超链接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像这样填写它,那么链接的文本也会被删除{dede:trim替换=''}]*)>(.*){/dede:trim}
2、过滤JS调用广告,比如GG广告,添加这样的东西:{dede:trim=''}{/dede:trim}
3. 过滤 div 标签。这是非常重要的,如果不过滤,它可能会错放已发布的文章布局,并且当前大多数采集在遇到它之后都放错了位置。{dede:trim replace=''}
{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有时有必要像这样过滤:{dede:修剪替换=''}
(.*)
{/dede:trim}
4.其他过滤规则可以根据上述规则引入。
5.过滤经常使用的片段和关键字使用情况。{dede:trim replace=''}{/dede:trim}
6.更换简单。
{dede:trim replace ='被替换的单词'} 要替换的单词 {/dede:trim}
当然,采集的内容也需要搜索引擎收录,过滤和替换的目的是为了减少重复、伪原创,如何具体操作,这取决于个人的要求和喜好。
有关更多信息,请参阅 IT 技术专栏 查看全部
完整解决方案:JavaScript架构前端监控搭建过程步骤
目录
前言
上一篇介绍了为什么前端会有监控系统?前端监控系统有什么意义?有朋友看完后留言,想听听一些详细的实现。那么在本文中,我们将开始介绍前端监控是如何实现的。
如果还是不明白为什么,监控有什么用,推荐阅读上一篇文章文章:前端为什么不能没有监控系统?
在实施之前,首先要在脑海中有一个整体的背景,了解构建前端监控的具体流程步骤。因为前端监控系统其实是一个完整的全栈项目,不仅仅是前端,甚至主要的实现都围绕着数据。
当然,还有一点需要说明。本文的实现主要针对普通业务和中小厂自研方向。我看过大厂做的监控系统。它非常复杂和强大,动辄数以亿计的数据。最终走向了大数据的方向。我只介绍如何实现main函数,如何解决问题。
前端监控的构建过程分为以下几个阶段:
下面我来梳理一下各个阶段的关键实现思路。
采集阶段:采集什么数据?
监控的第一步是采集数据。有数据是监控的前提。
采集数据的含义是记录用户在使用产品过程中的真实操作。结合我们上一篇的分析,实际操作产生的数据可以分为两类:异常数据和行为数据。
我们先分析异常数据。项目中的异常一般可以分为两类,一类是前端异常,一类是接口异常。
前端异常
前端异常大致可以分为:
最重要的,也是我们遇到最多的,就是各种js代码执行异常。比如类型错误、引用错误等。这些异常大部分是由于我们的编码不精确造成的,所以采集这些异常有助于我们提高编码质量。
然后是 Promise 异常。Promise 是 ES6 最重要的属性之一。考验我们的js异步编程能力,主要体现在接口请求上。因此,这两部分的异常捕获非常关键。
另外,静态资源加载异常一般是指引用了一些html中的图片地址、第三方js地址等,由于各种原因不能正常加载,这个也要监控。
console.error 异常一般用在第三方前端框架中。它自定义了一些错误,会被console.error抛出。此类异常也需要被捕获。
至于跨域异常,我们经常会遇到这种情况,通常可以在前后端开发联调阶段发现。但不确定是后端的配置突然在线更改,导致前端跨域。为了安全起见,您还应该对其进行监控。
前端异常采集大概只有这5种,基本覆盖了前端90%以上的异常。
接口异常
接口异常属于后端异常,但是接口异常会直接导致前端页面错误。因此,此类异常是我们判断线上问题根源的重要依据。接口异常可以根据响应结果分类:
有时由于网络问题或服务器问题,前端发起请求后没有收到响应,请求被挂起。这次是无响应/超时响应异常。对于此类异常,我们可以设置最大请求时间,超时后主动断开请求,添加接口超时记录。
另外,其他类型的接口异常可以根据HTTP状态码或者后端返回的error_code等指定字段来判断。
不管是使用状态码还是其他判断方式,只要能区分异常类型,这个不是严格要求的。
4xx异常类型是请求异常,一般是前端传递的参数有问题,或者接口验证参数有问题。处理此类异常的关键是保存请求参数,这样可以方便前端排查。

5xx 错误是服务器内部处理的异常。此类异常的关键信息是报错时间和返回的异常描述。保存这些可以方便后端查找日志。
我认为权限不足也是一种重要的错误类型。因为有些管理系统的权限设计比较复杂,有时候界面突然莫名其妙无法调整,影响用户接下来的操作,也需要记录和跟踪。
行为数据
行为数据比较广泛,用户任何有意义的操作都可以定义为行为数据。
例如,当一个按钮被点击时,它在那里停留了多长时间,新功能的点击率,何时使用等等。自主研发的监控系统的优势之一是灵活性。您需要的任何有用信息都可以在此阶段进行设计。
这个阶段非常关键,是监控系统设计的核心,所以我写的很详细,这个阶段大家要多考虑采集哪些数据。后面的阶段都是基于这个设计的具体实现。
API阶段:构建上报数据的API接口
在上一阶段,采集数据计划已经准备好了。当 采集 数据到达时,接下来会上报数据。
说白了,数据上报就是通过调用API接口将数据传输出来,然后存入数据库。因此,这个阶段的任务是构建一个用于报告数据的API接口应用程序。
作为一名光荣的前端工程师,在开发接口时自然会选择属于 JS 家族的 Node.js。Node.js 目前有很多框架。我比较喜欢轻量简洁,什么都需要自己安装,所以选择了简洁经典的Express框架。
构建 API 应用程序要做的事情是:
还有一些细节需要处理。这个阶段对于后端基础薄弱的同学来说是一个很好的学习机会。
强烈建议前端的朋友掌握一些后端的基础知识,至少从简单的原理上了解是怎么回事。这个阶段主要是了解API应用是如何搭建的,每个部分为什么要做,可以解决哪些问题,这样你对后端的基础知识就会建立起来。
框架搭建好后,主要是设计接口URL,然后编写处理逻辑,保证这一步设计的接口可以调整,可以接收数据。
数据存储阶段:与数据库接口对接
上一步我们构建了API接口,接收到采集的数据。然后,在这一步中,我们需要连接数据库,并将 采集 中的数据存储到数据库中。
数据库方面,选择对前端最友好的,属于NoSQL家族的文档数据库MongoDB。
这个数据库最大的特点就是存储的数据格式类似于JSON,操作就像在JS中调用函数,结合JOSN数据。我们很容易理解并开始使用前端。可以在实战过程中体验。优雅也。
数据存储阶段主要介绍数据库的基本信息和操作,包括以下几个方面:
这个阶段的关键是数据验证。在设计完数据库字段后,我们希望所有写入的数据都必须符合我们想要的数据格式。如果验证后不符合,我们可以补充或修改数据字段,或者干脆拒绝写入,这样可以保证数据的可靠性,避免不必要的数据清洗。
数据写入完成后,需要添加一些简单的查询和修改功能。因为要在写完数据后查看执行是否成功,可以查看一个列表来查看结果。
还需要修改功能。前端监控中一个很常见的需求就是计算用户的页面停留时间。我的计划是在用户进入某个页面时创建一条记录,然后在用户离开时修改该记录并添加一个结束时间字段,这需要修改功能。
最后但并非最不重要的一点是,许多人都在谈论如何清理数据。实际上,这取决于您在将数据存储在您面前时如何验证。如果确实可以存储无效数据,可以写一个清空数据的接口,自己写清空逻辑,定时执行。
查询统计阶段:数据查询和统计分析
经过一系列的准备,我们已经完成了API接口和数据写入的功能。假设我们有 采集 足够的数据并存储在数据库中,这个阶段就是充分利用这些数据的时候了。
这个阶段的主要任务是对数据进行检索和统计分析,基本上是“查询”操作。
这里的查询不仅仅是为了检查,如何检查,关系到我们采集到的数据能否得到有效利用。我的想法是从这两个方面入手:

当然,这只是笼统的说法。行为数据也将在一行中查询。例如,如果我想查看用户在某个时间做了什么,这就是精确搜索。还有异常数据的统计,比如异常接口的触发频率排名。
行为数据量会非常大,在用户使用系统的过程中会频繁生成并写入数据库。因此,在这类数据的大部分情况下,都是通过聚合查询的方式,从页数、时间等多个维度进行整体统计,最后得出一些百分比的结论。这些统计值可以大致反映产品的实际使用情况。
这里有个优化点,因为频繁的请求会增加接口的负担,所以一部分数据也可以在本地存储,达到一定数量后,一次性请求并存储接口。
异常数据对于开发者来说非常重要,对于我们定位和解决bug来说是天赐之物。与行为数据的多重统计不同,我们更关心异常数据的每一条记录的详细信息,让错误一目了然。
查询异常数据也比较简单。和普通的列表查询一样,只需要返回最新的异常数据即可。当然,我们排查问题后,也要把处理的异常标记为已处理,这样可以防止重复排查。
可以看出,这个阶段最重要的是做一个统计界面,为下一阶段图表展示的可视化做准备。
可视化阶段:最终数据图表展示
在最后阶段,我们开发了一个统计界面并找到了想要的数据结果。不幸的是,这些结果只有程序员才能理解,其他人可能无法理解。所以最后,为了更直观的反映数据,我们需要使用前端的可视化图表,让这些数据活起来。
在这个阶段,我们终于回到了最熟悉的前端领域。这个阶段的任务比较简单,比较顺利。基于React构建一个新的前端应用,访问上一步的统计界面,然后集成前端图表库,以图表的形式展示统计结果。
这个新应用是一个前端监控系统,真正需要展示给外界。供团队内部的开发人员或产品学生使用,方便他们实时查看产品产生的数据信息,解决自己的问题。
事实上,现阶段没有关键问题可谈。主要是选择一个好用的图表库并连接接口。还有各种类型的图表。需要考虑哪些数据适合哪些图表,根据实际情况做出判断。
最后,监控系统的前端页面和界面数据不是人人都能看到的,所以要有基本的登录页面和功能。做到这一点,这个阶段的任务就结束了。
报警阶段:发现异常立即报警通知
前一阶段,监控系统前端搭建完成,统计数据以图表形式展示后,整个监控系统基本可用。
但是还有另一种情况,就是用户在使用我们的产品时突然报错,错误信息也被写入了数据库。如果此时你不主动刷新页面,实际上你也不能一直刷新页面,那么我们根本不知道这个错误。
如果这是一个非常致命的bug,影响范围很广,我们甚至不知道这个bug是什么时候发生的,那会给我们带来很大的损失。
所以,为了保证我们能及时解决bug,告警通知的功能就显得非常重要了。它的作用是在出现异常的第一时间推送给开发者,让大家第一时间发现问题,然后以最快的速度解决,避免遗漏。
报警通知,现在一般的解决方案是连接钉钉或者企业微信的机器人,我们这里使用钉钉。使用哪个平台取决于您的主题所在的平台。比如我的团队主体在钉钉上,所以在发送报警通知时,可以直接用手机号@任意一个团队成员,实现更精准的提醒。
本部分是对 API 应用的补充。申请钉钉开发者权限后,访问API中的相关代码。
部署阶段:万事俱备,只等上线
前期我们完成了数据采集、API应用构建、数据存储、前端可视化展示、监控告警。整个前端监控系统功能齐全。最后一步是将所有的前端和后端数据库都在线部署,供大家访问。
部署主要是nginx解析、https配置、数据库安装、nodejs的应用部署等,这个阶段的内容会多一点运维。不过不用担心,这里我也会详细介绍关键操作。
系统上线后,你可以尝试在你的任意一个前端项目中通过API保存数据采集,按照第一篇中的采集方法,然后登录监控系统查看真实使用数据。
当这部分完成后,恭喜,一个小型的前端监控系统搭建完成。未来我们可以在此基础上继续扩展功能,慢慢让这个自研的监控系统变得更强大。
总结
本文介绍了前端监控系统的搭建流程,将整个流程分为几个阶段,简要介绍了每个阶段要做什么,有哪些关键问题,帮助大家理清搭建监控系统的思路,以及更多关于前端监控和构建JavaScript架构的信息,请关注脚本之家文章的其他相关话题!
最佳实践:DEDE采集规则过滤与替换
删除最常用的超链接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像这样填写它,那么链接的文本也会被删除{dede:trim替换=''}]*)>(.*){/dede:trim}
2、过滤JS调用广告,比如GG广告,添加这样的东西:{dede:trim=''}{/dede:trim}
3. 过滤 div 标签。这是非常重要的,如果不过滤,它可能会错放已发布的文章布局,并且当前大多数采集在遇到它之后都放错了位置。{dede:trim replace=''}

{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有时有必要像这样过滤:{dede:修剪替换=''}
(.*)
{/dede:trim}

4.其他过滤规则可以根据上述规则引入。
5.过滤经常使用的片段和关键字使用情况。{dede:trim replace=''}{/dede:trim}
6.更换简单。
{dede:trim replace ='被替换的单词'} 要替换的单词 {/dede:trim}
当然,采集的内容也需要搜索引擎收录,过滤和替换的目的是为了减少重复、伪原创,如何具体操作,这取决于个人的要求和喜好。
有关更多信息,请参阅 IT 技术专栏
最新版本:原来这才是Api文档的完全体
采集交流 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-10-14 19:10
一、简介
在目前主流的前后端分离模式开发下,需要有一个好用的接口文档。
**PS:以下几点是实际开发场景中遇到并实现的痛点**。
在项目的开发过程中,接口文档的存在可以让前端和后端工程师保持统一的数据信息概念。例如:“项目需求的接口字段和参数字段。只要将请求返回的参数记录在文档中,前端和后端工程师就可以针对接口文档统一编写自己的逻辑在写代码的时候,统一命名后,各个代码中就不会出现需要的函数的前端请求接口命名与后端返回接口的命名信息不一致的情况,这样可以大大避免故障排查失败,快速定位问题。
一个好的界面文档肯定会更直观、更容易维护、更容易保存。这些基本属性。但是到了21世纪的今天,还是有界面文档还是用word文档或者excel等笔记本记录工具来记录的。这样,文档是可用的,但是在项目的不断迭代中,文档需要不断的维护和更新,投入了不必要的成本。在项目交接的场景中,也交付了大量的接口文档。但是,在基于人工维护编写文档时,自然会出现删除参数、复制错误等错误操作的错误,从而无法很好地保证文档的正确性。
2.apifox在线接口文档
如今,许多界面文档工具层出不穷,如swagger、yapi、Knife4j等。但它们或多或少都有一些缺点。比如我们后端同学最常用的swagger-ui,有以下痛点:
提交的参数为 JSON,无法格式化。如果参数错误,查找起来很麻烦。返回的结果不能折叠。阅读时间太长了。
swagger-ui 在界面数量增加的情况下非常难用,而且没有分类菜单。
在最近的技术社区中,发现了一个api接口工具Apifox。相当于一个集Postman + Swagger + Mock + JMeter于一体的工具。Apifox 的界面文档是我遇到过的最亲密的程序员之一。不仅解决了我遇到的开发痛点,接口文档也很强大。
2.1 如何生成在线接口文档 2.1.1 第一步
首先去Apifox官网根据你对应的系统下载对应的Apifox客户端。当然,直接使用网页版并不妨碍我们后续的步骤。
下载完成后,我们打开客户端或者网页登录。如果你是第一次使用,可以先注册一个账号再登录。第一次使用的同学会发现如下页面进入。
因为演示,我会直接使用当前的示例团队和里面的示例项目。点击示例项目进入Apifox,会看到演示中使用的宠物店的界面分组。
2.1.2 第二步
为了让学生更恰当地使用 Apifox 替代到自己的项目中。我决定更多地模拟我们的真实使用环境,我在我的服务器上部署了一个名为 jeetcg-Boot 的开源项目。本项目有自己的自定义接口文档,但是可以导出一些OpenApi和Markdown格式的文档,然后我可以使用导出的接口文档来演示如何慢慢连接到网上提供的Apifox文档。
现在的同学有没有类似swagger格式的文档也没关系,因为Apifox支持21种格式的导入方式,把你的数据转换成Apifox。但也有例外。比如我上面提到的当前项目没有文档,其实你也可以通过Apifox的新界面添加当前项目的请求参数等信息,让你的项目从现在开始。有自己的接口文档。所以这里我们主要关注生成在线文档的操作如何创建一个新的在线文档。,所以这里不再详细介绍新的界面。此处操作不是很好的同学可以点击这部分文档帮助进行参考。
然后我将我的jeetcg-boot项目的接口文件导出为一个OpenApi.json文件,通过Apifox的导入功能将我当前项目的接口转入Apifox
6
通过这么简单的步骤,我的项目界面就成功移植到了Apifox进行管理。
在这里我要表扬一下 Apifox 真的很漂亮的设计和舒适的排版,对于像我这样的颜值控。
2.1.3 第三步
这一步是我们目的的最后一步。确保我们的接口已经存在于项目中后,我们可以通过左侧的在线分享点击我们的新分享。
7
此时我们可以看到创建在线文档的信息表,需要填写接手当前项目的团队或其他小公司对于合作伙伴使用的这种场景,建议填写对应的匹配名称。密码访问可以为我们生成的在线文档提供一层加密保护,让不小心泄露的界面地址不会被其他人访问看到我们的界面设计等信息,所以这里要填写的小伙伴可以按照真实情况填写。过期时间可以决定我们当前生成的在线接口文档的过期时间。共享范围允许我们挑选和选择我们需要生成到在线接口文档的接口。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。
8
填写完所有信息后,我们可以点击保存,为我们的项目生成一个在线界面文档url。此时,我们复制当前生成的在线接口文档链接,打开即可找到我们的项目接口文档。
9
102.2 Apifox 的在线界面文档中的“魔力”是什么 2.2.1 文档中直接运行界面
细心的同学一定发现,选择一个界面后,在我们文档的右侧有一个运行按钮。单击该按钮将显示执行操作界面。点击发送后,我们可以看到返回的结果和我们的界面一模一样。返回响应的格式相同。调用正是我们在生成这个接口时选择使用的云mock环境,所以现在显示的数据是mock为我们生成的假数据。
但是,这对于获取文档的开发来说并不是太简单。可以直接在文档上测试当前接口是否满足要求,测试当前环境的接口状态是否正常。
在mock环境中调用的接口也方便前端程序员先开发后端,不会被后端同学卡住。
11
122.2.2 13种语言生成请求示例代码
在文档的中间,我们可以看到一些编程语言的非常明显的图标。它们是干什么用的??
13
作为一个前端程序员,我自然会用javascript来介绍给我的同学。点击 javascript 图标,我们发现下面有一行选项卡提供选择。相信文章之前也是前端程序员的同学们并不陌生。这些是js常用的请求方法,在每个方法的选项卡下选择编辑器。会有代码使用这个方法来调用当前接口。**当我第一次看到这个功能时,我惊呆了。有这么亲密的互动吗?? **
由于程序员的职业病,我们当然要测试生成的代码,他能跑吗?正确的。这里推荐你使用一些在线 IDE 来运行一些代码的方法。例如,流行的 stackblitz
我们把axios的代码复制到ide编辑器中,在线安装axios的库就可以在线运行了。
结果很明显,右边的打印和我们刚才跑的返回一模一样。这真的是牛肉。所以意味着这13种语言都可以生成自己的请求代码,在实际代码中验证当前接口请求的性能。
如果你想在这里测试更多的编程语言,那我就分享一个在线的ide小闪电,可以运行30多种语言。
2.2.3 生成模型代码
这个函数也是我很喜欢的一个函数,生成模型代码。主要是为返回的响应参数生成的模型代码。
比如我选择使用Typescript代码,那么它会自动生成一个带返回参数的typescript类型接口,这对于使用ts开发的前端同学来说是一个福音。不再需要一一复制请求返回的类型。现在可以直接复制粘贴到界面文档中,放入代码中。
当前代码生成模型的操作栏针对每种编程语言都有相应的配置开关。例如,对于 typescript,您可以打开仅生成类型定义,这将删除下面的转换代码。仅保留类型定义。并且还可以对运行时的json.parse的结果进行校验,确保我们返回的结果参数符合条件。
所以需要生成什么类型的模型代码就看同学们配置的需要了。
3. Apifox 在线分享接口文档的详细信息。这里我要说的是,我认为目前的这个接口文档确实是为了程序员的效率和易用性。
3.1.1 接口连接可直接点击复制:
3.1.2 文档整体布局
文档的整体布局是左右结构的,所以当我们的程序员在阅读文档的时候需要做一个试运行的时候,我们可以通过左右检查参数来检查是否有不符合要求的参数,这与顶部的swagger参数和底部的请求不同。需要上下移动,方便性大打折扣。
3.1.3 运行时批量编辑参数
在操作界面中,我们有时会有大量的请求参数,可能需要临时更改才能上厕所。表单中是否逐个更改是一件很痛苦的事情,而Apifox为开发者提供了批量编辑交互。更容易实现他们的目标
四、结尾
使用过 Apifox 后,相信你会或多或少对这款软件的细节和强大的功能印象深刻。因为一个软件工具的使命必须是为用户提供方便,处处简化用户的操作,让工作更有效率,这就是一个好工具的表现。
Apifox 确实有一点要说,它是一个有利于程序员的良心工具。
终极:吐血整理!顶级程序员的百宝箱来咯!| 原力计划
每个人都知道我是一个电子商务企业。在线界面多的在线问题如何排查?捕获数据包并查看数据。
JMeter
Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具
是的,它用于压力测试。如何模拟大量请求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平台使用的软件编程文档管理工具,可以浏览 API 文档,管理代码片段。Dash 自带丰富的 API 文档,涵盖各种主流编程语言和框架。
开发文档
上面的兄弟,不过这个不用下载,是在线的
数据夹
DataGrip 是 JetBrains 推出的数据库管理产品。对于 JetBrains,开发者必须熟悉它。IDEA和ReSharper都是这家公司的产品,用户体验非常好。
一开始,我只是用它来看看我的同事正在使用一个很酷的界面。后来发现功能也很好吃,突出文字等等。你可以挖掘很多功能。
视觉虚拟机
VisualVM 是 Netbeans 的一个配置文件子项目。JDK6.0 update 7已经收录,可以监控线程,内存情况,查看内存中方法和对象的CPU时间,已经被GC的对象,反向查看分配的栈(比如分配了哪些对象)到 100 个字符串对象)。
VisualVM 可以根据需要安装不同的插件。每个插件都有不同的关注点。有的主要监控GC,有的主要监控内存,还有的监控线程。
Iterm2
这是我用于日志故障排除的客户端工具。它还支持许多配置。可以直接ssh到跳板查看在线机器的状态等,还是需要在线排查的。
网*有道词典
有朋友想问帅青是什么情况,是不是有鬼畜混进来?
不,我们在开发它们时不知道很多单词,或者在命名它们时不知道单词的英文。仍然有必要检查它们。标准化的命名是你成为顶级大牛的第一步。你的名字全是A.B,C 当你的代码审核时,你的Leader会打电话给hr让你回家过年,然后再提交。新年来临之际,不要轻易尝试。
崇高的文本
这是一个文本记录的工具,也可以用来写代码,但是如果我们有IDE的话,它可以作为日常琐事记录的工具,临时文档处理的工具也是可以的,而且反正还是很有用的。
最近刚好有人才群里的人才打电话给我安利,给我做笔记和写博客的工具,说我的排版很好看。(我在飘)
安排!
印象笔记
这可以说是陪伴我大学到现在的一个工具。数了几千个文件,记录了生活中的小事,学了编程之后的很多东西。我在收录里面。
我不会和其他笔记比较,因为我一开始使用的那个从来没有被替换过。
泰波拉
Typora 是我一直在为其编写 Markdown 的工具。它易于使用,但也可以切换模式。你相信吗?打字机模式、对焦模式、音源模式总有一款适合你。
ipic
我使用 Typora 的图片床。Markdown复制图片是不是从本地地址进来的,发到外网就失效了。但是,这个基于 Typora 的工具,你复制进去的时候可以直接上传到互联网上。现在,你可以在任何你想要的平台上发布。
Md2All
每个人都很好奇我的降价如何看起来如此美丽。其实我写完markdown后,转成html,就用了上面的工具。
写完就在这里打出来然后发出去。打字花了很长时间,忍不住夸了帅C。
图像处理 Adobe Photoshop CC 2019
ps,众所周知,正常的图片处理啊用这个香味,没事帮美P拍照,说不定还能找个女朋友(又开始YY了)
Adobe Premiere Pro CC 2019
这可能是最常用的视频处理软件了,非常好用!!!
功能太丰富了,喘不过气来。缺点是学习成本有点高,入门很快。成为大神需要很多时间。
Adobe After Effects CC 2019
不知道你看了多少视频。视频的很多特效都是由此制作的。下面还有一个我的演示。
GIPHY 捕获
有时候人们文章不想用静态图片来表达,而是想录制Gif动画来写代码,那么这个软件真的好用。
视频播放 KMPlayer
其实帅C,我心里有一个玩家神器,快点播吧。
可惜没过多久,直播就过早地死掉了。我将使用以下播放软件播放自己的视频。
因为很多电脑自带的格式可能不支持,而且我喜欢剪辑视频,一直在用。
斗图
你有没有注意到我之前的很多 文章 表情实际上是在网上制作的?
碳
帅兵之前的文章里很多代码的图片都是这个网站生成的。有很多款式可供选择,非常漂亮。
代码LF
这个 网站 很有趣。如果你在写代码的时候不知道如何命名这些单词,可以去这里查看一下。他是GitHub的爬虫工具。看到大神之名,总会有想法。
注:我简单介绍一下上面的软件是做什么的,因为实在太多了,真正的功能还需要深挖。
总结
其实更香的工具太多了,这里就不一一介绍了,其实有一个很简单的方法,就是问,学,学。
我就是这样。看到Leader用什么工具,我问他是什么,好用吗?如何使用?
包括我写博客,其实才写了20多天。第一天准备写的时候,直接问三外(Java3y),你用什么开发工具,怎么用,包括他主要发布哪些平台,发布时间段,我会直接问。
他坐在我对面,因为我的猥亵而被迫说出真相,主要是因为最近有需要我为他写代码哈哈。
别人有这么多经验,会不会是软件不好?而且在使用过程中如果不知道,可以问问对方,是不是很香。
潺潺
我们先来看看人才交流群里一位人才提出的问题:
不知道大家还记得我之前写的幂等情况吗?
这就是下图中的情况。当我下单增加或减少 GMV 时,我会先去看看有没有流水。有的话就证明已经加了,我直接回。如果没有,请继续以下过程。
其实他提的问题很好,因为我们日常的开发是主从同步,读写分离,也就是说我们可能会加GMV,但是我们操作主库,他需要同步数据到奴隶图书馆,但是这个他在这个过程中被耽搁了。
这时候如果另一个系统重试订单号消息,你又进来了吗?你查看流水,发现没有流水,却以为自己没有加钱,进行了加钱的操作,结果耽误了。, 是不是加了两次。
正常开发中确实有,但是主从延迟应该是DBA(Database Administrator)考虑的,但是我说不能写有逻辑漏洞的代码,其实很简单,把他放到Redis中,设置一个时间约30分钟,可避免在此期间重复食用。如果延迟超过30分钟,问题已经很大了,DBA会知道的。
本文由吐血整理,大家吃好,记得给个赞哦!
原来的:
【结尾】
来吧,原力计划的升级版来了!2019年末,我们为您准备了一场交通盛宴!即日起,只要参与原力计划,文章达到要求,即可获得流量+现金的支持!
参与方式:发布原创文章时,在提交页面勾选原力计划即可参与。扫码戳详情↓ 查看全部
最新版本:原来这才是Api文档的完全体
一、简介
在目前主流的前后端分离模式开发下,需要有一个好用的接口文档。
**PS:以下几点是实际开发场景中遇到并实现的痛点**。
在项目的开发过程中,接口文档的存在可以让前端和后端工程师保持统一的数据信息概念。例如:“项目需求的接口字段和参数字段。只要将请求返回的参数记录在文档中,前端和后端工程师就可以针对接口文档统一编写自己的逻辑在写代码的时候,统一命名后,各个代码中就不会出现需要的函数的前端请求接口命名与后端返回接口的命名信息不一致的情况,这样可以大大避免故障排查失败,快速定位问题。
一个好的界面文档肯定会更直观、更容易维护、更容易保存。这些基本属性。但是到了21世纪的今天,还是有界面文档还是用word文档或者excel等笔记本记录工具来记录的。这样,文档是可用的,但是在项目的不断迭代中,文档需要不断的维护和更新,投入了不必要的成本。在项目交接的场景中,也交付了大量的接口文档。但是,在基于人工维护编写文档时,自然会出现删除参数、复制错误等错误操作的错误,从而无法很好地保证文档的正确性。
2.apifox在线接口文档
如今,许多界面文档工具层出不穷,如swagger、yapi、Knife4j等。但它们或多或少都有一些缺点。比如我们后端同学最常用的swagger-ui,有以下痛点:
提交的参数为 JSON,无法格式化。如果参数错误,查找起来很麻烦。返回的结果不能折叠。阅读时间太长了。
swagger-ui 在界面数量增加的情况下非常难用,而且没有分类菜单。
在最近的技术社区中,发现了一个api接口工具Apifox。相当于一个集Postman + Swagger + Mock + JMeter于一体的工具。Apifox 的界面文档是我遇到过的最亲密的程序员之一。不仅解决了我遇到的开发痛点,接口文档也很强大。
2.1 如何生成在线接口文档 2.1.1 第一步
首先去Apifox官网根据你对应的系统下载对应的Apifox客户端。当然,直接使用网页版并不妨碍我们后续的步骤。
下载完成后,我们打开客户端或者网页登录。如果你是第一次使用,可以先注册一个账号再登录。第一次使用的同学会发现如下页面进入。
因为演示,我会直接使用当前的示例团队和里面的示例项目。点击示例项目进入Apifox,会看到演示中使用的宠物店的界面分组。
2.1.2 第二步
为了让学生更恰当地使用 Apifox 替代到自己的项目中。我决定更多地模拟我们的真实使用环境,我在我的服务器上部署了一个名为 jeetcg-Boot 的开源项目。本项目有自己的自定义接口文档,但是可以导出一些OpenApi和Markdown格式的文档,然后我可以使用导出的接口文档来演示如何慢慢连接到网上提供的Apifox文档。
现在的同学有没有类似swagger格式的文档也没关系,因为Apifox支持21种格式的导入方式,把你的数据转换成Apifox。但也有例外。比如我上面提到的当前项目没有文档,其实你也可以通过Apifox的新界面添加当前项目的请求参数等信息,让你的项目从现在开始。有自己的接口文档。所以这里我们主要关注生成在线文档的操作如何创建一个新的在线文档。,所以这里不再详细介绍新的界面。此处操作不是很好的同学可以点击这部分文档帮助进行参考。
然后我将我的jeetcg-boot项目的接口文件导出为一个OpenApi.json文件,通过Apifox的导入功能将我当前项目的接口转入Apifox

6
通过这么简单的步骤,我的项目界面就成功移植到了Apifox进行管理。
在这里我要表扬一下 Apifox 真的很漂亮的设计和舒适的排版,对于像我这样的颜值控。
2.1.3 第三步
这一步是我们目的的最后一步。确保我们的接口已经存在于项目中后,我们可以通过左侧的在线分享点击我们的新分享。
7
此时我们可以看到创建在线文档的信息表,需要填写接手当前项目的团队或其他小公司对于合作伙伴使用的这种场景,建议填写对应的匹配名称。密码访问可以为我们生成的在线文档提供一层加密保护,让不小心泄露的界面地址不会被其他人访问看到我们的界面设计等信息,所以这里要填写的小伙伴可以按照真实情况填写。过期时间可以决定我们当前生成的在线接口文档的过期时间。共享范围允许我们挑选和选择我们需要生成到在线接口文档的接口。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。
8
填写完所有信息后,我们可以点击保存,为我们的项目生成一个在线界面文档url。此时,我们复制当前生成的在线接口文档链接,打开即可找到我们的项目接口文档。
9
102.2 Apifox 的在线界面文档中的“魔力”是什么 2.2.1 文档中直接运行界面
细心的同学一定发现,选择一个界面后,在我们文档的右侧有一个运行按钮。单击该按钮将显示执行操作界面。点击发送后,我们可以看到返回的结果和我们的界面一模一样。返回响应的格式相同。调用正是我们在生成这个接口时选择使用的云mock环境,所以现在显示的数据是mock为我们生成的假数据。
但是,这对于获取文档的开发来说并不是太简单。可以直接在文档上测试当前接口是否满足要求,测试当前环境的接口状态是否正常。
在mock环境中调用的接口也方便前端程序员先开发后端,不会被后端同学卡住。
11
122.2.2 13种语言生成请求示例代码
在文档的中间,我们可以看到一些编程语言的非常明显的图标。它们是干什么用的??
13
作为一个前端程序员,我自然会用javascript来介绍给我的同学。点击 javascript 图标,我们发现下面有一行选项卡提供选择。相信文章之前也是前端程序员的同学们并不陌生。这些是js常用的请求方法,在每个方法的选项卡下选择编辑器。会有代码使用这个方法来调用当前接口。**当我第一次看到这个功能时,我惊呆了。有这么亲密的互动吗?? **

由于程序员的职业病,我们当然要测试生成的代码,他能跑吗?正确的。这里推荐你使用一些在线 IDE 来运行一些代码的方法。例如,流行的 stackblitz
我们把axios的代码复制到ide编辑器中,在线安装axios的库就可以在线运行了。
结果很明显,右边的打印和我们刚才跑的返回一模一样。这真的是牛肉。所以意味着这13种语言都可以生成自己的请求代码,在实际代码中验证当前接口请求的性能。
如果你想在这里测试更多的编程语言,那我就分享一个在线的ide小闪电,可以运行30多种语言。
2.2.3 生成模型代码
这个函数也是我很喜欢的一个函数,生成模型代码。主要是为返回的响应参数生成的模型代码。
比如我选择使用Typescript代码,那么它会自动生成一个带返回参数的typescript类型接口,这对于使用ts开发的前端同学来说是一个福音。不再需要一一复制请求返回的类型。现在可以直接复制粘贴到界面文档中,放入代码中。
当前代码生成模型的操作栏针对每种编程语言都有相应的配置开关。例如,对于 typescript,您可以打开仅生成类型定义,这将删除下面的转换代码。仅保留类型定义。并且还可以对运行时的json.parse的结果进行校验,确保我们返回的结果参数符合条件。
所以需要生成什么类型的模型代码就看同学们配置的需要了。
3. Apifox 在线分享接口文档的详细信息。这里我要说的是,我认为目前的这个接口文档确实是为了程序员的效率和易用性。
3.1.1 接口连接可直接点击复制:
3.1.2 文档整体布局
文档的整体布局是左右结构的,所以当我们的程序员在阅读文档的时候需要做一个试运行的时候,我们可以通过左右检查参数来检查是否有不符合要求的参数,这与顶部的swagger参数和底部的请求不同。需要上下移动,方便性大打折扣。
3.1.3 运行时批量编辑参数
在操作界面中,我们有时会有大量的请求参数,可能需要临时更改才能上厕所。表单中是否逐个更改是一件很痛苦的事情,而Apifox为开发者提供了批量编辑交互。更容易实现他们的目标
四、结尾
使用过 Apifox 后,相信你会或多或少对这款软件的细节和强大的功能印象深刻。因为一个软件工具的使命必须是为用户提供方便,处处简化用户的操作,让工作更有效率,这就是一个好工具的表现。
Apifox 确实有一点要说,它是一个有利于程序员的良心工具。
终极:吐血整理!顶级程序员的百宝箱来咯!| 原力计划
每个人都知道我是一个电子商务企业。在线界面多的在线问题如何排查?捕获数据包并查看数据。
JMeter
Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具
是的,它用于压力测试。如何模拟大量请求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平台使用的软件编程文档管理工具,可以浏览 API 文档,管理代码片段。Dash 自带丰富的 API 文档,涵盖各种主流编程语言和框架。
开发文档
上面的兄弟,不过这个不用下载,是在线的
数据夹
DataGrip 是 JetBrains 推出的数据库管理产品。对于 JetBrains,开发者必须熟悉它。IDEA和ReSharper都是这家公司的产品,用户体验非常好。
一开始,我只是用它来看看我的同事正在使用一个很酷的界面。后来发现功能也很好吃,突出文字等等。你可以挖掘很多功能。
视觉虚拟机
VisualVM 是 Netbeans 的一个配置文件子项目。JDK6.0 update 7已经收录,可以监控线程,内存情况,查看内存中方法和对象的CPU时间,已经被GC的对象,反向查看分配的栈(比如分配了哪些对象)到 100 个字符串对象)。
VisualVM 可以根据需要安装不同的插件。每个插件都有不同的关注点。有的主要监控GC,有的主要监控内存,还有的监控线程。
Iterm2
这是我用于日志故障排除的客户端工具。它还支持许多配置。可以直接ssh到跳板查看在线机器的状态等,还是需要在线排查的。
网*有道词典
有朋友想问帅青是什么情况,是不是有鬼畜混进来?
不,我们在开发它们时不知道很多单词,或者在命名它们时不知道单词的英文。仍然有必要检查它们。标准化的命名是你成为顶级大牛的第一步。你的名字全是A.B,C 当你的代码审核时,你的Leader会打电话给hr让你回家过年,然后再提交。新年来临之际,不要轻易尝试。
崇高的文本
这是一个文本记录的工具,也可以用来写代码,但是如果我们有IDE的话,它可以作为日常琐事记录的工具,临时文档处理的工具也是可以的,而且反正还是很有用的。
最近刚好有人才群里的人才打电话给我安利,给我做笔记和写博客的工具,说我的排版很好看。(我在飘)
安排!

印象笔记
这可以说是陪伴我大学到现在的一个工具。数了几千个文件,记录了生活中的小事,学了编程之后的很多东西。我在收录里面。
我不会和其他笔记比较,因为我一开始使用的那个从来没有被替换过。
泰波拉
Typora 是我一直在为其编写 Markdown 的工具。它易于使用,但也可以切换模式。你相信吗?打字机模式、对焦模式、音源模式总有一款适合你。
ipic
我使用 Typora 的图片床。Markdown复制图片是不是从本地地址进来的,发到外网就失效了。但是,这个基于 Typora 的工具,你复制进去的时候可以直接上传到互联网上。现在,你可以在任何你想要的平台上发布。
Md2All
每个人都很好奇我的降价如何看起来如此美丽。其实我写完markdown后,转成html,就用了上面的工具。
写完就在这里打出来然后发出去。打字花了很长时间,忍不住夸了帅C。
图像处理 Adobe Photoshop CC 2019
ps,众所周知,正常的图片处理啊用这个香味,没事帮美P拍照,说不定还能找个女朋友(又开始YY了)
Adobe Premiere Pro CC 2019
这可能是最常用的视频处理软件了,非常好用!!!
功能太丰富了,喘不过气来。缺点是学习成本有点高,入门很快。成为大神需要很多时间。
Adobe After Effects CC 2019
不知道你看了多少视频。视频的很多特效都是由此制作的。下面还有一个我的演示。
GIPHY 捕获
有时候人们文章不想用静态图片来表达,而是想录制Gif动画来写代码,那么这个软件真的好用。
视频播放 KMPlayer
其实帅C,我心里有一个玩家神器,快点播吧。
可惜没过多久,直播就过早地死掉了。我将使用以下播放软件播放自己的视频。
因为很多电脑自带的格式可能不支持,而且我喜欢剪辑视频,一直在用。

斗图
你有没有注意到我之前的很多 文章 表情实际上是在网上制作的?
碳
帅兵之前的文章里很多代码的图片都是这个网站生成的。有很多款式可供选择,非常漂亮。
代码LF
这个 网站 很有趣。如果你在写代码的时候不知道如何命名这些单词,可以去这里查看一下。他是GitHub的爬虫工具。看到大神之名,总会有想法。
注:我简单介绍一下上面的软件是做什么的,因为实在太多了,真正的功能还需要深挖。
总结
其实更香的工具太多了,这里就不一一介绍了,其实有一个很简单的方法,就是问,学,学。
我就是这样。看到Leader用什么工具,我问他是什么,好用吗?如何使用?
包括我写博客,其实才写了20多天。第一天准备写的时候,直接问三外(Java3y),你用什么开发工具,怎么用,包括他主要发布哪些平台,发布时间段,我会直接问。
他坐在我对面,因为我的猥亵而被迫说出真相,主要是因为最近有需要我为他写代码哈哈。
别人有这么多经验,会不会是软件不好?而且在使用过程中如果不知道,可以问问对方,是不是很香。
潺潺
我们先来看看人才交流群里一位人才提出的问题:
不知道大家还记得我之前写的幂等情况吗?
这就是下图中的情况。当我下单增加或减少 GMV 时,我会先去看看有没有流水。有的话就证明已经加了,我直接回。如果没有,请继续以下过程。
其实他提的问题很好,因为我们日常的开发是主从同步,读写分离,也就是说我们可能会加GMV,但是我们操作主库,他需要同步数据到奴隶图书馆,但是这个他在这个过程中被耽搁了。
这时候如果另一个系统重试订单号消息,你又进来了吗?你查看流水,发现没有流水,却以为自己没有加钱,进行了加钱的操作,结果耽误了。, 是不是加了两次。
正常开发中确实有,但是主从延迟应该是DBA(Database Administrator)考虑的,但是我说不能写有逻辑漏洞的代码,其实很简单,把他放到Redis中,设置一个时间约30分钟,可避免在此期间重复食用。如果延迟超过30分钟,问题已经很大了,DBA会知道的。
本文由吐血整理,大家吃好,记得给个赞哦!
原来的:
【结尾】
来吧,原力计划的升级版来了!2019年末,我们为您准备了一场交通盛宴!即日起,只要参与原力计划,文章达到要求,即可获得流量+现金的支持!
参与方式:发布原创文章时,在提交页面勾选原力计划即可参与。扫码戳详情↓
文章采集api 完美:Datakit,真正的统一可观测性 Agent
采集交流 • 优采云 发表了文章 • 0 个评论 • 147 次浏览 • 2022-10-12 05:25
随着云和云原生的发展,越来越多的客户意识到“数据”的重要性,掀起了一波又一波的数据积累浪潮。
如今,国内外数据量很大采集器,但采集的能力大多是单一的。比如 Telegraf 只支持指标,Filebeat 只服务日志,OpenTelemetry 的 Collector 对非云原生组件不友好。需要大量安装 Exporter 插件。为了实现系统的可观察性,需要使用多个采集器,造成资源的浪费。
Datakit是目前唯一真正整合各种环境(传统环境,云/云原生)数据统一的平台采集,一个进程或者Daemonset Pod就可以实现全方位的数据采集,配置体验不错,开源且可扩展。本文将对Datakit相关功能进行全面介绍。
(DataKit 内部架构)
多维可观测性数据采集
Datakit 支持来自各种基础设施和技术栈的采集 Metrics、Logs、Traces 等数据,并对这些数据进行结构化处理。
1.实时基础设施对象
DataKit 支持从主机、容器、k8s、进程、云产品等所有基础设施对象的实时状态,一气呵成。例如:
(1) Datakit hostobject用于采集基本的主机信息,如硬件型号、基本资源消耗等。
(2)进程采集器可以监控系统中各种正在运行的进程,获取并分析进程运行时的各种指标,包括内存使用率、CPU时间、进程当前状态、进程监控的端口等..,并且根据进程运行时各种指标的信息,用户可以在观察云中配置相关的告警,以便用户了解进程的状态,当进程发生故障时,故障进程可以及时维护。
二、指标
相比Telegraf只能采集系列数据,DataKit涵盖的数据更全面采集类型,拥有海量技术栈指标采集能力,采集器配置更简单,数据质量更好.
3. 日志
针对日志数据的整体可观测性,提供了一种足够灵活多变的信息组合方式。正因为如此,相比指标和追踪,日志有更多的采集和处理方式,以适应不同的采集环境、架构和技术栈的场景。
从磁盘文件中获取日志
这是最原创的日志处理方式。无论是开发者还是传统的日志采集方案,一般都是先将日志直接写入磁盘文件。写入磁盘文件的日志具有以下特点:
(1) 顺序写入:一般的日志框架可以保证日志在磁盘文件中,保持时间的序列性
自动分片:由于磁盘日志文件是物理增量的,为了防止日志炸毁磁盘,一般的日志框架会自动进行分片,或者通过一些外部常驻脚本来实现日志分片
(2) 基于以上特性,DataKit 只需要跟踪这些文件的变化(即采集 最新更新),一旦写入日志,DataKit 就可以采集 到达,其部署也很简单,在日志采集器的conf中填写文件路径(或通配符路径)为采集即可。
通过调用环境API获取日志
这个采集方法目前主要针对容器环境下的stdout日志。这种日志需要容器(或Kubernetes Pod)中运行的应用程序将日志输出到stdout,然后通过Docker的日志接口,将对应的stdout的日志同步到DataKit。
远程推送日志到 DataKit
对于远程日志推送,主要是
(1) 开发者直接将应用日志推送到DataKit指定的服务中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持将日志发送到远程服务。
(2) 第三方平台日志访问
这种形式的特点是日志直接发送到DataKit,不需要把日志放在中间。
Sidecar 形式的日志采集
采集这个方法其实结合了磁盘日志采集和日志远程推送两种方法。具体来说就是在用户的Pod中添加一个兼容DataKit的Sidecar(即logfwd)。应用,采集方法如下:
4.链接跟踪
DataKit目前支持多种广泛使用的trace数据,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要将对应的数据地址指向Datakit即可。
5.终端行为
DataKit支持全面采集前端行为数据,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集网页或移动设备上报的用户访问监控数据。建议将 RUM 单独部署在公网上,不要与现有服务(如 Kubernetes 集群)一起部署。因为RUM接口上的流量可能非常大,集群内部的流量会受到干扰,集群内部一些可能的资源调度机制可能会影响RUM服务的运行。
通常,生产环境中的js文件会经过各种转换和压缩,与开发时的源代码有较大差异,不方便调试。如果需要在源代码中定位错误,则必须使用 sourcemap 文件。
DataKit支持将js对应的sourcemap文件压缩打包,命名为--.zip,上传到/data/rum/,从而实现上报的错误指标集数据自动转换 error_stack_source 字段并将其附加到指标集。
6. 云原生安全
SChecker插件,绝对安全的安全检查器,lua沙箱只读分析,支持300+安全事件发现,用户可以自定义自己的规则文件和lib库。
一般来说,运维过程中一项非常重要的工作就是检查系统、软件、日志等一系列状态。传统的解决方案往往是由工程师编写shell(bash)脚本来执行类似的工作,并使用一些远程脚本来执行类似的任务。管理工具实现集群管理。然而,这种方法实际上是非常危险的。由于系统检查操作中权限过多的问题,经常以root模式运行。一旦恶意脚本被执行,后果将是灾难性的。在实践中,恶意脚本有两种,一种是恶意命令,如rm -rf,另一种是数据窃取,如通过网络IO向外部泄露数据。
因此,Security Checker 希望提供一种新型的安全脚本方法(限制命令执行、限制本地 IO、限制网络 IO)来保证所有行为安全可控,Security Checker 将通过统一的网络模型在日志的形式采集事件。同时,Security Checker 将提供大量可更新的规则库脚本,包括对系统、容器、网络和安全的一系列检查。scheck 是安全检查器的缩写。
7、基于eBPF的网络监控
DataKit eBPF 采集器 支持采集主机/进程/容器的网络层 4/7 性能和异常数据。
eBPF采集器、采集主机网络TCP、UDP连接信息、Bash执行日志等。这个采集器主要包括两种:ebpf-net和ebpf-bash:
ebpf 网:
数据类别:网络
完整的解决方案:面向开源软件的自动化漏洞数据采集与处理技术研究
漏洞数据分散在数百个资源中,数据碎片化、无格式,导致采集不便、处理复杂。然而,人工构建的漏洞数据集样本类型简单、特征单一,难以支撑真实软件漏洞检测的研究。因此,软件安全领域缺乏大规模、真实、有效的漏洞数据集。针对这一问题,本文提出了一种开源软件漏洞数据自动化采集及处理系统,能够自动实现来自多源平台的采集补丁文件,进行冗余处理和一致性处理。得到一个缩减的数据集,进一步生成大量的漏洞样本。与现有研究相比,本文构建的系统可以采集更多源平台的漏洞数据,漏洞数据更丰富,样本质量更高。通过深度学习漏洞检测实验证明,本文在数据集上训练的模型在实际软件漏洞检测中更为有效。
该成果已在实验室github组织下开源,相关内容请访问。
背景和动机
在软件安全领域,漏洞检测技术是一个具有挑战性的问题。为了减少人工参与,提高漏洞的检测规模和检测速度,基于深度学习的漏洞检测模型应运而生。然而,漏洞检测领域缺乏大规模的、真实的漏洞数据集。一方面,目前公开的人工构建的数据集,如SARD数据集,只能作为学术研究的对象,对真实漏洞的研究辅助相对有限。漏洞检测不是很有效。另一方面,漏洞数据分散在数百个资源上,没有统一的访问渠道,而且这些数据是碎片化的、无格式的,这给数据采集和处理带来了挑战。此外,不同来源的漏洞数据质量参差不齐,其中一些是安全缺陷,不一定是漏洞补丁。传统的采集方法依赖安全专家通过人工分析进行过滤,耗时耗力、效率低、成本高。为了解决这些问题,本文构建了漏洞数据自动化采集处理系统,旨在总结漏洞数据的分布规律和内容特征,突破漏洞数据准确提取等关键点。自动过滤漏洞补丁链接。技术,解决自动化问题采集和多源漏洞补丁采集 大数据环境下海量异构的漏洞信息,从而实现构建大规模、高质量的漏洞数据集,为深度学习漏洞检测提供有效的训练数据,提高模型检测精度。设计与实现如图1所示。系统主要有三个模块: 1)Data采集模块,输入为美国国家漏洞数据库NVD和一般漏洞,输出为漏洞信息和补丁文件;2)数据处理模块,输入为多源采集的补丁文件,输出为处理后的简化补丁库;3)数据生成模块,输入为补丁库和上一步输出的开源项目的源代码,
图 1 系统架构图
在data采集模块中,我们对权威漏洞库NVD的数据进行解析提取,得到结构化的漏洞属性信息。进一步系统分析研究主流开源软件的漏洞参考链接,找出存在漏洞的平台链接,获取不同安全发布平台的漏洞补丁文件,从而获取漏洞样本,为深度学习漏洞检测提供数据支持研究。. 我们提出了一种基于多源补丁的数据自动化采集 模型,通过三种方法自动化采集补丁。首先是从补丁的安全漏洞公告平台获取补丁,软件厂商自己的漏洞公告平台,和代码管理仓库。在对数百个补丁发布平台进行系统分析总结后,总结出20多种补丁自动化。采集网站,如图2。二是通过“CVE”过滤GitHub的历史修改Commits " 关键词,查找CVE的修改记录,自动过滤历史修改。三是在bug追踪平台Bugzilla的NVD Reference中搜索与CVE匹配的bugid,得到对应的bug修复文件或补丁。
图2 补丁源平台
在数据处理模块中,我们系统地分析了多源补丁的结构和格式,总结了标准的补丁文件结构和内容信息,并对通过多种采集方法得到的补丁文件进行了合并和去冗余。相同软件版本冗余如图3,不同版本软件冗余如图4。我们提出了一套基于多种信息的补丁有效性评估机制,并结合提取的漏洞文件名,函数名和补丁源平台,判断补丁文件和漏洞的相关性。如果补丁是直接针对漏洞功能的补丁,则认为是最准确的类型1;如果补丁是针对漏洞文件的补丁,它被认为是下一个准确的类型2;如果补丁无法判断是打漏洞函数还是漏洞文件,则可以判断补丁是针对CVE的,则为Type 3;如果不能通过现有信息直接判断,需要进一步人工处理,则暂按第4类处理。
图 3 相同软件版本的补丁冗余
图 4 不同软件版本的补丁冗余
在数据生成模块中,我们将补丁文件与代码库进行匹配,以获取函数级别和文件级别的细粒度漏洞样本。由于源代码漏洞数据集均为线性文本形式,无法反映代码程序的控制依赖信息和层次结构信息,缺乏程序语义与漏洞特征的关系,难以获得准确的语法结构信息通过进一步分析。具有更多语义信息的中间语言形式的漏洞数据可以提供更全面、更直接的代码表示,提高漏洞检测模型的检测能力和准确性。本模块搭建各版本主流软件的编译环境,查找编译漏洞文件所需的头文件、库文件等依赖项,并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。
表 1 数据集统计
采用基于深度学习的漏洞检测框架 SySeVR() 训练最有效的模型 BGRU。实验一是原创数据集在真实漏洞数据NVD上的检测结果。原创数据集有14000个SARD程序和1591个NVD程序,包括13906个SADR易受攻击程序(包括易受攻击的函数和修补函数),94个非易受攻击程序,874个NVD易受攻击程序,717个无bug程序。实验2使用一个新的数据集,使用原创数据集中来自SARD的数据集,将部分NVD数据集替换为本文构建的6847个易受攻击程序和6573个非易受攻击程序,并在真实数据集上进行测试软件漏洞数据集 NVD。测试结果如表2所示。
表2 漏洞检测实验结果对比
可以看出,用系统构建的数据集训练的模型在真实数据集的漏洞检测方面表现更好。这体现在假阴性率和假阳性率的降低,以及准确率、准确率和召回率的提高上。这是因为在模型训练中加入了大量真实的软件漏洞数据,提供了丰富的漏洞样本,使得模型可以用于漏洞特征进行更全面的学习。 查看全部
文章采集api 完美:Datakit,真正的统一可观测性 Agent
随着云和云原生的发展,越来越多的客户意识到“数据”的重要性,掀起了一波又一波的数据积累浪潮。
如今,国内外数据量很大采集器,但采集的能力大多是单一的。比如 Telegraf 只支持指标,Filebeat 只服务日志,OpenTelemetry 的 Collector 对非云原生组件不友好。需要大量安装 Exporter 插件。为了实现系统的可观察性,需要使用多个采集器,造成资源的浪费。
Datakit是目前唯一真正整合各种环境(传统环境,云/云原生)数据统一的平台采集,一个进程或者Daemonset Pod就可以实现全方位的数据采集,配置体验不错,开源且可扩展。本文将对Datakit相关功能进行全面介绍。
(DataKit 内部架构)
多维可观测性数据采集
Datakit 支持来自各种基础设施和技术栈的采集 Metrics、Logs、Traces 等数据,并对这些数据进行结构化处理。
1.实时基础设施对象
DataKit 支持从主机、容器、k8s、进程、云产品等所有基础设施对象的实时状态,一气呵成。例如:
(1) Datakit hostobject用于采集基本的主机信息,如硬件型号、基本资源消耗等。
(2)进程采集器可以监控系统中各种正在运行的进程,获取并分析进程运行时的各种指标,包括内存使用率、CPU时间、进程当前状态、进程监控的端口等..,并且根据进程运行时各种指标的信息,用户可以在观察云中配置相关的告警,以便用户了解进程的状态,当进程发生故障时,故障进程可以及时维护。
二、指标
相比Telegraf只能采集系列数据,DataKit涵盖的数据更全面采集类型,拥有海量技术栈指标采集能力,采集器配置更简单,数据质量更好.
3. 日志
针对日志数据的整体可观测性,提供了一种足够灵活多变的信息组合方式。正因为如此,相比指标和追踪,日志有更多的采集和处理方式,以适应不同的采集环境、架构和技术栈的场景。
从磁盘文件中获取日志

这是最原创的日志处理方式。无论是开发者还是传统的日志采集方案,一般都是先将日志直接写入磁盘文件。写入磁盘文件的日志具有以下特点:
(1) 顺序写入:一般的日志框架可以保证日志在磁盘文件中,保持时间的序列性
自动分片:由于磁盘日志文件是物理增量的,为了防止日志炸毁磁盘,一般的日志框架会自动进行分片,或者通过一些外部常驻脚本来实现日志分片
(2) 基于以上特性,DataKit 只需要跟踪这些文件的变化(即采集 最新更新),一旦写入日志,DataKit 就可以采集 到达,其部署也很简单,在日志采集器的conf中填写文件路径(或通配符路径)为采集即可。
通过调用环境API获取日志
这个采集方法目前主要针对容器环境下的stdout日志。这种日志需要容器(或Kubernetes Pod)中运行的应用程序将日志输出到stdout,然后通过Docker的日志接口,将对应的stdout的日志同步到DataKit。
远程推送日志到 DataKit
对于远程日志推送,主要是
(1) 开发者直接将应用日志推送到DataKit指定的服务中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持将日志发送到远程服务。
(2) 第三方平台日志访问
这种形式的特点是日志直接发送到DataKit,不需要把日志放在中间。
Sidecar 形式的日志采集
采集这个方法其实结合了磁盘日志采集和日志远程推送两种方法。具体来说就是在用户的Pod中添加一个兼容DataKit的Sidecar(即logfwd)。应用,采集方法如下:

4.链接跟踪
DataKit目前支持多种广泛使用的trace数据,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要将对应的数据地址指向Datakit即可。
5.终端行为
DataKit支持全面采集前端行为数据,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集网页或移动设备上报的用户访问监控数据。建议将 RUM 单独部署在公网上,不要与现有服务(如 Kubernetes 集群)一起部署。因为RUM接口上的流量可能非常大,集群内部的流量会受到干扰,集群内部一些可能的资源调度机制可能会影响RUM服务的运行。
通常,生产环境中的js文件会经过各种转换和压缩,与开发时的源代码有较大差异,不方便调试。如果需要在源代码中定位错误,则必须使用 sourcemap 文件。
DataKit支持将js对应的sourcemap文件压缩打包,命名为--.zip,上传到/data/rum/,从而实现上报的错误指标集数据自动转换 error_stack_source 字段并将其附加到指标集。
6. 云原生安全
SChecker插件,绝对安全的安全检查器,lua沙箱只读分析,支持300+安全事件发现,用户可以自定义自己的规则文件和lib库。
一般来说,运维过程中一项非常重要的工作就是检查系统、软件、日志等一系列状态。传统的解决方案往往是由工程师编写shell(bash)脚本来执行类似的工作,并使用一些远程脚本来执行类似的任务。管理工具实现集群管理。然而,这种方法实际上是非常危险的。由于系统检查操作中权限过多的问题,经常以root模式运行。一旦恶意脚本被执行,后果将是灾难性的。在实践中,恶意脚本有两种,一种是恶意命令,如rm -rf,另一种是数据窃取,如通过网络IO向外部泄露数据。
因此,Security Checker 希望提供一种新型的安全脚本方法(限制命令执行、限制本地 IO、限制网络 IO)来保证所有行为安全可控,Security Checker 将通过统一的网络模型在日志的形式采集事件。同时,Security Checker 将提供大量可更新的规则库脚本,包括对系统、容器、网络和安全的一系列检查。scheck 是安全检查器的缩写。
7、基于eBPF的网络监控
DataKit eBPF 采集器 支持采集主机/进程/容器的网络层 4/7 性能和异常数据。
eBPF采集器、采集主机网络TCP、UDP连接信息、Bash执行日志等。这个采集器主要包括两种:ebpf-net和ebpf-bash:
ebpf 网:
数据类别:网络
完整的解决方案:面向开源软件的自动化漏洞数据采集与处理技术研究
漏洞数据分散在数百个资源中,数据碎片化、无格式,导致采集不便、处理复杂。然而,人工构建的漏洞数据集样本类型简单、特征单一,难以支撑真实软件漏洞检测的研究。因此,软件安全领域缺乏大规模、真实、有效的漏洞数据集。针对这一问题,本文提出了一种开源软件漏洞数据自动化采集及处理系统,能够自动实现来自多源平台的采集补丁文件,进行冗余处理和一致性处理。得到一个缩减的数据集,进一步生成大量的漏洞样本。与现有研究相比,本文构建的系统可以采集更多源平台的漏洞数据,漏洞数据更丰富,样本质量更高。通过深度学习漏洞检测实验证明,本文在数据集上训练的模型在实际软件漏洞检测中更为有效。
该成果已在实验室github组织下开源,相关内容请访问。
背景和动机
在软件安全领域,漏洞检测技术是一个具有挑战性的问题。为了减少人工参与,提高漏洞的检测规模和检测速度,基于深度学习的漏洞检测模型应运而生。然而,漏洞检测领域缺乏大规模的、真实的漏洞数据集。一方面,目前公开的人工构建的数据集,如SARD数据集,只能作为学术研究的对象,对真实漏洞的研究辅助相对有限。漏洞检测不是很有效。另一方面,漏洞数据分散在数百个资源上,没有统一的访问渠道,而且这些数据是碎片化的、无格式的,这给数据采集和处理带来了挑战。此外,不同来源的漏洞数据质量参差不齐,其中一些是安全缺陷,不一定是漏洞补丁。传统的采集方法依赖安全专家通过人工分析进行过滤,耗时耗力、效率低、成本高。为了解决这些问题,本文构建了漏洞数据自动化采集处理系统,旨在总结漏洞数据的分布规律和内容特征,突破漏洞数据准确提取等关键点。自动过滤漏洞补丁链接。技术,解决自动化问题采集和多源漏洞补丁采集 大数据环境下海量异构的漏洞信息,从而实现构建大规模、高质量的漏洞数据集,为深度学习漏洞检测提供有效的训练数据,提高模型检测精度。设计与实现如图1所示。系统主要有三个模块: 1)Data采集模块,输入为美国国家漏洞数据库NVD和一般漏洞,输出为漏洞信息和补丁文件;2)数据处理模块,输入为多源采集的补丁文件,输出为处理后的简化补丁库;3)数据生成模块,输入为补丁库和上一步输出的开源项目的源代码,
图 1 系统架构图
在data采集模块中,我们对权威漏洞库NVD的数据进行解析提取,得到结构化的漏洞属性信息。进一步系统分析研究主流开源软件的漏洞参考链接,找出存在漏洞的平台链接,获取不同安全发布平台的漏洞补丁文件,从而获取漏洞样本,为深度学习漏洞检测提供数据支持研究。. 我们提出了一种基于多源补丁的数据自动化采集 模型,通过三种方法自动化采集补丁。首先是从补丁的安全漏洞公告平台获取补丁,软件厂商自己的漏洞公告平台,和代码管理仓库。在对数百个补丁发布平台进行系统分析总结后,总结出20多种补丁自动化。采集网站,如图2。二是通过“CVE”过滤GitHub的历史修改Commits " 关键词,查找CVE的修改记录,自动过滤历史修改。三是在bug追踪平台Bugzilla的NVD Reference中搜索与CVE匹配的bugid,得到对应的bug修复文件或补丁。

图2 补丁源平台
在数据处理模块中,我们系统地分析了多源补丁的结构和格式,总结了标准的补丁文件结构和内容信息,并对通过多种采集方法得到的补丁文件进行了合并和去冗余。相同软件版本冗余如图3,不同版本软件冗余如图4。我们提出了一套基于多种信息的补丁有效性评估机制,并结合提取的漏洞文件名,函数名和补丁源平台,判断补丁文件和漏洞的相关性。如果补丁是直接针对漏洞功能的补丁,则认为是最准确的类型1;如果补丁是针对漏洞文件的补丁,它被认为是下一个准确的类型2;如果补丁无法判断是打漏洞函数还是漏洞文件,则可以判断补丁是针对CVE的,则为Type 3;如果不能通过现有信息直接判断,需要进一步人工处理,则暂按第4类处理。
图 3 相同软件版本的补丁冗余
图 4 不同软件版本的补丁冗余

在数据生成模块中,我们将补丁文件与代码库进行匹配,以获取函数级别和文件级别的细粒度漏洞样本。由于源代码漏洞数据集均为线性文本形式,无法反映代码程序的控制依赖信息和层次结构信息,缺乏程序语义与漏洞特征的关系,难以获得准确的语法结构信息通过进一步分析。具有更多语义信息的中间语言形式的漏洞数据可以提供更全面、更直接的代码表示,提高漏洞检测模型的检测能力和准确性。本模块搭建各版本主流软件的编译环境,查找编译漏洞文件所需的头文件、库文件等依赖项,并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。
表 1 数据集统计
采用基于深度学习的漏洞检测框架 SySeVR() 训练最有效的模型 BGRU。实验一是原创数据集在真实漏洞数据NVD上的检测结果。原创数据集有14000个SARD程序和1591个NVD程序,包括13906个SADR易受攻击程序(包括易受攻击的函数和修补函数),94个非易受攻击程序,874个NVD易受攻击程序,717个无bug程序。实验2使用一个新的数据集,使用原创数据集中来自SARD的数据集,将部分NVD数据集替换为本文构建的6847个易受攻击程序和6573个非易受攻击程序,并在真实数据集上进行测试软件漏洞数据集 NVD。测试结果如表2所示。
表2 漏洞检测实验结果对比
可以看出,用系统构建的数据集训练的模型在真实数据集的漏洞检测方面表现更好。这体现在假阴性率和假阳性率的降低,以及准确率、准确率和召回率的提高上。这是因为在模型训练中加入了大量真实的软件漏洞数据,提供了丰富的漏洞样本,使得模型可以用于漏洞特征进行更全面的学习。
实用文章:【php 带cookie采集某页面】的更多相关文章
采集交流 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-10-11 21:20
如果在基于 vue 的 webpack 基架开发中使用代理转发,结果浏览器在没有 cookie 的情况下发出请求,导致登录始终使会话失败,该怎么办?
环境:有2个业务接口需要转发到82台服务器:/用户/getCode.do.do./user/doLogin.do现象:使用以上两个接口实现用户登录功能,首先显示登录页面,调用:/user/getCode.do获取验证码,然后在用户界面中输入用户名。点击登录后调用密码和验证码: /用户/do登录接口实现登录.结果: /用户/do登录后台始终找不到验证码,因为浏览器没有将 JSE 放入 cookie 中...
教程:python爬虫之 requests实战之网页采集器
今天继续我们的爬虫学习,采集器学习一个请求实用的网页:以搜狗主页为例
代码的设计步骤:
我们遵循以下设计过程来开发Web采集器:
(1) UA伪装:将相应的用户代理封装到字典中
在这里,添加了一些知识:
UA:用户代理(请求运营商的身份)
)。
UA检测:服务器网站门户检测到相应请求载体的身份,如果是浏览器,则为正常请求,否则很可能拒绝请求
UA伪装:使爬虫的请求向量身份伪装成某个浏览器
(2) 发起请求,get 模式返回响应对象
(3)获取响应数据,文本以字符串的形式返回响应数据
(4) 数据的持久存储
下面,附加“我的代码”部分:
import requests
'''
网页采集器
UA:User-Agent(请求载体的身份标识)
UA检测:门户网站的服务器会检测对应请求载体的身份标识,如果是浏览器则说明是一个正常请求,否则很有可能拒绝该请求
UA伪装:让爬虫对应的请求载体身份标识伪装成某一个浏览器
'''
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典内
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.sogou.com/web'
# 2.发起请求,get方式会返回一个响应对象
#处理url携带的参数:封装到字典内
kw = input('enter a word:')
param = {
'query':kw
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
# 3.获取响应数据,text返回的是字符串形式的响应数据
page_text = response.text
fileName = kw+'.html'
# 4.持久化存储
<p>
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,"保存成功!!!")</p>
运行python代码,我输入“华庄品”,然后生成华庄品.html文件
华庄品文件.html详细代码为:
化妆品生产许可信息管理系统服务平台
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部许可证】【业务办理】
许可证编号
企业名称
社会信用代码
所属省份
生产类别
<p>
发证日期
企业名称
许可证编号
发证机关 有效期至
本站由国家药品监督管理局主办
版权所有 未经许可禁止转载或建立镜像 Copyright © NMPA All Rights Reserved
</p> 查看全部
实用文章:【php 带cookie采集某页面】的更多相关文章

如果在基于 vue 的 webpack 基架开发中使用代理转发,结果浏览器在没有 cookie 的情况下发出请求,导致登录始终使会话失败,该怎么办?

环境:有2个业务接口需要转发到82台服务器:/用户/getCode.do.do./user/doLogin.do现象:使用以上两个接口实现用户登录功能,首先显示登录页面,调用:/user/getCode.do获取验证码,然后在用户界面中输入用户名。点击登录后调用密码和验证码: /用户/do登录接口实现登录.结果: /用户/do登录后台始终找不到验证码,因为浏览器没有将 JSE 放入 cookie 中...
教程:python爬虫之 requests实战之网页采集器
今天继续我们的爬虫学习,采集器学习一个请求实用的网页:以搜狗主页为例
代码的设计步骤:
我们遵循以下设计过程来开发Web采集器:
(1) UA伪装:将相应的用户代理封装到字典中
在这里,添加了一些知识:
UA:用户代理(请求运营商的身份)
)。
UA检测:服务器网站门户检测到相应请求载体的身份,如果是浏览器,则为正常请求,否则很可能拒绝请求
UA伪装:使爬虫的请求向量身份伪装成某个浏览器
(2) 发起请求,get 模式返回响应对象
(3)获取响应数据,文本以字符串的形式返回响应数据
(4) 数据的持久存储
下面,附加“我的代码”部分:
import requests
'''
网页采集器
UA:User-Agent(请求载体的身份标识)
UA检测:门户网站的服务器会检测对应请求载体的身份标识,如果是浏览器则说明是一个正常请求,否则很有可能拒绝该请求
UA伪装:让爬虫对应的请求载体身份标识伪装成某一个浏览器
'''
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典内
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.sogou.com/web'
# 2.发起请求,get方式会返回一个响应对象
#处理url携带的参数:封装到字典内
kw = input('enter a word:')
param = {
'query':kw
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
# 3.获取响应数据,text返回的是字符串形式的响应数据
page_text = response.text
fileName = kw+'.html'
# 4.持久化存储
<p>

with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,"保存成功!!!")</p>
运行python代码,我输入“华庄品”,然后生成华庄品.html文件
华庄品文件.html详细代码为:
化妆品生产许可信息管理系统服务平台
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部许可证】【业务办理】
许可证编号
企业名称
社会信用代码
所属省份
生产类别
<p>

发证日期
企业名称
许可证编号
发证机关 有效期至
本站由国家药品监督管理局主办
版权所有 未经许可禁止转载或建立镜像 Copyright © NMPA All Rights Reserved
</p>
干货:wordpress子比主题免费文章批量翻译工具
采集交流 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-10-10 18:23
wordpress子主题文章翻译可以让我们批量对需要翻译的文章进行中英文翻译,一键自动发布到我们对应的栏目。翻译不仅支持中英文,还支持日文、泰文、阿拉伯文、德文等多种语言。翻译插件对接百度翻译、有道翻译、谷歌翻译等API。
wordpress子主题文章翻译插件对接多家大厂翻译接口,自带翻译接口。无论是文章批量翻译还是语言之间的来回翻译,都可以一键点击,批量操作。WordPress子主题文章翻译插件支持各类cms,不仅WordPress、zblog、易友cms等各类cms都可以轻松对接。
WordPress子主题文章翻译插件支持全网内容采集、批量翻译、文章伪原创发布。想象一下使用一个wordpress子主题文章翻译插件,导入一个关键词列表,然后让AI翻译写出我们网站需要的原创文章。
搜索引擎正在识别由人工智能翻译编写的内容。这包括由人工智能或机器学习生成的内容。搜索引擎政策更新是为了打击那些使用人工智能以欺骗搜索引擎算法的方式翻译书面内容的人。这种类型的内容通常被设计为在搜索结果中排名靠前,但与手工翻译的内容质量不同。
搜索引擎表示,在确定内容是合成的还是操纵的时,它会考虑许多因素。这包括使用“旋转”技术生成相同内容的多个版本,以及使用人工智能生成旨在欺骗搜索引擎算法的文本。可能会对发现发布此类内容的 网站 采取行动,包括从搜索结果中删除。这是打击那些使用人工智能玩系统的人的重要一步。
毫无疑问,人工智能 (AI) 正在彻底改变内容写作领域。然而,人工智能书面内容的使用增加也可能产生潜在的问题。一个潜在的问题是,由 AI 翻译人员编写的内容可能会变得过于公式化和重复。随着人工智能算法变得越来越复杂,它们将能够更有效地识别数据中的模式。随着算法识别和复制成功的模式,这可能导致由人工智能翻译编写的内容变得越来越公式化。另一个潜在问题是 AI 翻译人员编写的内容可能是非个人的。
随着 AI 越来越多地参与到内容翻译写作过程中,WordPress 字幕可能会失去人类翻译写作的温暖和个性。最后,人工智能翻译的内容有可能被用来操纵公众舆论。随着人工智能在理解和复制人类情感方面变得更好,它可以用来翻译为引发某种情感反应而编写的内容。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,WordPress 子主题越来越多地使用人工智能来翻译可能会产生潜在问题的内容。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。
技术文章:谷歌seo特点技巧(网站google搜索优化)
如何优化谷歌排名?谷歌排名优化有哪些网站要求?
中国是外贸出口大国。最近有很多出口企业问我们对谷歌排名优化有什么要求?什么是谷歌排名优化?哪个品牌最适合谷歌排名优化?下面小编将为您解答这个问题:
疫情影响下,外贸企业迎难而上,求创新求变,数千家传统外贸企业伸出援手,提质增效。在客户开发和营销方面,外贸企业利用大数据精准营销工具、B2B平台、线上展会等方式,开发、推广、引流客户,加速数字化转型。
优易华拥有超过15年的互联网营销经验,让优易华拥有丰富的海外数字营销经验,积累了大量的营销资源。该公司是谷歌认证的合作伙伴,谷歌搜索引擎优化是主要项目之一。
谷歌排名优化说明及详情:
1、谷歌排名优化的最大优势是没有各个引擎的独立性。即使你只要求优化百度,结果在百度、谷歌等各大搜索引擎中都会有不错的排名,而SEO只能在一个搜索引擎中使用。好的排名显示在网站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都会有好的排名,从而减少投入和投入。
2. 对于每个类别,列出相关的 文章。下面我们用问答的方式来说明什么是谷歌排名优化?如何学习谷歌排名优化?如何进行谷歌排名优化?将每一页的相关问题归纳为两类:问题大师关键词的集合列表,以及类似问题的列表。从根本上说,它清理了所有相关的关键词,让页面有更好的用户体验,让谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方显示类似的文章,有利于谷歌排名优化和推广,可以打开。另外,文章发布后,相关的关键词也可以补充评论功能。与谷歌不同,百度的排名规则以PR值作为明确的标准。但是百度也有一套算法对每个网站进行加权,因为没有标准,就没有排名的依据。这个事实是非常真实的。因此,在SEO实践中,网站获得更高的PR值,是每个SEO人追求的目标。但是要获得高PR值,需要一些高质量的反向链接或者足够多的反向链接。
4、提高网站的曝光度。如果一个网站做SEO,你在搜索引擎中的排名就会上升,更多的人会点击你的网站。而且你会受益于不止一个搜索引擎,百度、谷歌、雅虎、搜狗等各种搜索引擎一般都有数据展示。作为一名员工,编写观众喜欢的内容并不难。加入谷歌也是考虑这些因素的时候。一开始可能会很麻烦,但有了这些 SEO 技巧,你很快就会得到意想不到的结果。
如何优化谷歌排名
一:隐藏文字/隐藏链接
一般指网页专为搜索引擎设计,但普通访问者看不到的文字内容或链接。在各种隐藏技术中,最常见的是将文本或链接文本的字体颜色设置为与背景颜色相同或非常接近。
不可见/隐藏文本
目的是在不影响网站美观的情况下,增加收录大量关键词的页面的关键词相关性分数,从而提高搜索引擎排名。
不可见/隐藏链接
它旨在通过在不影响 网站 的美观性的情况下在其他页面上添加指向目标优化页面的不可见链接来提高链接分数,从而提高搜索引擎排名。
大多数搜索引擎现在检测到隐藏的技术并认为它们作弊。结果,收录隐藏文本的网页面临被搜索引擎降级甚至从列表中删除的惩罚。虽然不乏 网站 Google 员工利用隐形技术侥幸成功,但大多数人仍然认为不值得冒险。实际上,通过添加可视化文本内容并保证一定的关键词密度,也可以达到同样的优化效果。
2:页面与谷歌描述不符
通常发生在一个网站被提交给搜索引擎,而网站在网站为收录之后被另一个页面替换。“诱饵-&-切换”就属于这种作弊——创建优化页面和普通页面,然后将优化页面提交给搜索引擎,当优化页面被搜索引擎收录替换它与普通页面。
三:误导或重复关键词
误导关键词(误导性词语)
在与页面无关的页面中使用误导性的 关键词 来吸引访问者网站 访问该主题。显然,这些所谓的 关键词 与这个页面无关。这种做法严重影响了搜索引擎提供的结果的相关性和客观性,被搜索引擎所憎恶。
重复 关键词(重复的单词)
这种作弊技术也称为“关键词Keyword Stuffing”,利用搜索引擎对关键词出现在网页正文和标题中的高度关注,进行关键词不合理(过度)重复。其他类似的做法包括在 HTML 元标记中填充关键字或使用多个关键字元标记来增加 关键词 的相关性。这种技术很容易被搜索引擎检测到并受到相应的惩罚。
四:隐形页面
对实际访问者或搜索引擎的任何一方隐藏真实的 网站 内容,以便向搜索引擎提供非真实的 SEO 友好内容以提高排名。
五:欺骗性重定向
指快速将用户访问的第一页(着陆页)重定向到内容完全不同的页面。
《影子领域》
这是最常见的欺骗性重定向技术,欺骗性地将用户重定向到另一个 网站 或页面。一般是通过使用HTML刷新标记(Meta Refresh)来实现的。大多数搜索引擎不会索引使用此徽标的页面。如果您使用刷新标志来检测浏览器或分辨率,则使用 Javascript 并最大化重定向时间。如果必须使用重定向功能,请确保刷新周期不少于 10 秒。
另一种情况是当用户打开一个网站时,网站声称自己的网站已经移到了一个新的域名,并要求用户点击新的域名链接输入 网站。但是当用户进去的时候,他发现这个链接是一个“附属”链接。这也是一个欺骗性的重定向。
六:门口页
也称为“桥接/门户/跳转/入口页面”。它是针对某些关键字的特制页面,专门为搜索引擎设计的,目的是提高特定关键词在搜索引擎中的排名。目的丰富的关键词域名被重定向到另一个域名的真实网站。搜索引擎蜘蛛倾向于忽略自动重定向到其他页面的页面。
七:复制的网站或网页
最常见的是镜像站点(Mirror Sites)。通过复制 网站 或页面的内容并分配不同的域名和服务器,它可以欺骗搜索引擎多次索引同一站点或同一页面。大多数搜索引擎现在提供能够检测镜像站点的适当过滤系统。找到镜像站点后,源站点和镜像站点都会从索引数据库中删除。
八:作弊链接技术/恶意链接(Link Spamming)
典型的作弊链接技术包括:
链接农场
批量链接交换程序
交叉链接
“链接工厂”(也称为“海量链接机制”)是指由大量交叉链接的网页组成的网络系统。这些网页可能来自同一个域或多个不同的域,甚至来自不同的服务器。站点加入这样的“链接工厂”后,一方面可以从系统中的所有网页获取链接,同时还需要“捐赠”自己的链接作为交换,从而提高通过这种方法进行链接评分,从而达到干预链接评分。的目标。它们现在很容易被搜索引擎发现。一经发现,无论有意还是无意,“链接工厂”中的所有网站都是千丝万缕的链接。
九:其他
日志作弊
具有较高页面排名的网站通过对其进行大量虚假点击来获取其传入链接,以便在这些网站的顶级引荐来源日志中列出。Google 知道这种行为,并将对使用此路由获取传入链接的网站采取适当的措施。
门口域
目标丰富的关键词 域旨在提高特定关键词 在搜索引擎中的排名,然后重定向到其他域的主页。由于搜索引擎通常会忽略自动重定向到其他页面的页面检索,因此不鼓励使用这种技术。 查看全部
干货:wordpress子比主题免费文章批量翻译工具
wordpress子主题文章翻译可以让我们批量对需要翻译的文章进行中英文翻译,一键自动发布到我们对应的栏目。翻译不仅支持中英文,还支持日文、泰文、阿拉伯文、德文等多种语言。翻译插件对接百度翻译、有道翻译、谷歌翻译等API。
wordpress子主题文章翻译插件对接多家大厂翻译接口,自带翻译接口。无论是文章批量翻译还是语言之间的来回翻译,都可以一键点击,批量操作。WordPress子主题文章翻译插件支持各类cms,不仅WordPress、zblog、易友cms等各类cms都可以轻松对接。
WordPress子主题文章翻译插件支持全网内容采集、批量翻译、文章伪原创发布。想象一下使用一个wordpress子主题文章翻译插件,导入一个关键词列表,然后让AI翻译写出我们网站需要的原创文章。

搜索引擎正在识别由人工智能翻译编写的内容。这包括由人工智能或机器学习生成的内容。搜索引擎政策更新是为了打击那些使用人工智能以欺骗搜索引擎算法的方式翻译书面内容的人。这种类型的内容通常被设计为在搜索结果中排名靠前,但与手工翻译的内容质量不同。
搜索引擎表示,在确定内容是合成的还是操纵的时,它会考虑许多因素。这包括使用“旋转”技术生成相同内容的多个版本,以及使用人工智能生成旨在欺骗搜索引擎算法的文本。可能会对发现发布此类内容的 网站 采取行动,包括从搜索结果中删除。这是打击那些使用人工智能玩系统的人的重要一步。
毫无疑问,人工智能 (AI) 正在彻底改变内容写作领域。然而,人工智能书面内容的使用增加也可能产生潜在的问题。一个潜在的问题是,由 AI 翻译人员编写的内容可能会变得过于公式化和重复。随着人工智能算法变得越来越复杂,它们将能够更有效地识别数据中的模式。随着算法识别和复制成功的模式,这可能导致由人工智能翻译编写的内容变得越来越公式化。另一个潜在问题是 AI 翻译人员编写的内容可能是非个人的。

随着 AI 越来越多地参与到内容翻译写作过程中,WordPress 字幕可能会失去人类翻译写作的温暖和个性。最后,人工智能翻译的内容有可能被用来操纵公众舆论。随着人工智能在理解和复制人类情感方面变得更好,它可以用来翻译为引发某种情感反应而编写的内容。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,WordPress 子主题越来越多地使用人工智能来翻译可能会产生潜在问题的内容。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。
技术文章:谷歌seo特点技巧(网站google搜索优化)
如何优化谷歌排名?谷歌排名优化有哪些网站要求?
中国是外贸出口大国。最近有很多出口企业问我们对谷歌排名优化有什么要求?什么是谷歌排名优化?哪个品牌最适合谷歌排名优化?下面小编将为您解答这个问题:
疫情影响下,外贸企业迎难而上,求创新求变,数千家传统外贸企业伸出援手,提质增效。在客户开发和营销方面,外贸企业利用大数据精准营销工具、B2B平台、线上展会等方式,开发、推广、引流客户,加速数字化转型。
优易华拥有超过15年的互联网营销经验,让优易华拥有丰富的海外数字营销经验,积累了大量的营销资源。该公司是谷歌认证的合作伙伴,谷歌搜索引擎优化是主要项目之一。
谷歌排名优化说明及详情:
1、谷歌排名优化的最大优势是没有各个引擎的独立性。即使你只要求优化百度,结果在百度、谷歌等各大搜索引擎中都会有不错的排名,而SEO只能在一个搜索引擎中使用。好的排名显示在网站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都会有好的排名,从而减少投入和投入。
2. 对于每个类别,列出相关的 文章。下面我们用问答的方式来说明什么是谷歌排名优化?如何学习谷歌排名优化?如何进行谷歌排名优化?将每一页的相关问题归纳为两类:问题大师关键词的集合列表,以及类似问题的列表。从根本上说,它清理了所有相关的关键词,让页面有更好的用户体验,让谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方显示类似的文章,有利于谷歌排名优化和推广,可以打开。另外,文章发布后,相关的关键词也可以补充评论功能。与谷歌不同,百度的排名规则以PR值作为明确的标准。但是百度也有一套算法对每个网站进行加权,因为没有标准,就没有排名的依据。这个事实是非常真实的。因此,在SEO实践中,网站获得更高的PR值,是每个SEO人追求的目标。但是要获得高PR值,需要一些高质量的反向链接或者足够多的反向链接。
4、提高网站的曝光度。如果一个网站做SEO,你在搜索引擎中的排名就会上升,更多的人会点击你的网站。而且你会受益于不止一个搜索引擎,百度、谷歌、雅虎、搜狗等各种搜索引擎一般都有数据展示。作为一名员工,编写观众喜欢的内容并不难。加入谷歌也是考虑这些因素的时候。一开始可能会很麻烦,但有了这些 SEO 技巧,你很快就会得到意想不到的结果。
如何优化谷歌排名
一:隐藏文字/隐藏链接
一般指网页专为搜索引擎设计,但普通访问者看不到的文字内容或链接。在各种隐藏技术中,最常见的是将文本或链接文本的字体颜色设置为与背景颜色相同或非常接近。
不可见/隐藏文本
目的是在不影响网站美观的情况下,增加收录大量关键词的页面的关键词相关性分数,从而提高搜索引擎排名。

不可见/隐藏链接
它旨在通过在不影响 网站 的美观性的情况下在其他页面上添加指向目标优化页面的不可见链接来提高链接分数,从而提高搜索引擎排名。
大多数搜索引擎现在检测到隐藏的技术并认为它们作弊。结果,收录隐藏文本的网页面临被搜索引擎降级甚至从列表中删除的惩罚。虽然不乏 网站 Google 员工利用隐形技术侥幸成功,但大多数人仍然认为不值得冒险。实际上,通过添加可视化文本内容并保证一定的关键词密度,也可以达到同样的优化效果。
2:页面与谷歌描述不符
通常发生在一个网站被提交给搜索引擎,而网站在网站为收录之后被另一个页面替换。“诱饵-&-切换”就属于这种作弊——创建优化页面和普通页面,然后将优化页面提交给搜索引擎,当优化页面被搜索引擎收录替换它与普通页面。
三:误导或重复关键词
误导关键词(误导性词语)
在与页面无关的页面中使用误导性的 关键词 来吸引访问者网站 访问该主题。显然,这些所谓的 关键词 与这个页面无关。这种做法严重影响了搜索引擎提供的结果的相关性和客观性,被搜索引擎所憎恶。
重复 关键词(重复的单词)
这种作弊技术也称为“关键词Keyword Stuffing”,利用搜索引擎对关键词出现在网页正文和标题中的高度关注,进行关键词不合理(过度)重复。其他类似的做法包括在 HTML 元标记中填充关键字或使用多个关键字元标记来增加 关键词 的相关性。这种技术很容易被搜索引擎检测到并受到相应的惩罚。
四:隐形页面
对实际访问者或搜索引擎的任何一方隐藏真实的 网站 内容,以便向搜索引擎提供非真实的 SEO 友好内容以提高排名。
五:欺骗性重定向
指快速将用户访问的第一页(着陆页)重定向到内容完全不同的页面。
《影子领域》
这是最常见的欺骗性重定向技术,欺骗性地将用户重定向到另一个 网站 或页面。一般是通过使用HTML刷新标记(Meta Refresh)来实现的。大多数搜索引擎不会索引使用此徽标的页面。如果您使用刷新标志来检测浏览器或分辨率,则使用 Javascript 并最大化重定向时间。如果必须使用重定向功能,请确保刷新周期不少于 10 秒。

另一种情况是当用户打开一个网站时,网站声称自己的网站已经移到了一个新的域名,并要求用户点击新的域名链接输入 网站。但是当用户进去的时候,他发现这个链接是一个“附属”链接。这也是一个欺骗性的重定向。
六:门口页
也称为“桥接/门户/跳转/入口页面”。它是针对某些关键字的特制页面,专门为搜索引擎设计的,目的是提高特定关键词在搜索引擎中的排名。目的丰富的关键词域名被重定向到另一个域名的真实网站。搜索引擎蜘蛛倾向于忽略自动重定向到其他页面的页面。
七:复制的网站或网页
最常见的是镜像站点(Mirror Sites)。通过复制 网站 或页面的内容并分配不同的域名和服务器,它可以欺骗搜索引擎多次索引同一站点或同一页面。大多数搜索引擎现在提供能够检测镜像站点的适当过滤系统。找到镜像站点后,源站点和镜像站点都会从索引数据库中删除。
八:作弊链接技术/恶意链接(Link Spamming)
典型的作弊链接技术包括:
链接农场
批量链接交换程序
交叉链接
“链接工厂”(也称为“海量链接机制”)是指由大量交叉链接的网页组成的网络系统。这些网页可能来自同一个域或多个不同的域,甚至来自不同的服务器。站点加入这样的“链接工厂”后,一方面可以从系统中的所有网页获取链接,同时还需要“捐赠”自己的链接作为交换,从而提高通过这种方法进行链接评分,从而达到干预链接评分。的目标。它们现在很容易被搜索引擎发现。一经发现,无论有意还是无意,“链接工厂”中的所有网站都是千丝万缕的链接。
九:其他
日志作弊
具有较高页面排名的网站通过对其进行大量虚假点击来获取其传入链接,以便在这些网站的顶级引荐来源日志中列出。Google 知道这种行为,并将对使用此路由获取传入链接的网站采取适当的措施。
门口域
目标丰富的关键词 域旨在提高特定关键词 在搜索引擎中的排名,然后重定向到其他域的主页。由于搜索引擎通常会忽略自动重定向到其他页面的页面检索,因此不鼓励使用这种技术。
解决方案:资源网采集api接口_cochrane library检索
采集交流 • 优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2022-10-03 23:08
资源网采集api接口_cochrane库检索记录Bintray网站Publishing LibraryBintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray上网站 开启。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。目前的androidstudio默认依赖jcenter库,但是老版本的androidstudio依赖mavenC...
大家好,我是建筑师,一个会写代码,会背诗的建筑师。今天讲资源网采集api接口_cochrane库检索,希望能帮助大家提高!!!
Recording Bintray网站发布库
Bintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray网站上。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。
目前的android studio默认依赖jcenter库,但是老版本的android studio依赖mavenCentral库(因为上传库到mavenCentral对大部分开发者来说有点困难,改成jcenter了)。
我们可以在项目的 build.gradle 文件中看到
默认依赖库.png
好了,废话不多说,我们开始吧。
向 Bintray 注册一个帐户
我这里使用github账号直接登录,但是需要邮箱验证。注意这里不能使用qq邮箱。网易邮箱注册可以使用谷歌邮箱。个人使用的是foxmail(qq邮箱的别称)。
注册成功后是这样的:
Paste_Image.png
然后我们要创建我们的存储库,类似于 github 的存储库。
创建仓库.png
然后填写相应的信息就OK了。注意类型要选择maven,如果想让不在你组织的人使用,需要选择public。
Paste_Image.png
然后将包添加到存储库。用来存放我们要发布的jar包。
Paste_Image.png
然后填写相关信息,如图:
Paste_Image.png
一旦完成,我们的准备工作就完成了。~
编译并发布项目
首先,我们肯定需要一个已经编写好的库。项目结构如下:
Paste_Image.png
如果没有,没关系,我们可以新建一个库,全面调试(如果你只是想知道怎么发布到bintry,在库里写个测试方法就行了),把它作为要发布的jar包。
Paste_Image.png
好了,重头戏来了,我们要在android stduio中搭建我们的上传环境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只听到建筑师办公室传来建筑师的声音:
此水何时止,此恨何时止?谁将向上或向下匹配?
文件中的位置如图: 注意这里可能存在版本问题。如果版本错误,请尝试使用最新版本。
Paste_Image.png
此代码由Java架构师必看网-架构君整理
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
version = "1.0.1"//这里是你的版本,当你需要上传新的版本到bintry上时,只需要修改这里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 项目的主页
def gitUrl = 'https://git.oschina.net/crazycodeboy/ScanProj.git' // Git仓库的url
group = "reoger.hut.com.mylibrary" // Maven Group ID for the artifact,一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'multi-format 1D/2D barcode image processing use zxing.'
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'you id' //填写的一些基本信息(也可以不填)
name 'your name'
email 'your email'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
<p>
}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
userOrg ="hut"//这个地方一定要填,一定要填 !!(这里需要修改你申请账号是的组织id)
repo = "Maven"//发布到bintray上的仓库名
name = "CheckEditText" //发布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
这里需要说明一下:
所需的更改是:
Paste_Image.png
userOrg 填写你的组织ID,可以在如图所示界面找到可信信息。
Paste_Image.png
repo 填写你的仓库名称,name 填写你的包名,可以找到对应的信息如图。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我们需要在项目的local.properties中填写我们的身份信息。将以下两句话添加到我们的目录中:
此代码由Java架构师必看网-架构君整理
bintray.user=用户名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用户名可以在这里找到
Paste_Image.png
在这里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我们离成功也不远了。
接下来在终端输入命令:
gradlew install
如果没有报错,会提示BUILD SUCCESSEUL,然后我们输入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去网站看看~:
Paste_Image.png
将依赖项添加到项目中
发布后,我们可以将其引入到我们的项目中。
在要导入项目的build.gradle目录下,添加依赖:
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我们的组织地址。
Paste_Image.png
然后,在我们要依赖的模块下,添加我们需要的依赖,例如:
Paste_Image.png
这可以在这里找到:
Paste_Image.png
然后就可以使用我们之前写的函数了~!!.
简单的发布写作
将以下内容添加到 -root build.gradle 中的依赖项块中:
classpath 'com.novoda:bintray-release:0.5.0'//修改此处版本号为 0.5.0---修改之前是0.3.4
将以下内容添加到 -root build.gradle 中的所有项目中:
repositories {
jcenter()
mavenCentral()
}
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
options.addStringOption('Xdoclint:none', '-quiet')
}
Paste_Image.png
添加到要发布的lib模块的build.gradle
apply plugin: 'com.novoda.bintray-release'
-如果是项目的要注意下,要将apply plugin: 'com.android.application'
改成apply plugin: 'com.android.library'
Paste_Image.png
添加到库的build.gradle
//添加
publish {
userOrg = 'xxx' //bintray 如果有组织就是组织名,反之用户名
repoName = 'maven' //仓库名
uploadName = 'GameSDK' //项目名
groupId = 'com.test' //compile引用时的第1部分groupId
artifactId = 'game-sdk' //compile引用时的第2部分项目名
publishVersion = '1.0.0' //compile引用时的第3部分版本号
desc = 'This is a game sdk extend library'
website = '网站网址或者github地址'
licences = ['Apache-2.0']
}
生成后的依赖地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:发布成功后:
* 1、在要引入项目的 build.gradle目录下,添加依赖:
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路径{https://xxxx.bintray.com/maven},在未将library加入的jcenter中前,这是必须的
//userOrg 如果有组织就是组织名,反之用户名
* }
*
* 2、在dependencies中添加依赖:
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包发布后,仍然可以这样写:
gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=apiKey -PdryRun=false
我想你会喜欢:
解决方案:关键词提取软件下载(关键词提取器)
优采云采集器是网站采集大家最喜欢的工具,但是优采云采集器在免费版中并没有很多功能,除了支持关键词采集中文文章和自动发布功能,不能提供批量采集伪原创发布等完整的采集流程,不能同时一个-点击批量自动百度、神马、360、搜狗等搜索引擎推送。
无论你有成百上千个不同的免费采集器网站还是其他网站都可以实现统一管理。一个人使用免费的采集器做网站优化维护上百个网站文章更新不是问题,有哪些细节需要注意。
一、域名
域名就像一个人的名字。简单好记的名字容易让人记住,复杂的名字难记。域名也是如此,所以针对网站优化了一个简单易记的域名,好在用户想访问你的网站时,不需要去百度搜索,他们可以通过输入域名直接访问你的网站。免费采集器可以批量监控管理不同的cms网站数据(无论你的网站是Empire, Yiyou, ZBLOG, 织梦, WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同时批处理工具来管理 采集伪原创 并发布推送)。
二、空间
空间是存储网站 程序文件的地方。空间打开越快,空间越稳定,网站用户浏览体验自然会更好。更快的速度和更稳定的空间对于网站来说很重要,优化排名极其重要。免费采集器可以设置批量发布次数(可以设置发布间隔/单日发布总数)。
三、网页上的三大标签
1)标题标签
网页有标题标签。搜索蜘蛛在抓取网页内容时,首先抓取的是网页标题标签的内容,而网页标题标签的内容可以参与搜索结果的排名。我们通常所说的关键词排名指的是标题标签排名,而不是关键词标签排名,所以页面标题标签的内容很重要。免费 采集器 使内容与标题一致(使内容与标题相关性一致)。根据关键词采集文章,通过免费的采集器采集填充内容。(免费的 采集器采集 插件还配置了 关键词采集 功能和无关的词块功能)。注意不要出错,否则会被搜索引擎惩罚。
2)关键词标签
免费采集器可以提高关键词密度和页面原创度,增加用户体验,实现优质内容。
关键词标签的内容不参与排名,部分站长朋友认为不需要写。免费采集器插入内容的能力关键词(合理增加关键词密度)。虽然这个标签不涉及排名,但我们仍然需要维护这个标签内容的完整性。百度搜索在相关算法中也有提及。建议你写下这个标签的内容,以免被百度搜索命中。
3)描述标签
描述标签写入当前网页的一般内容。简而言之,就是对当前网页内容的介绍。一个好的网页描述也可以吸引用户点击该网页的网页,描述标签的内容也可以参与排名。
4)alt 标签
alt标签是图片的专属标签,因为搜索蜘蛛不能直接识别图片,所以只能通过alt标签的内容来识别图片。alt标签的内容只需要简单的告诉搜索蜘蛛图片的内容,不要在alt标签>里面堆关键词,否则会影响搜索蜘蛛对网页的评分。
5)机器人,txt 文件
网站机器人,txt文件是网站和搜索引擎之间的协议文件,用来告诉搜索蜘蛛网站可以抓取哪些页面。免费采集器随机图片插入(文章如果没有图片可以随机插入相关图片)。哪些页面不能被爬取,可以有效保护网站隐私页面,提高网站的安全性。
6)nofollow 标签
免费采集器可以支持多个采集来源采集(涵盖所有行业新闻来源,内容库海量每天都有新内容,采集新内容)。nofollow 标签通常应用于出站链接。站内链接很少用于告诉蜘蛛该链接是非信任链接并且不传递权重。
7)网站网站地图
免费的采集器可以推送到搜索引擎(文章发布成功后主动推送文章到搜索引擎,保证新链接及时被搜索引擎搜索到收录 )。网站sitemap地图有利于提高搜索蜘蛛的网站页面的爬取率,所有网站页面的链接都集中在这个文件中,可以帮助搜索蜘蛛快速爬取整个网站页面。免费的采集器可以定时发布(定时发布网站内容可以让搜索引擎养成定时抓取网页的习惯,从而提高网站的收录)。
搜索蜘蛛爬行网站,第一个访问的文件是robots文件,我们可以在robots文件中写网站站点地图地图,搜索蜘蛛会沿着网站地图文件爬行网站 页面。每日蜘蛛、收录、网站权重可以通过免费的采集器直接查看。
8)链接
免费的采集器可以发布也可以配置很多SEO功能,不仅可以通过免费的采集器发布实现采集伪原创的发布和主动推送到搜索引擎,还可以有很多搜索引擎优化功能。与相关行业的高权重网站交换友情链接,可以增加网站的PR值,给网站带来一定的流量,提高搜索引擎对你的兴趣网站页面的收录速率。免费采集器自动批量挂机采集伪原创自动发布推送到搜索引擎。
9)外部链接
免费采集器可以直接监控已发布、待发布、伪原创、发布状态、URL、程序、发布时间等。外部链接是给别人留下自己的网站链接网站。外链对于新站优化初期非常重要,外链的好坏直接影响搜索引擎中的网站。的评分。免费的采集器可以自动内链(在执行发布任务时自动在文章内容中生成内链,有利于引导页面蜘蛛抓取,提高页面权限)。
10)404 错误页面
免费的采集器提供伪原创保留字(文章原创时伪原创不设置核心字)。网站修改、破解代码或其他原因导致网站中出现大量死链接。这时候,404错误页面就派上用场了。404错误页面向搜索引擎返回一个404状态码,可以帮助搜索引擎快速去除死链接页面。
今天关于免费采集器的解释就到这里了。下期我会分享更多的SEO相关知识。希望你能通过我的文章得到你想要的,下期再见。 查看全部
解决方案:资源网采集api接口_cochrane library检索
资源网采集api接口_cochrane库检索记录Bintray网站Publishing LibraryBintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray上网站 开启。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。目前的androidstudio默认依赖jcenter库,但是老版本的androidstudio依赖mavenC...
大家好,我是建筑师,一个会写代码,会背诗的建筑师。今天讲资源网采集api接口_cochrane库检索,希望能帮助大家提高!!!
Recording Bintray网站发布库
Bintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray网站上。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。
目前的android studio默认依赖jcenter库,但是老版本的android studio依赖mavenCentral库(因为上传库到mavenCentral对大部分开发者来说有点困难,改成jcenter了)。
我们可以在项目的 build.gradle 文件中看到
默认依赖库.png
好了,废话不多说,我们开始吧。
向 Bintray 注册一个帐户
我这里使用github账号直接登录,但是需要邮箱验证。注意这里不能使用qq邮箱。网易邮箱注册可以使用谷歌邮箱。个人使用的是foxmail(qq邮箱的别称)。
注册成功后是这样的:
Paste_Image.png
然后我们要创建我们的存储库,类似于 github 的存储库。
创建仓库.png
然后填写相应的信息就OK了。注意类型要选择maven,如果想让不在你组织的人使用,需要选择public。
Paste_Image.png
然后将包添加到存储库。用来存放我们要发布的jar包。
Paste_Image.png
然后填写相关信息,如图:
Paste_Image.png
一旦完成,我们的准备工作就完成了。~
编译并发布项目
首先,我们肯定需要一个已经编写好的库。项目结构如下:
Paste_Image.png
如果没有,没关系,我们可以新建一个库,全面调试(如果你只是想知道怎么发布到bintry,在库里写个测试方法就行了),把它作为要发布的jar包。
Paste_Image.png
好了,重头戏来了,我们要在android stduio中搭建我们的上传环境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只听到建筑师办公室传来建筑师的声音:
此水何时止,此恨何时止?谁将向上或向下匹配?
文件中的位置如图: 注意这里可能存在版本问题。如果版本错误,请尝试使用最新版本。
Paste_Image.png
此代码由Java架构师必看网-架构君整理
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
version = "1.0.1"//这里是你的版本,当你需要上传新的版本到bintry上时,只需要修改这里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 项目的主页
def gitUrl = 'https://git.oschina.net/crazycodeboy/ScanProj.git' // Git仓库的url
group = "reoger.hut.com.mylibrary" // Maven Group ID for the artifact,一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'multi-format 1D/2D barcode image processing use zxing.'
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'you id' //填写的一些基本信息(也可以不填)
name 'your name'
email 'your email'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
<p>

}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
userOrg ="hut"//这个地方一定要填,一定要填 !!(这里需要修改你申请账号是的组织id)
repo = "Maven"//发布到bintray上的仓库名
name = "CheckEditText" //发布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
这里需要说明一下:
所需的更改是:
Paste_Image.png
userOrg 填写你的组织ID,可以在如图所示界面找到可信信息。
Paste_Image.png
repo 填写你的仓库名称,name 填写你的包名,可以找到对应的信息如图。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我们需要在项目的local.properties中填写我们的身份信息。将以下两句话添加到我们的目录中:
此代码由Java架构师必看网-架构君整理
bintray.user=用户名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用户名可以在这里找到
Paste_Image.png
在这里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我们离成功也不远了。
接下来在终端输入命令:
gradlew install
如果没有报错,会提示BUILD SUCCESSEUL,然后我们输入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去网站看看~:
Paste_Image.png

将依赖项添加到项目中
发布后,我们可以将其引入到我们的项目中。
在要导入项目的build.gradle目录下,添加依赖:
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我们的组织地址。
Paste_Image.png
然后,在我们要依赖的模块下,添加我们需要的依赖,例如:
Paste_Image.png
这可以在这里找到:
Paste_Image.png
然后就可以使用我们之前写的函数了~!!.
简单的发布写作
将以下内容添加到 -root build.gradle 中的依赖项块中:
classpath 'com.novoda:bintray-release:0.5.0'//修改此处版本号为 0.5.0---修改之前是0.3.4
将以下内容添加到 -root build.gradle 中的所有项目中:
repositories {
jcenter()
mavenCentral()
}
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
options.addStringOption('Xdoclint:none', '-quiet')
}
Paste_Image.png
添加到要发布的lib模块的build.gradle
apply plugin: 'com.novoda.bintray-release'
-如果是项目的要注意下,要将apply plugin: 'com.android.application'
改成apply plugin: 'com.android.library'
Paste_Image.png
添加到库的build.gradle
//添加
publish {
userOrg = 'xxx' //bintray 如果有组织就是组织名,反之用户名
repoName = 'maven' //仓库名
uploadName = 'GameSDK' //项目名
groupId = 'com.test' //compile引用时的第1部分groupId
artifactId = 'game-sdk' //compile引用时的第2部分项目名
publishVersion = '1.0.0' //compile引用时的第3部分版本号
desc = 'This is a game sdk extend library'
website = '网站网址或者github地址'
licences = ['Apache-2.0']
}
生成后的依赖地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:发布成功后:
* 1、在要引入项目的 build.gradle目录下,添加依赖:
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路径{https://xxxx.bintray.com/maven},在未将library加入的jcenter中前,这是必须的
//userOrg 如果有组织就是组织名,反之用户名
* }
*
* 2、在dependencies中添加依赖:
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包发布后,仍然可以这样写:
gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=apiKey -PdryRun=false
我想你会喜欢:
解决方案:关键词提取软件下载(关键词提取器)
优采云采集器是网站采集大家最喜欢的工具,但是优采云采集器在免费版中并没有很多功能,除了支持关键词采集中文文章和自动发布功能,不能提供批量采集伪原创发布等完整的采集流程,不能同时一个-点击批量自动百度、神马、360、搜狗等搜索引擎推送。
无论你有成百上千个不同的免费采集器网站还是其他网站都可以实现统一管理。一个人使用免费的采集器做网站优化维护上百个网站文章更新不是问题,有哪些细节需要注意。
一、域名
域名就像一个人的名字。简单好记的名字容易让人记住,复杂的名字难记。域名也是如此,所以针对网站优化了一个简单易记的域名,好在用户想访问你的网站时,不需要去百度搜索,他们可以通过输入域名直接访问你的网站。免费采集器可以批量监控管理不同的cms网站数据(无论你的网站是Empire, Yiyou, ZBLOG, 织梦, WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同时批处理工具来管理 采集伪原创 并发布推送)。
二、空间
空间是存储网站 程序文件的地方。空间打开越快,空间越稳定,网站用户浏览体验自然会更好。更快的速度和更稳定的空间对于网站来说很重要,优化排名极其重要。免费采集器可以设置批量发布次数(可以设置发布间隔/单日发布总数)。
三、网页上的三大标签
1)标题标签
网页有标题标签。搜索蜘蛛在抓取网页内容时,首先抓取的是网页标题标签的内容,而网页标题标签的内容可以参与搜索结果的排名。我们通常所说的关键词排名指的是标题标签排名,而不是关键词标签排名,所以页面标题标签的内容很重要。免费 采集器 使内容与标题一致(使内容与标题相关性一致)。根据关键词采集文章,通过免费的采集器采集填充内容。(免费的 采集器采集 插件还配置了 关键词采集 功能和无关的词块功能)。注意不要出错,否则会被搜索引擎惩罚。

2)关键词标签
免费采集器可以提高关键词密度和页面原创度,增加用户体验,实现优质内容。
关键词标签的内容不参与排名,部分站长朋友认为不需要写。免费采集器插入内容的能力关键词(合理增加关键词密度)。虽然这个标签不涉及排名,但我们仍然需要维护这个标签内容的完整性。百度搜索在相关算法中也有提及。建议你写下这个标签的内容,以免被百度搜索命中。
3)描述标签
描述标签写入当前网页的一般内容。简而言之,就是对当前网页内容的介绍。一个好的网页描述也可以吸引用户点击该网页的网页,描述标签的内容也可以参与排名。
4)alt 标签
alt标签是图片的专属标签,因为搜索蜘蛛不能直接识别图片,所以只能通过alt标签的内容来识别图片。alt标签的内容只需要简单的告诉搜索蜘蛛图片的内容,不要在alt标签>里面堆关键词,否则会影响搜索蜘蛛对网页的评分。
5)机器人,txt 文件
网站机器人,txt文件是网站和搜索引擎之间的协议文件,用来告诉搜索蜘蛛网站可以抓取哪些页面。免费采集器随机图片插入(文章如果没有图片可以随机插入相关图片)。哪些页面不能被爬取,可以有效保护网站隐私页面,提高网站的安全性。
6)nofollow 标签
免费采集器可以支持多个采集来源采集(涵盖所有行业新闻来源,内容库海量每天都有新内容,采集新内容)。nofollow 标签通常应用于出站链接。站内链接很少用于告诉蜘蛛该链接是非信任链接并且不传递权重。
7)网站网站地图

免费的采集器可以推送到搜索引擎(文章发布成功后主动推送文章到搜索引擎,保证新链接及时被搜索引擎搜索到收录 )。网站sitemap地图有利于提高搜索蜘蛛的网站页面的爬取率,所有网站页面的链接都集中在这个文件中,可以帮助搜索蜘蛛快速爬取整个网站页面。免费的采集器可以定时发布(定时发布网站内容可以让搜索引擎养成定时抓取网页的习惯,从而提高网站的收录)。
搜索蜘蛛爬行网站,第一个访问的文件是robots文件,我们可以在robots文件中写网站站点地图地图,搜索蜘蛛会沿着网站地图文件爬行网站 页面。每日蜘蛛、收录、网站权重可以通过免费的采集器直接查看。
8)链接
免费的采集器可以发布也可以配置很多SEO功能,不仅可以通过免费的采集器发布实现采集伪原创的发布和主动推送到搜索引擎,还可以有很多搜索引擎优化功能。与相关行业的高权重网站交换友情链接,可以增加网站的PR值,给网站带来一定的流量,提高搜索引擎对你的兴趣网站页面的收录速率。免费采集器自动批量挂机采集伪原创自动发布推送到搜索引擎。
9)外部链接
免费采集器可以直接监控已发布、待发布、伪原创、发布状态、URL、程序、发布时间等。外部链接是给别人留下自己的网站链接网站。外链对于新站优化初期非常重要,外链的好坏直接影响搜索引擎中的网站。的评分。免费的采集器可以自动内链(在执行发布任务时自动在文章内容中生成内链,有利于引导页面蜘蛛抓取,提高页面权限)。
10)404 错误页面
免费的采集器提供伪原创保留字(文章原创时伪原创不设置核心字)。网站修改、破解代码或其他原因导致网站中出现大量死链接。这时候,404错误页面就派上用场了。404错误页面向搜索引擎返回一个404状态码,可以帮助搜索引擎快速去除死链接页面。
今天关于免费采集器的解释就到这里了。下期我会分享更多的SEO相关知识。希望你能通过我的文章得到你想要的,下期再见。
完整解决方案:支持推荐应用的PaaS平台4A能力组件
采集交流 • 优采云 发表了文章 • 0 个评论 • 167 次浏览 • 2022-10-03 04:46
平台即服务(PaaS,platform as a service)作为云计算的一种应用形式,为应用开发者提供高效、安全的应用托管能力[]。随着PaaS云平台的不断发展,平台能力的丰富性和多样化已经成为PaaS平台的核心竞争点和关键指标[]。所谓平台的“能力组件”,主要是指PaaS平台提供的、可供平台上其他应用调用的软件能力。4A是Authentication(认证)。)、Authorization(认证)、Accounting(计费)和Audit(审计)的缩写,4A为用户提供统一的用户身份认证管理,应用访问(access)权限控制,记账和账户管理,以及基于操作的日志审计等功能。通过分析PaaS平台上的应用[-]可以发现,很多应用都需要基本的4A能力,比如用户信息管理、账户管理等。因此,4A能力组件正是在PaaS云平台中。可重用的重要组件之一,可有效减少应用程序开发量,增加软件资产的重用性。同时,丰富强大的平台能力也可以让平台上的应用拥有更丰富、更强大的功能,提高应用竞争力。. 4A能力组件在提供4A能力的同时,还为用户提供单点登录(SSO,single sign on)功能,方便用户在各种应用之间无缝切换,一站式满足用户和应用的需求。提供统一认证、认证管理、账号管理、审计管理、SSO等功能需求。
1 4A能力组件需求分析
4A能力组件为用户提供用户注册、密码找回、信息管理、计费管理等账户管理相关功能,提供统一的认证服务,为不同的应用提供认证管理,提供用户行为信息的审计管理,支持单点登录和其他功能。
4A能力组件的应用对象是PaaS云中的应用开发者、应用用户和管理员。4A能力组件为应用开发者提供了一个简单、安全、高效的接口,方便开发者使用。为保证一站式服务用户体验,4A能力组件为应用用户和管理员提供用户入口和管理员入口,完成对用户信息和应用信息的管理。
4A组件的功能主要包括账户管理、认证管理、认证管理、审计管理和SSO。
1) 账户管理:账户管理分为三个部分。一是基本账户管理,包括用户注册、找回密码、修改密码等;二是用户信息管理,包括基本用户信息(基本用户信息、用户分机信息和用户权限信息)和好友信息(好友信息、朋友关系和朋友组)。最后是账单信息,包括用户余额和交易详情。
2) 统一认证:统一认证用于判断用户是否合法。认证过程通过 OAuth2.0 协议实现。应用开发者在使用能力组件提供的开放接口之前,需要获取用户的授权凭证access_token。. access_token 是第三方访问用户资源的凭证。只有通过这个凭证,第三方应用程序才能访问 4A 能力组件中的数据。
3) 应用认证:只有经过系统授权的应用才能获取用户信息。当应用通过4A能力组件获取用户信息时,会对第三方应用进行授权检查,未经授权的应用不会获取任何用户信息。
4)系统审计:4A能力组件通过日志系统记录用户行为和系统操作信息,完成相关日志的采集、存储和分析。
5) SSO:SSO 是一种流行的系统集成解决方案。SSO可以保证在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
2 4A 能力组件设计2.1 系统架构
系统架构图如图所示。该系统分为三个部分。最上层是Web服务层,即接口服务器(API Server)和与开发者、用户和管理员交互的Web接口。Web服务层主要负责管理员门户,特别是4A能力组件将用户门户作为能力组件的第三方应用,不与管理员门户在同一层。. 这是因为管理员门户需要更高的权限,开放API不提供相关功能,调用开放API也会造成效率下降。中间是逻辑功能层,主要完成系统中所有逻辑功能的实现,包括账户管理、统一认证[]、应用认证、系统审计和SSO[]等。系统的底层是基础组件层,包括基础组件和支撑组件。基础组件是系统运行的必备组件,主要包括MySQL、NFS和邮件服务等。支持组件是支持系统运行的可选组件,主要包括日志系统等。下面将重点介绍日志系统和接口服务器。
图1
图1
图1 4A能力组件系统架构图
2.2 日志系统
日志系统是4A能力组件的支撑组件,负责在4A能力组件中记录用户的行为信息,并与4A能力组件中的审计模块相关联。其系统架构如下图所示。
图 2
图 2
图2 日志系统架构图
日志系统支持采集,海量日志数据的存储和分析。系统提供高性能的日志读写,包括实时读取最新日志和批量读取历史数据。日志系统由Kafka分布式消息队列、HBase分布式数据库、生产者程序和消费者程序[]组成。生产者程序是4A能力组件中的一个审计模块,可以为用户提供用户行为数据。消费者程序是一个基于HTTP协议的API服务器,日志系统通过API向4A能力组件提供各种日志信息。
2.3 API 服务器
4A能力组件提供的开放API由4A能力组件中Web服务层的API Server提供。
2.3.1 API 设计
根据4A能力组件的开发者需求,开放API定义为两类:
1)用户级API:OAuth2.0登录的用户,必须携带access_token参数。用户级 API 主要用于访问个人用户信息。
2)应用级API:用于不使用OAuth2.0登录并已授权的第三方应用。应用程序级 API 将具有参数 source 而不是参数 access_token。参数 source 是 4A 能力的一个组成部分 管理员分配给应用的唯一 ID。
根据系统功能,API分为以下7类:
1) 身份验证 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用户关系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 组 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用户信息 API:/api/users/" target="_blank">/api/users/。
5) 帐户 API:/api/account/" target="_blank">/api/account/。
6) 计费 API:/api/billing/" target="_blank">/api/billing/。
7) 日志 API:/api/log/" target="_blank">/api/log/。
2.3.2 API安全解决方案
为了保证用户信息的安全可靠,用户级API和应用级API采用不同的安全方案。
1) 用户级 API
用户级 API 使用 access_token 是否过期或有效来判断用户的真实性,并返回相应的数据。用户的access_token仅在用户登录期间有效,有效期为24小时。
对于OAuth2.0相关的API,还增加了以下安全措施:
① OAuth2.0 获取参数代码时,可以添加参数状态,维护请求和回调的状态。当4A能力组件重定向到应用程序时,将返回该参数。开发者可以通过该参数验证请求的有效性,从而防止跨站请求伪造攻击。
② OAuth2.0通过参数code获取参数access_token时,尽量选择HTTP协议的POST方式传输请求。
2) 应用程序级 API
应用级API只传递参数源作为应用身份的认证是不安全的,所以4A能力组件使用参数签名来保护用户信息。构造参数签名的过程如下:
①分类参数:API中携带的参数分为系统参数和非系统参数。系统参数包括应用ID(参数来源)和应用密钥(与参数来源唯一匹配)。非系统参数是除系统参数外的所有参数。范围。
② 构造源字符串:将所有非系统参数和参数源按名称值升序排列,并用“&”连接,如k1=v1 & k2=v2 & ...,然后执行第一个MD5加密。
③ 构造密钥:在应用密钥末尾添加字符“&”。
④ 生成签名值签名:将源字符串和密钥以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一个新的字符串,再用MD5加密该值。注意连接的顺序会影响最终的签名值。
4A能力组件的API Server获取API中的各种参数,按照上述算法进行相同的加密过程。如果得到的签名值与参数签名一致,则证明API是安全的。
3 基于4A能力组件的推荐应用3.1 4A能力组件与推荐应用的关系
传统的4A组件只提供4A功能,如用户信息、好友信息等,而4A数据的特性让这些数据可以在更广泛的应用中使用。基于4A能力组件的推荐应用是PaaS云平台4A能力组件的一个应用示例。本应用分析4A能力组件中采集的用户行为信息,为用户推荐PaaS云平台现有的第三方应用。用户可以通过个性化服务快速定位到自己的采集夹。应用程序来解决人们在访问互联网时面临的“信息过载”问题。
4A能力组件记录用户使用4A能力组件时的所有用户行为,并提供日志API。根据4A能力组件的特点,用户行为包括用户注册、用户登录、首次登录、登录时长等。此外,在4A能力组件的用户门户中,用户还可以填写个人兴趣信息以进行为个性化推荐提供直接的数据支持。
推荐的应用程序首先需要连接到 4A 能力组件。访问工作主要由 4A 能力组件的管理员执行,对应用进行审核,并为应用分配唯一的应用 ID 和应用密钥对。然后,被推荐的应用程序可以通过日志API采集4A组件提供的用户行为数据,并基于这些数据进行数据处理、用户兴趣建模和算法推荐。
3.2 推荐应用系统架构
用户访问应用程序,通常具有某些偏好。推荐应用根据用户注册的个人信息定制用户描述文件。该文件可以由用户主动修改或由应用程序自动修改。当文件被应用修改时,应用需要采集用户行为数据,学习用户兴趣,从而调整用户兴趣模型,完成推荐算法。推荐应用的系统架构如图所示。推荐过程分三个阶段完成:数据采集、用户建模和个性化推荐。
图 3
图 3
图3 推荐应用系统架构图
1) 数据采集阶段:该阶段根据4A能力组件提供的用户信息和用户行为信息,完成用户行为采集和数据处理。用户数据的采集方法包括显式反馈和隐式反馈。类型。明确的反馈需要用户主动给出反馈和评价。隐式反馈由应用程序自动完成,不会给用户增加额外的负担。应用程序使用显式反馈和隐式反馈共同实现数据采集的过程。显式反馈使用填写用户信息的方法,隐式反馈调用4A能力组件的日志接口获取用户行为数据。4A能力组件的审计模块详细记录用户访问站点的数据,站点上的页面每被访问一次,web服务器在日志中添加一条日志记录,包括用户IP、请求页面的用户名、应用程序名称、请求时间和 URL。此外,审计模块还将完成基本的数据处理。
2) 用户兴趣建模阶段:该阶段根据用户兴趣建立评价矩阵模型。user-item评估矩阵使用一个Rm×n矩阵来表示用户模型,其中m是用户数,n是项目数。矩阵 R=[rij] 中的每个元素 rij 代表用户 i 对项目 j 的评价结果,一般为一定实数范围内的整数值(如 1~10)。通常越高价值越高,用户对项目的兴趣程度越高。这种表示简单、直观,可以直接从显式反馈采集的信息中生成。
(1)
在本应用中,rij 是用户 i 在一段时间内对应用 j 的兴趣程度。兴趣度的值由用户i对应用j的访问次数、访问时长、SSO流程中第一次登录是否进入应用以及是否在此注册等方面加权应用。
3) 个性化推荐阶段:在这个阶段,根据用户相似度得到一组用户邻居。然后根据邻居用户,对目标用户没有评分的物品进行预测和评分,返回评分最高的N(Top-N)个物品。
4。结论
针对现有PaaS平台开放能力的局限性,以及现有应用功能列表4A体系不规范,提出了PaaS云中的4A能力组件。该组件分为账户管理、统一认证、应用授权。、系统审计和 SSO 5 模块,并通过开放的 API、用户门户和管理员门户为开发人员、用户和管理员提供丰富和安全的 Web 服务。根据4A数据的特点和4A能力组件提供的能力,创新设计并实现了基于4A能力组件的推荐应用。该应用使用用户兴趣模型和协同过滤算法来实现对PaaS云平台现有应用的推荐,同时也验证了4A能力组件的可用性及其应用范围的广泛性。.
设计并实现的4A能力组件已应用于北京邮电大学“云海”PaaS平台,并被平台上多个第三方应用使用,如:面向群体的在线知识管理应用及其管理员门户(、)等。第三方应用开发者通过使用4A能力组件,简化应用开发流程,节省应用开发时间。PaaS云中的4A能力组件增加了软件资产的复用,更好地规范了用户信息的管理流程,开创了用户信息管理服务的新模式。
经验:数据采集技术包括哪几方面(优缺点分别是什么)
很多人不知道data采集技术包括哪些,优缺点,一起来看看吧!
1、通过各软件厂商开放的数据接口,可以实现不同软件数据的互联互通。这是目前最常见的数据连接方式。
2、优点:接口连接方式数据可靠性和价值高,一般不会出现数据重复;通过该接口可以实时传输数据,满足实时数据应用的要求。
3、缺点:接口开发成本高;(2)需要与多个软件厂商协调,工作量大,容易破解;扩展性低。比如由于新业务需要开发每个软件系统对于一个新的业务模块,它和它之间的数据接口大数据平台也需要做相应的修改和改变,甚至之前的数据接口代码都要全部翻过来,工作量大,时间长。
4、机器人是目前比较前沿的软件数据对接技术,即可以采集客户端软件数据和网站软件数据。
5、俗称博是小帮手软件机器人,产品设计原则是“所见即所得”,即无需软件厂商合作,采集上的数据软件界面将被输出。结果是结构化的数据库或 Excel 表。
6、如果只需要界面上的业务数据,或者软件厂商不配合/崩溃,数据库分析困难,最好使用软件机器人采集数据,尤其是详情页的data采集功能比较有特色。
7、技术特点是:无需原软件厂商的配合;兼容性强,可以采集和汇总Windows平台上各种软件系统的数据;输出结构化数据;即用型,实现周期短,简单高效;配置简单,无需编程,人人都可以DIY一个软件机器人;价格远低于手动和界面。
8、缺点:采集软件数据的实时性有限。
9、网络爬虫是模拟客户端的网络请求并接收请求响应,并按照一定的规则自动从万维网上爬取信息的程序或脚本。
10、爬虫数据采集缺点:输出数据多为非结构化数据;只能采集网站数据,易受网站反爬机制影响;用户脸窄,需要专业的编程知识才能玩。
11、开放式数据库是采集和整合数据最直接的方式。
12、优点:开放数据库方式可以直接从目标数据库中获取需要的数据,准确率高,实时性有保证。这是最直接、最方便的方法。
13、缺点:开放数据库模式还需要协调各个软件厂商的数据库开放,这取决于对方的意愿。一般出于安全原因不会开放;如果一个平台同时连接多个软件厂商的数据库,并且实时获取数据,对平台的性能也是一个很大的挑战。 查看全部
完整解决方案:支持推荐应用的PaaS平台4A能力组件
平台即服务(PaaS,platform as a service)作为云计算的一种应用形式,为应用开发者提供高效、安全的应用托管能力[]。随着PaaS云平台的不断发展,平台能力的丰富性和多样化已经成为PaaS平台的核心竞争点和关键指标[]。所谓平台的“能力组件”,主要是指PaaS平台提供的、可供平台上其他应用调用的软件能力。4A是Authentication(认证)。)、Authorization(认证)、Accounting(计费)和Audit(审计)的缩写,4A为用户提供统一的用户身份认证管理,应用访问(access)权限控制,记账和账户管理,以及基于操作的日志审计等功能。通过分析PaaS平台上的应用[-]可以发现,很多应用都需要基本的4A能力,比如用户信息管理、账户管理等。因此,4A能力组件正是在PaaS云平台中。可重用的重要组件之一,可有效减少应用程序开发量,增加软件资产的重用性。同时,丰富强大的平台能力也可以让平台上的应用拥有更丰富、更强大的功能,提高应用竞争力。. 4A能力组件在提供4A能力的同时,还为用户提供单点登录(SSO,single sign on)功能,方便用户在各种应用之间无缝切换,一站式满足用户和应用的需求。提供统一认证、认证管理、账号管理、审计管理、SSO等功能需求。
1 4A能力组件需求分析
4A能力组件为用户提供用户注册、密码找回、信息管理、计费管理等账户管理相关功能,提供统一的认证服务,为不同的应用提供认证管理,提供用户行为信息的审计管理,支持单点登录和其他功能。
4A能力组件的应用对象是PaaS云中的应用开发者、应用用户和管理员。4A能力组件为应用开发者提供了一个简单、安全、高效的接口,方便开发者使用。为保证一站式服务用户体验,4A能力组件为应用用户和管理员提供用户入口和管理员入口,完成对用户信息和应用信息的管理。
4A组件的功能主要包括账户管理、认证管理、认证管理、审计管理和SSO。
1) 账户管理:账户管理分为三个部分。一是基本账户管理,包括用户注册、找回密码、修改密码等;二是用户信息管理,包括基本用户信息(基本用户信息、用户分机信息和用户权限信息)和好友信息(好友信息、朋友关系和朋友组)。最后是账单信息,包括用户余额和交易详情。
2) 统一认证:统一认证用于判断用户是否合法。认证过程通过 OAuth2.0 协议实现。应用开发者在使用能力组件提供的开放接口之前,需要获取用户的授权凭证access_token。. access_token 是第三方访问用户资源的凭证。只有通过这个凭证,第三方应用程序才能访问 4A 能力组件中的数据。
3) 应用认证:只有经过系统授权的应用才能获取用户信息。当应用通过4A能力组件获取用户信息时,会对第三方应用进行授权检查,未经授权的应用不会获取任何用户信息。
4)系统审计:4A能力组件通过日志系统记录用户行为和系统操作信息,完成相关日志的采集、存储和分析。
5) SSO:SSO 是一种流行的系统集成解决方案。SSO可以保证在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
2 4A 能力组件设计2.1 系统架构
系统架构图如图所示。该系统分为三个部分。最上层是Web服务层,即接口服务器(API Server)和与开发者、用户和管理员交互的Web接口。Web服务层主要负责管理员门户,特别是4A能力组件将用户门户作为能力组件的第三方应用,不与管理员门户在同一层。. 这是因为管理员门户需要更高的权限,开放API不提供相关功能,调用开放API也会造成效率下降。中间是逻辑功能层,主要完成系统中所有逻辑功能的实现,包括账户管理、统一认证[]、应用认证、系统审计和SSO[]等。系统的底层是基础组件层,包括基础组件和支撑组件。基础组件是系统运行的必备组件,主要包括MySQL、NFS和邮件服务等。支持组件是支持系统运行的可选组件,主要包括日志系统等。下面将重点介绍日志系统和接口服务器。
图1
图1
图1 4A能力组件系统架构图
2.2 日志系统
日志系统是4A能力组件的支撑组件,负责在4A能力组件中记录用户的行为信息,并与4A能力组件中的审计模块相关联。其系统架构如下图所示。
图 2
图 2
图2 日志系统架构图
日志系统支持采集,海量日志数据的存储和分析。系统提供高性能的日志读写,包括实时读取最新日志和批量读取历史数据。日志系统由Kafka分布式消息队列、HBase分布式数据库、生产者程序和消费者程序[]组成。生产者程序是4A能力组件中的一个审计模块,可以为用户提供用户行为数据。消费者程序是一个基于HTTP协议的API服务器,日志系统通过API向4A能力组件提供各种日志信息。

2.3 API 服务器
4A能力组件提供的开放API由4A能力组件中Web服务层的API Server提供。
2.3.1 API 设计
根据4A能力组件的开发者需求,开放API定义为两类:
1)用户级API:OAuth2.0登录的用户,必须携带access_token参数。用户级 API 主要用于访问个人用户信息。
2)应用级API:用于不使用OAuth2.0登录并已授权的第三方应用。应用程序级 API 将具有参数 source 而不是参数 access_token。参数 source 是 4A 能力的一个组成部分 管理员分配给应用的唯一 ID。
根据系统功能,API分为以下7类:
1) 身份验证 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用户关系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 组 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用户信息 API:/api/users/" target="_blank">/api/users/。
5) 帐户 API:/api/account/" target="_blank">/api/account/。
6) 计费 API:/api/billing/" target="_blank">/api/billing/。
7) 日志 API:/api/log/" target="_blank">/api/log/。
2.3.2 API安全解决方案
为了保证用户信息的安全可靠,用户级API和应用级API采用不同的安全方案。
1) 用户级 API
用户级 API 使用 access_token 是否过期或有效来判断用户的真实性,并返回相应的数据。用户的access_token仅在用户登录期间有效,有效期为24小时。
对于OAuth2.0相关的API,还增加了以下安全措施:
① OAuth2.0 获取参数代码时,可以添加参数状态,维护请求和回调的状态。当4A能力组件重定向到应用程序时,将返回该参数。开发者可以通过该参数验证请求的有效性,从而防止跨站请求伪造攻击。
② OAuth2.0通过参数code获取参数access_token时,尽量选择HTTP协议的POST方式传输请求。
2) 应用程序级 API
应用级API只传递参数源作为应用身份的认证是不安全的,所以4A能力组件使用参数签名来保护用户信息。构造参数签名的过程如下:
①分类参数:API中携带的参数分为系统参数和非系统参数。系统参数包括应用ID(参数来源)和应用密钥(与参数来源唯一匹配)。非系统参数是除系统参数外的所有参数。范围。

② 构造源字符串:将所有非系统参数和参数源按名称值升序排列,并用“&”连接,如k1=v1 & k2=v2 & ...,然后执行第一个MD5加密。
③ 构造密钥:在应用密钥末尾添加字符“&”。
④ 生成签名值签名:将源字符串和密钥以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一个新的字符串,再用MD5加密该值。注意连接的顺序会影响最终的签名值。
4A能力组件的API Server获取API中的各种参数,按照上述算法进行相同的加密过程。如果得到的签名值与参数签名一致,则证明API是安全的。
3 基于4A能力组件的推荐应用3.1 4A能力组件与推荐应用的关系
传统的4A组件只提供4A功能,如用户信息、好友信息等,而4A数据的特性让这些数据可以在更广泛的应用中使用。基于4A能力组件的推荐应用是PaaS云平台4A能力组件的一个应用示例。本应用分析4A能力组件中采集的用户行为信息,为用户推荐PaaS云平台现有的第三方应用。用户可以通过个性化服务快速定位到自己的采集夹。应用程序来解决人们在访问互联网时面临的“信息过载”问题。
4A能力组件记录用户使用4A能力组件时的所有用户行为,并提供日志API。根据4A能力组件的特点,用户行为包括用户注册、用户登录、首次登录、登录时长等。此外,在4A能力组件的用户门户中,用户还可以填写个人兴趣信息以进行为个性化推荐提供直接的数据支持。
推荐的应用程序首先需要连接到 4A 能力组件。访问工作主要由 4A 能力组件的管理员执行,对应用进行审核,并为应用分配唯一的应用 ID 和应用密钥对。然后,被推荐的应用程序可以通过日志API采集4A组件提供的用户行为数据,并基于这些数据进行数据处理、用户兴趣建模和算法推荐。
3.2 推荐应用系统架构
用户访问应用程序,通常具有某些偏好。推荐应用根据用户注册的个人信息定制用户描述文件。该文件可以由用户主动修改或由应用程序自动修改。当文件被应用修改时,应用需要采集用户行为数据,学习用户兴趣,从而调整用户兴趣模型,完成推荐算法。推荐应用的系统架构如图所示。推荐过程分三个阶段完成:数据采集、用户建模和个性化推荐。
图 3
图 3
图3 推荐应用系统架构图
1) 数据采集阶段:该阶段根据4A能力组件提供的用户信息和用户行为信息,完成用户行为采集和数据处理。用户数据的采集方法包括显式反馈和隐式反馈。类型。明确的反馈需要用户主动给出反馈和评价。隐式反馈由应用程序自动完成,不会给用户增加额外的负担。应用程序使用显式反馈和隐式反馈共同实现数据采集的过程。显式反馈使用填写用户信息的方法,隐式反馈调用4A能力组件的日志接口获取用户行为数据。4A能力组件的审计模块详细记录用户访问站点的数据,站点上的页面每被访问一次,web服务器在日志中添加一条日志记录,包括用户IP、请求页面的用户名、应用程序名称、请求时间和 URL。此外,审计模块还将完成基本的数据处理。
2) 用户兴趣建模阶段:该阶段根据用户兴趣建立评价矩阵模型。user-item评估矩阵使用一个Rm×n矩阵来表示用户模型,其中m是用户数,n是项目数。矩阵 R=[rij] 中的每个元素 rij 代表用户 i 对项目 j 的评价结果,一般为一定实数范围内的整数值(如 1~10)。通常越高价值越高,用户对项目的兴趣程度越高。这种表示简单、直观,可以直接从显式反馈采集的信息中生成。
(1)
在本应用中,rij 是用户 i 在一段时间内对应用 j 的兴趣程度。兴趣度的值由用户i对应用j的访问次数、访问时长、SSO流程中第一次登录是否进入应用以及是否在此注册等方面加权应用。
3) 个性化推荐阶段:在这个阶段,根据用户相似度得到一组用户邻居。然后根据邻居用户,对目标用户没有评分的物品进行预测和评分,返回评分最高的N(Top-N)个物品。
4。结论
针对现有PaaS平台开放能力的局限性,以及现有应用功能列表4A体系不规范,提出了PaaS云中的4A能力组件。该组件分为账户管理、统一认证、应用授权。、系统审计和 SSO 5 模块,并通过开放的 API、用户门户和管理员门户为开发人员、用户和管理员提供丰富和安全的 Web 服务。根据4A数据的特点和4A能力组件提供的能力,创新设计并实现了基于4A能力组件的推荐应用。该应用使用用户兴趣模型和协同过滤算法来实现对PaaS云平台现有应用的推荐,同时也验证了4A能力组件的可用性及其应用范围的广泛性。.
设计并实现的4A能力组件已应用于北京邮电大学“云海”PaaS平台,并被平台上多个第三方应用使用,如:面向群体的在线知识管理应用及其管理员门户(、)等。第三方应用开发者通过使用4A能力组件,简化应用开发流程,节省应用开发时间。PaaS云中的4A能力组件增加了软件资产的复用,更好地规范了用户信息的管理流程,开创了用户信息管理服务的新模式。
经验:数据采集技术包括哪几方面(优缺点分别是什么)
很多人不知道data采集技术包括哪些,优缺点,一起来看看吧!
1、通过各软件厂商开放的数据接口,可以实现不同软件数据的互联互通。这是目前最常见的数据连接方式。
2、优点:接口连接方式数据可靠性和价值高,一般不会出现数据重复;通过该接口可以实时传输数据,满足实时数据应用的要求。
3、缺点:接口开发成本高;(2)需要与多个软件厂商协调,工作量大,容易破解;扩展性低。比如由于新业务需要开发每个软件系统对于一个新的业务模块,它和它之间的数据接口大数据平台也需要做相应的修改和改变,甚至之前的数据接口代码都要全部翻过来,工作量大,时间长。

4、机器人是目前比较前沿的软件数据对接技术,即可以采集客户端软件数据和网站软件数据。
5、俗称博是小帮手软件机器人,产品设计原则是“所见即所得”,即无需软件厂商合作,采集上的数据软件界面将被输出。结果是结构化的数据库或 Excel 表。
6、如果只需要界面上的业务数据,或者软件厂商不配合/崩溃,数据库分析困难,最好使用软件机器人采集数据,尤其是详情页的data采集功能比较有特色。
7、技术特点是:无需原软件厂商的配合;兼容性强,可以采集和汇总Windows平台上各种软件系统的数据;输出结构化数据;即用型,实现周期短,简单高效;配置简单,无需编程,人人都可以DIY一个软件机器人;价格远低于手动和界面。
8、缺点:采集软件数据的实时性有限。

9、网络爬虫是模拟客户端的网络请求并接收请求响应,并按照一定的规则自动从万维网上爬取信息的程序或脚本。
10、爬虫数据采集缺点:输出数据多为非结构化数据;只能采集网站数据,易受网站反爬机制影响;用户脸窄,需要专业的编程知识才能玩。
11、开放式数据库是采集和整合数据最直接的方式。
12、优点:开放数据库方式可以直接从目标数据库中获取需要的数据,准确率高,实时性有保证。这是最直接、最方便的方法。
13、缺点:开放数据库模式还需要协调各个软件厂商的数据库开放,这取决于对方的意愿。一般出于安全原因不会开放;如果一个平台同时连接多个软件厂商的数据库,并且实时获取数据,对平台的性能也是一个很大的挑战。
总结:连载|浅谈红队中的外网信息收集(一)
采集交流 • 优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2022-09-28 00:06
文章首次发表于:
火线区社区()
前言
最近一直在整理总结以往学过的关于红队的知识点。这里我主要指的是ATT&CK矩阵模型,不过做了简化,增加了一些国内独有的情况。
一般会按照外网信息采集、管理、权限维护、权限升级、内网信息采集、横向移动、痕迹清理的顺序进行。
因为是总结文章,所以文章的重点是在“面”上而不是在具体的“点”上,所以文中的具体技术细节不再赘述,否则内容会有很多。
想了解具体细节的读者可以去我个人公众号TeamsSix的历史文章,里面会有一些点的描述文章。
限于个人水平,文中难免有错误或不恰当的描述,希望在评论中指出,希望理解。
确定目标
在开始信息采集之前,您必须首先确定目标。在红队项目或HW项目中,一般目标是公司名称,然后通过公司名称获取各种信息,进而进行外网管理、内网穿透等。
知道了目标公司的名称后,我们就可以开始采集信息的工作了。
外网信息采集
在这里我整理了以下信息采集的方法。当然,它肯定是不完整的。欢迎大家在评论区一起补充讨论:
1、组织所有权结构
拿到公司名称后,先别急着查记录找域名,而是先看公司的股权结构,因为一般一家公司的子公司也可以瞄准,但有时需要50%的股份。股份或100%持股,视实际情况而定。
比较常见的网站查询公司组织股权结构的有天眼查、七叉叉、爱七叉、小蓝本、钉钉七点等。
如果标的控股公司不多,可以直接看股权渗透图,比较直观;如果控股公司多,看股权渗透图就比较费劲了。
除了股权渗透,还可以看到它的外资信息
在这两个地方都可以找到目标持股的公司。
目标少一点没关系,一个一个的,但是目标太多了,效率就会很低。幸运的是,现在有现成的工具。
ENScanGo
ENScanGo 是现有开源项目 ENScan 的升级版。工具地址为:
这是沃尔夫集团安全团队Keac先生为解决企业信息采集难的问题而编写的工具。一键采集标的及其控股公司的ICP备案、APP、小程序、微信公众号等信息。然后聚合导出。
比如这里我采集的信息是“北京百度网通科技有限公司”。以及他持有50%股份的公司。
enscan -n 北京百度网讯科技有限公司 -invest-num 50
采集到的结果如下:
这样就直接省略了采集ICP备案的步骤,可以一键获取目标公司及其子公司的公司名称、APP、微信公众号、ICP备案等信息。
2、主域名查询
主域名查询可分为注册域名查询和未注册域名查询。
记录域名查询
除了上述企业信息查询网站获得的备案信息外,最完整、最准确的方法是去国家备案信息查询网站查询,地址为:。
除了官方渠道,还有一些第三方注册域名查询网站,比如站长之家等。
未注册域名查询
一些公司会将他们的其他业务站点放在 网站 的末尾,其中可能收录未记录的站点。
3、子域获取
比较常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目标,也可以提前采集一波子域,然后在项目即将启动的时候再采集一波子域,比较两次采集的结果,优先新的子域。
4、端口扫描
一般来说,最常见的是nmap和masscan。这是一个 nmap 快速扫描所有端口的命令。
nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p 1-65535 -iL ip.txt -oX output.xml
不过除了这些方法,fscan其实还可以用于外网的端口扫描,而且速度更快。
例如,使用 fscan 只扫描端口,而不是扫描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默认线程是600,因为外网扫描600的线程比较大,所以这里设置为100。如果扫描结果不理想,可以将线程设置得更小。
端口扫描可以与空间搜索引擎的结果相结合。如果空间搜索引擎发现目标中有很多高级端口,那么在进行端口扫描时记得添加这些高级端口。
5、指纹识别
指纹识别对我来说是很重要的一点,因为指纹识别的结果对管理很有帮助,可以让管理更有针对性,同时也可以节省很多时间。
比较常见的在线指纹查询网站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空间搜索引擎
通过使用空间搜索引擎,您有时可以在首次识别目标时发现目标弱点。
目前比较常见的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鹰、智创宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer为图形界面,使用友好。
下载链接:
FofaX 是一个命令行界面。FofaX 可以与其他工具结合使用。除了这两个工具调用Fofa接口外,上面提到的Ehole还可以调用Fofa查询。
坤宇调用ZoomEye的接口,工具下载地址:
7、api接口
获取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果发现一些未经授权的接口,可能会获得一些高价值的信息,例如大量敏感信息泄露。
另外,在翻转js文件的时候,可以注意是否有以runtime命名的js文件,因为这个js文件会收录其他js文件的名字(包括当前页面没有加载的js文件),所以使用运行时js文件我发现了更多的js文件,这使得找到api接口的概率更高。
8、目录访问
比较常用的目录扫描工具有dirsearch、ffuf
ffuf 更侧重于 FFUZ,但无论是目录扫描还是 FFUZ,扫描的结果都是字典,Github 上超过 4k 个star 的字典:
9、邮箱地址获取
邮件地址比较常用的方法是通过搜索引擎直接找到网上公开的邮件信息,往往指向目标的网站,例如目标的某个网页的附件中收录email和其他信息。
此外,您还可以使用Github在代码中搜索目标公司的开发人员评论的邮箱信息。其实我不明白为什么开发者喜欢在代码中评论自己的邮箱。
也可以通过LinkedIn找到目标公司的员工姓名,通过“拼音+@公司域名”的方式构建员工邮箱。
还有一些网站可以查询邮箱,比较方便,比如下面的网站:
另外,如果采集到目标Outlook站点,也可以尝试爆破邮箱用户名。
10、网盘信息
有时候可以在网盘资料中找到很多好东西,这样的网站还有很多。在爱达杂货店导航站可以找到很多网盘搜索网站。
11、附加信息
其他信息,如app、小程序、供应商、外包合作伙伴、公众号等,都可以从上面的组织股权结构类网站中或多或少的查询到,也可以使用ENScan。
其中,供应商和外包合作伙伴值得注意。如果拿下供应商,或许可以直接进入目标内网。如果赢得外包合作伙伴,可以利用这一层关系进行社会工作或尝试进入目标内网。
后记
当然,红队中采集的信息远不止上面所说的。其他常用的还有资产监控平台、社会工程库、自动化信息采集工具(如水泽)、各种内部红队平台等,篇幅有限。再次展开。
美好的过去文章
技巧:下载自媒体内容素材,帮你快速创造内容
下载自媒体内容材料,帮助您快速创建内容。在这个自媒体飞速发展的时代,大家都在这方面发展,但是对于一些新手来说,如何进行内容创作就成了一个难题,因为大家的知识储备都不是很丰富,经常会遇到没有灵感的情况。
对于这种情况,我们有一个很好的解决办法,就是找内容素材。内容素材的采集可以参考以下方法,一起来看看吧。
第一个:使用工具采集材料
当大家想到工具采集材质的时候,首先想到的就是一转,因为一转已经是家喻户晓的材质采集工具,它可以用于采集视频和文章素材,没有灵感的时候可以去一转搜索相关关键词,可以找到相关素材,还可以选择时间和平台材料发布。
二:搜索引擎找素材
这种找素材的方法也是比较常用的方法,很多人习惯直接去百度找素材。对于需要少量素材的自媒体的人来说也比较方便。选择您自己的主题。
第三:微博热搜榜
一般来说,关注微博热搜榜自媒体的人往往更多地在娱乐和社交领域。微博有实时列表。如果根据热点进行创作,你的流量肯定会增加。会很大,其他领域的作者也可以试试。
第四:知乎
知乎也是不错的素材采集,知乎素材很多,是一个问答平台,里面的答案也很精彩,你可以直接搜索相关知识,相信你会有所收获。大家素材采集完成后,可以直接使用易小儿一键发视频或者文章,省心省力。 查看全部
总结:连载|浅谈红队中的外网信息收集(一)
文章首次发表于:
火线区社区()
前言
最近一直在整理总结以往学过的关于红队的知识点。这里我主要指的是ATT&CK矩阵模型,不过做了简化,增加了一些国内独有的情况。
一般会按照外网信息采集、管理、权限维护、权限升级、内网信息采集、横向移动、痕迹清理的顺序进行。
因为是总结文章,所以文章的重点是在“面”上而不是在具体的“点”上,所以文中的具体技术细节不再赘述,否则内容会有很多。
想了解具体细节的读者可以去我个人公众号TeamsSix的历史文章,里面会有一些点的描述文章。
限于个人水平,文中难免有错误或不恰当的描述,希望在评论中指出,希望理解。
确定目标
在开始信息采集之前,您必须首先确定目标。在红队项目或HW项目中,一般目标是公司名称,然后通过公司名称获取各种信息,进而进行外网管理、内网穿透等。
知道了目标公司的名称后,我们就可以开始采集信息的工作了。
外网信息采集
在这里我整理了以下信息采集的方法。当然,它肯定是不完整的。欢迎大家在评论区一起补充讨论:
1、组织所有权结构
拿到公司名称后,先别急着查记录找域名,而是先看公司的股权结构,因为一般一家公司的子公司也可以瞄准,但有时需要50%的股份。股份或100%持股,视实际情况而定。
比较常见的网站查询公司组织股权结构的有天眼查、七叉叉、爱七叉、小蓝本、钉钉七点等。
如果标的控股公司不多,可以直接看股权渗透图,比较直观;如果控股公司多,看股权渗透图就比较费劲了。
除了股权渗透,还可以看到它的外资信息
在这两个地方都可以找到目标持股的公司。
目标少一点没关系,一个一个的,但是目标太多了,效率就会很低。幸运的是,现在有现成的工具。
ENScanGo
ENScanGo 是现有开源项目 ENScan 的升级版。工具地址为:
这是沃尔夫集团安全团队Keac先生为解决企业信息采集难的问题而编写的工具。一键采集标的及其控股公司的ICP备案、APP、小程序、微信公众号等信息。然后聚合导出。
比如这里我采集的信息是“北京百度网通科技有限公司”。以及他持有50%股份的公司。

enscan -n 北京百度网讯科技有限公司 -invest-num 50
采集到的结果如下:
这样就直接省略了采集ICP备案的步骤,可以一键获取目标公司及其子公司的公司名称、APP、微信公众号、ICP备案等信息。
2、主域名查询
主域名查询可分为注册域名查询和未注册域名查询。
记录域名查询
除了上述企业信息查询网站获得的备案信息外,最完整、最准确的方法是去国家备案信息查询网站查询,地址为:。
除了官方渠道,还有一些第三方注册域名查询网站,比如站长之家等。
未注册域名查询
一些公司会将他们的其他业务站点放在 网站 的末尾,其中可能收录未记录的站点。
3、子域获取
比较常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目标,也可以提前采集一波子域,然后在项目即将启动的时候再采集一波子域,比较两次采集的结果,优先新的子域。
4、端口扫描
一般来说,最常见的是nmap和masscan。这是一个 nmap 快速扫描所有端口的命令。
nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p 1-65535 -iL ip.txt -oX output.xml
不过除了这些方法,fscan其实还可以用于外网的端口扫描,而且速度更快。
例如,使用 fscan 只扫描端口,而不是扫描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默认线程是600,因为外网扫描600的线程比较大,所以这里设置为100。如果扫描结果不理想,可以将线程设置得更小。
端口扫描可以与空间搜索引擎的结果相结合。如果空间搜索引擎发现目标中有很多高级端口,那么在进行端口扫描时记得添加这些高级端口。
5、指纹识别
指纹识别对我来说是很重要的一点,因为指纹识别的结果对管理很有帮助,可以让管理更有针对性,同时也可以节省很多时间。
比较常见的在线指纹查询网站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空间搜索引擎
通过使用空间搜索引擎,您有时可以在首次识别目标时发现目标弱点。

目前比较常见的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鹰、智创宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer为图形界面,使用友好。
下载链接:
FofaX 是一个命令行界面。FofaX 可以与其他工具结合使用。除了这两个工具调用Fofa接口外,上面提到的Ehole还可以调用Fofa查询。
坤宇调用ZoomEye的接口,工具下载地址:
7、api接口
获取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果发现一些未经授权的接口,可能会获得一些高价值的信息,例如大量敏感信息泄露。
另外,在翻转js文件的时候,可以注意是否有以runtime命名的js文件,因为这个js文件会收录其他js文件的名字(包括当前页面没有加载的js文件),所以使用运行时js文件我发现了更多的js文件,这使得找到api接口的概率更高。
8、目录访问
比较常用的目录扫描工具有dirsearch、ffuf
ffuf 更侧重于 FFUZ,但无论是目录扫描还是 FFUZ,扫描的结果都是字典,Github 上超过 4k 个star 的字典:
9、邮箱地址获取
邮件地址比较常用的方法是通过搜索引擎直接找到网上公开的邮件信息,往往指向目标的网站,例如目标的某个网页的附件中收录email和其他信息。
此外,您还可以使用Github在代码中搜索目标公司的开发人员评论的邮箱信息。其实我不明白为什么开发者喜欢在代码中评论自己的邮箱。
也可以通过LinkedIn找到目标公司的员工姓名,通过“拼音+@公司域名”的方式构建员工邮箱。
还有一些网站可以查询邮箱,比较方便,比如下面的网站:
另外,如果采集到目标Outlook站点,也可以尝试爆破邮箱用户名。
10、网盘信息
有时候可以在网盘资料中找到很多好东西,这样的网站还有很多。在爱达杂货店导航站可以找到很多网盘搜索网站。
11、附加信息
其他信息,如app、小程序、供应商、外包合作伙伴、公众号等,都可以从上面的组织股权结构类网站中或多或少的查询到,也可以使用ENScan。
其中,供应商和外包合作伙伴值得注意。如果拿下供应商,或许可以直接进入目标内网。如果赢得外包合作伙伴,可以利用这一层关系进行社会工作或尝试进入目标内网。
后记
当然,红队中采集的信息远不止上面所说的。其他常用的还有资产监控平台、社会工程库、自动化信息采集工具(如水泽)、各种内部红队平台等,篇幅有限。再次展开。
美好的过去文章
技巧:下载自媒体内容素材,帮你快速创造内容
下载自媒体内容材料,帮助您快速创建内容。在这个自媒体飞速发展的时代,大家都在这方面发展,但是对于一些新手来说,如何进行内容创作就成了一个难题,因为大家的知识储备都不是很丰富,经常会遇到没有灵感的情况。
对于这种情况,我们有一个很好的解决办法,就是找内容素材。内容素材的采集可以参考以下方法,一起来看看吧。
第一个:使用工具采集材料

当大家想到工具采集材质的时候,首先想到的就是一转,因为一转已经是家喻户晓的材质采集工具,它可以用于采集视频和文章素材,没有灵感的时候可以去一转搜索相关关键词,可以找到相关素材,还可以选择时间和平台材料发布。
二:搜索引擎找素材
这种找素材的方法也是比较常用的方法,很多人习惯直接去百度找素材。对于需要少量素材的自媒体的人来说也比较方便。选择您自己的主题。
第三:微博热搜榜

一般来说,关注微博热搜榜自媒体的人往往更多地在娱乐和社交领域。微博有实时列表。如果根据热点进行创作,你的流量肯定会增加。会很大,其他领域的作者也可以试试。
第四:知乎
知乎也是不错的素材采集,知乎素材很多,是一个问答平台,里面的答案也很精彩,你可以直接搜索相关知识,相信你会有所收获。大家素材采集完成后,可以直接使用易小儿一键发视频或者文章,省心省力。
秘密:如何对专属SRC进行信息收集
采集交流 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-09-27 23:15
前言
一直觉得自己的资料采集不太好,最近才在挖独家。顺便总结一下公司的信息采集方式
以xxx公司为例
根域名:
涉及本公司的部分已经编码,补充部分使用一定的安心和一定的度数
一、子域集合1.Oneforall
尽量把API凑齐,如果fofa可以请大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一个在网页的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
运行后会生成两个txt文本,JSurl.txt是URL,里面会有一些接口,
JSdomain.txt 是一个子域
3.图层
4.subDomainsBrute
<p style="outline: 0px;">python subDomainsBrute.py -t 10 xxx.cn -o xxx.cn.txt
python subDomainsBrute.py -t 10 --full xxx.cn -o xxx.cn.txt //全扫描</p>
5.子列表3r
此工具可以安装在 Kali 和 Windows 环境中
卡利:
<p style="outline: 0px;">git clone https://github.com/aboul3la/Sublist3r</p>
下载后
<p style="outline: 0px;">python sublist3r.py -d 6pian.cn -o xxx.cn-sublist3r.txt</p>
6.DNSdumpster
非常好用的域名搜索网站,还会自动汇总同一个IP的多个域名
7.在线域名爆炸
8. 小蓝图
9.谷歌语法
谷歌/必应:网站:
<p style="outline: 0px;">site:xxx.cn</p>
如果你发现很多检索到的结果都是www,那是众所周知的,主站点一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
结果会自动删除www
然后一一减去网站
二、公众号采集1.搜狗搜索引擎
2.企业叉叉
三、微信小程序七叉戟
爱奇茶之类的都可以用,但是我发现爱奇茶找到的奇茶并不多,不过大家都可以试试
四、 应用程序1.小蓝图
2.企业叉叉
3.浸
4.七麦
七麦也可以在这里切换苹果和安卓
然后获取下载链接下载apk并扔进模拟器
五、 指纹识别1. BugScaner
主站不识别,其他分站可以扔进去看看
2.潮汐指纹
3.Kscan
此工具需要go环境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github
github敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区。安全意识薄弱的同事经常将公司代码、各种服务账号等极其敏感的信息“开源”到github。
这里可以使用github找到带有这个关键字的代码,这样可以采集到更广泛的方面
2.网盘搜索
很多磁盘:
磁盘搜搜:
磁盘搜索:
凌云峰搜索:
直接输入厂家名称,然后搜索看看源代码是否泄露,或者什么账号密码之类的
3.路径扫描
404,403页,并不是真的什么都没有,需要一层一层的fuzz,一层一层的往下扫
工具:
1.目录搜索
2.剑
3.7kbscan
当每个工具扫描同一个站点时,会显示不同的路径。建议扫描所有三个工具。
找到一些其他的东西,比如背景、登录系统等。你可以使用 Google Hacking
<p style="outline: 0px;">site:xxx.com admin
site:xxx.com login
site:xxx.com system
site:xxx.com 管理
site:xxx.com 登录
site:xxx.com 内部
site:xxx.com 系统</p>
4.基于证书
5. 查找 网站
这个图标基于 shodan
Shodan搜索中有一个网站icon图标的搜索语法,http.favicon.hash,我们可以用这个语法搜索网站
使用相同图标的图标
因为哈希是一个未知的随机数
所以通过输入某个hash值来搜索指定图标的网站是不可能的
只有查看一个已经被Shodan收录使用过的网站的hash值,才能进一步得到所有带有某个图标的网站。
那么这里的用法就很有限了,你只能尝试找到你需要找到的网站,因为Shodan不一定收录你要搜索的网站。
那么如果Shodan收录有某个ip,并且这个服务器有某个图标,我可以搜索所有有这个图标的服务器ip吗?答案是肯定的。
以百度为例,这里是一个ip为180.97.34.35的服务器,截图如下
如果我想搜索所有带有这个图标的ip地址,我可以先在Shodan中搜索这个ip
在此之前我没有注意到的一件事是 Shodan 的原创数据(Raw Data)函数
点击详情中的查看原创数据,打开原创数据,可以看到Shodan存储的这个ip的所有信息。因为东西太多,就不一一截图了
这里我们需要用到这个关于图标hash的字段,data。0.http.favicon.hash,
如图
可以看到结果是-1507567067,
知识和经验:信息采集
这个功能是第一个数据采集功能,我也做了一个用于第二个整理:存档
如果你有更好的想法和使用方法,欢迎交流
---
以obsidian作为数据处理中心,支持日常工作采集和一键生成tick list to-do
支持的采集方式:
1、选择文字快速采集
2、OCR识别与采集
3、截图集
4、快速文件采集
操作方法:复制文件或文件夹,可以快速将文件分类成黑曜石。如果是文件夹,会自动删除文件夹,按文件采集
5、数学公式快速采集(使用默认界面,每次识别花费Q豆)
6、生成待办事项并设置提醒时间
一键生成文本待办,并在tick list中回写黑曜石链接
一键生成文件待办,在tick列表中回写黑曜石链接
7、结合手机日历功能,可实现手机自动提醒,华为手机可一次性播放日历内容,使用更方便!
使用前需要下载tick list、obsidian、需要设置的日历文件夹、附件存放文件夹 查看全部
秘密:如何对专属SRC进行信息收集
前言
一直觉得自己的资料采集不太好,最近才在挖独家。顺便总结一下公司的信息采集方式
以xxx公司为例
根域名:
涉及本公司的部分已经编码,补充部分使用一定的安心和一定的度数
一、子域集合1.Oneforall
尽量把API凑齐,如果fofa可以请大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一个在网页的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
运行后会生成两个txt文本,JSurl.txt是URL,里面会有一些接口,
JSdomain.txt 是一个子域
3.图层
4.subDomainsBrute
<p style="outline: 0px;">python subDomainsBrute.py -t 10 xxx.cn -o xxx.cn.txt
python subDomainsBrute.py -t 10 --full xxx.cn -o xxx.cn.txt //全扫描</p>
5.子列表3r
此工具可以安装在 Kali 和 Windows 环境中
卡利:
<p style="outline: 0px;">git clone https://github.com/aboul3la/Sublist3r</p>
下载后
<p style="outline: 0px;">python sublist3r.py -d 6pian.cn -o xxx.cn-sublist3r.txt</p>
6.DNSdumpster
非常好用的域名搜索网站,还会自动汇总同一个IP的多个域名
7.在线域名爆炸
8. 小蓝图
9.谷歌语法
谷歌/必应:网站:

<p style="outline: 0px;">site:xxx.cn</p>
如果你发现很多检索到的结果都是www,那是众所周知的,主站点一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
结果会自动删除www
然后一一减去网站
二、公众号采集1.搜狗搜索引擎
2.企业叉叉
三、微信小程序七叉戟
爱奇茶之类的都可以用,但是我发现爱奇茶找到的奇茶并不多,不过大家都可以试试
四、 应用程序1.小蓝图
2.企业叉叉
3.浸
4.七麦
七麦也可以在这里切换苹果和安卓
然后获取下载链接下载apk并扔进模拟器
五、 指纹识别1. BugScaner
主站不识别,其他分站可以扔进去看看
2.潮汐指纹
3.Kscan
此工具需要go环境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github

github敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区。安全意识薄弱的同事经常将公司代码、各种服务账号等极其敏感的信息“开源”到github。
这里可以使用github找到带有这个关键字的代码,这样可以采集到更广泛的方面
2.网盘搜索
很多磁盘:
磁盘搜搜:
磁盘搜索:
凌云峰搜索:
直接输入厂家名称,然后搜索看看源代码是否泄露,或者什么账号密码之类的
3.路径扫描
404,403页,并不是真的什么都没有,需要一层一层的fuzz,一层一层的往下扫
工具:
1.目录搜索
2.剑
3.7kbscan
当每个工具扫描同一个站点时,会显示不同的路径。建议扫描所有三个工具。
找到一些其他的东西,比如背景、登录系统等。你可以使用 Google Hacking
<p style="outline: 0px;">site:xxx.com admin
site:xxx.com login
site:xxx.com system
site:xxx.com 管理
site:xxx.com 登录
site:xxx.com 内部
site:xxx.com 系统</p>
4.基于证书
5. 查找 网站
这个图标基于 shodan
Shodan搜索中有一个网站icon图标的搜索语法,http.favicon.hash,我们可以用这个语法搜索网站
使用相同图标的图标
因为哈希是一个未知的随机数
所以通过输入某个hash值来搜索指定图标的网站是不可能的
只有查看一个已经被Shodan收录使用过的网站的hash值,才能进一步得到所有带有某个图标的网站。
那么这里的用法就很有限了,你只能尝试找到你需要找到的网站,因为Shodan不一定收录你要搜索的网站。
那么如果Shodan收录有某个ip,并且这个服务器有某个图标,我可以搜索所有有这个图标的服务器ip吗?答案是肯定的。
以百度为例,这里是一个ip为180.97.34.35的服务器,截图如下
如果我想搜索所有带有这个图标的ip地址,我可以先在Shodan中搜索这个ip
在此之前我没有注意到的一件事是 Shodan 的原创数据(Raw Data)函数
点击详情中的查看原创数据,打开原创数据,可以看到Shodan存储的这个ip的所有信息。因为东西太多,就不一一截图了
这里我们需要用到这个关于图标hash的字段,data。0.http.favicon.hash,
如图
可以看到结果是-1507567067,
知识和经验:信息采集
这个功能是第一个数据采集功能,我也做了一个用于第二个整理:存档
如果你有更好的想法和使用方法,欢迎交流
---
以obsidian作为数据处理中心,支持日常工作采集和一键生成tick list to-do
支持的采集方式:
1、选择文字快速采集

2、OCR识别与采集
3、截图集
4、快速文件采集
操作方法:复制文件或文件夹,可以快速将文件分类成黑曜石。如果是文件夹,会自动删除文件夹,按文件采集
5、数学公式快速采集(使用默认界面,每次识别花费Q豆)
6、生成待办事项并设置提醒时间
一键生成文本待办,并在tick list中回写黑曜石链接

一键生成文件待办,在tick列表中回写黑曜石链接
7、结合手机日历功能,可实现手机自动提醒,华为手机可一次性播放日历内容,使用更方便!
使用前需要下载tick list、obsidian、需要设置的日历文件夹、附件存放文件夹
官方数据:爬虫数据采集
采集交流 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-09-26 07:16
经常有小伙伴需要将互联网上的数据保存在本地,但又不想一一复制。我们首先想到的就是爬虫,可以说是组成了我们精彩的互联网世界。
网络搜索引擎和其他一些网站使用网络爬虫或蜘蛛软件来更新他们的网络内容或其他网站网络内容索引。网络爬虫复制页面以供搜索引擎处理,搜索引擎将下载的页面编入索引,以便用户更有效地搜索。
这一切都归功于爬虫数据采集。在这篇文章我总结了爬虫数据采集的过程,从最简单的基础爬虫开始,到爬虫获取到的数据采集如何存储,我们如何规避它。采取一些反爬措施,获取我们需要的数据,进行爬虫的数据采集:
通过以上18篇文章,详细介绍了整个爬虫采集流程,几乎涉及到爬虫的方方面面采集。
解决方案:任意网页文章内容提取(采集)算法
任意网页文章内容提取(采集)算法
标签:采集程序开发 2014-04-09 19:10 星期三
做过采集的人都知道,要采集一个网站,需要按照网站的结构写一个正则模式。这是最传统的方法。这种方法的好处是采集精度可以很精细,采集任意结构网站,但是这种方法也很有限,一套规则只能用于一个网站 ,如果结构发生变化,需要重新分析和调整规则,非常被动。
我一直在想,如果程序能达到人类的识别水平,那么它就可以采集any网站文本的内容。网上搜索了一下,已经有很多类似的算法了。有以下几种:
1、基于Dom树
1),使用开源包HTML Tidy处理HTML,纠正错误或不规范;
2),按照更标准的HTML构建Dom树,然后递归遍历Dom树,比较识别各种非文本信息,包括广告、链接组和非重要节点信息;广告信息清除:需要建立广告服务器频繁更新列表;链接组去除:计算网页中收录的链接数与非链接词数的比值;
3),去掉非文本信息后,Dom树中剩下的内容就是文本信息,直接从剩余的树节
从点中提取。
有一个问题:Dom树的建立对HTML是否良构有很高的要求,树的建立和遍历是时空的
复杂度高,遍历树的方式会因HTML标签的不同而有所差异。
2、根据网页切分查找文本块
1),网页正确切分后,文本提取工作简化为对文本块的判断;
2),分割是在HTML标签和一些视觉信息(如文本颜色、字体大小、文本信息等)中使用分隔线。
存在问题:不同网站的HTML样式差异很大,没有统一的切分方法,通用性难以保证。
3、基于标记窗口
1),先取出文章标题;
2),这两个标签和它们一起收录的文本称为标签窗口(例如text in text就是标签窗口中的文本),将标签窗口中的文本全部取出;
3),每个标记窗口内的文章标题和文本的分词;
4),计算标题序列与每个标签窗口文本序列之间的单词距离L,如果L小于某个阈值,则认为该标签窗口中的文本为正文。
有一个问题:标注窗口的制定很好,但是每个标注窗口的文本都要先切分,还要计算词序距离,效率?
4、基于数据挖掘或机器学习
使用了文本分类、聚类、隐马模型、数据挖掘等。
有问题:简单的问题复杂化。
5、基于逻辑行数和最大接受距离的网页文本提取
1),在人们写网页的时候考虑一些启发式规则,考虑到文字的物理位置会很接近;
2),做出以下推论:
HTML的每一行代表一个完整的语义;
身体代码将在物理上靠近;
一行正文代码主要是文本;
一行正文代码中的非HTML标签数量较多;
一行正文代码中超链接长度的比例不会很大;
3),任何符合上述推论的代码行都被认为是正文行;
有一个问题:文字确实会在物理上接近,但是长标题和长文章评论的链接组也满足上述条件。还是靠html标签来做判断的。
6、基于行块分布函数的通用网页文本提取:线性时间,不建DOM树,独立于HTML标签
首次将网页文本提取问题转化为页面的行块分布函数。这种方法不需要构建Dom树,也没有病态HTML的包袱(其实和HTML标签无关)。通过线性时间建立的线块分布函数图,可以直接准确定位网页正文。同时采用统计与规则相结合的方法来处理一般性问题。作者认为,简单的事情总是应该用最简单的方法来解决。整个算法实现代码不到一百行。但数额并不多,这是在法律规定的。
项目网址:,/p/cx-extractor/
以上算法均来自第六种算法的分析论文。
第 6 种算法在我看来是最好的算法,它快速且易于实现。但也有缺点。该算法主要针对采集文章,即文本内容较多的网页,因为原理是对网页进行去标签,然后分块,哪个块有更多的文字。认为是文字,在使用过程中发现如下问题:
1、不能采集图像;
2、误区采集链接聚合块作为正文,如:相关文章、文章导读,这些地方的标题文字有时可能会超出正文文本;
3、没有标题识别。
对代码的简单修复解决了上述问题:
1、保存图片标签,改用[img=x];
2、保存链接文本,使用[a=x]代替链接块;
3、标题识别比较容易,可以从标题中获取,然后做简单的过滤。
修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者也在论文中解释了这一点。
目前方案还没有完全准确,个别类型网站还是不适用的,比如相册(纯图片)、电影(线路链接)。
应用:,/
网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度找到类似的网站,但那些网站可能不是这样的,也可能是简单的关键词积累。
相信经过重新设计,我们可以实现更精准的匹配,效果会越来越好!
修复完美,到时候分享代码。请关注我的博客Slipper Station(,/),希望和大家一起学习。 查看全部
官方数据:爬虫数据采集
经常有小伙伴需要将互联网上的数据保存在本地,但又不想一一复制。我们首先想到的就是爬虫,可以说是组成了我们精彩的互联网世界。

网络搜索引擎和其他一些网站使用网络爬虫或蜘蛛软件来更新他们的网络内容或其他网站网络内容索引。网络爬虫复制页面以供搜索引擎处理,搜索引擎将下载的页面编入索引,以便用户更有效地搜索。
这一切都归功于爬虫数据采集。在这篇文章我总结了爬虫数据采集的过程,从最简单的基础爬虫开始,到爬虫获取到的数据采集如何存储,我们如何规避它。采取一些反爬措施,获取我们需要的数据,进行爬虫的数据采集:

通过以上18篇文章,详细介绍了整个爬虫采集流程,几乎涉及到爬虫的方方面面采集。
解决方案:任意网页文章内容提取(采集)算法
任意网页文章内容提取(采集)算法
标签:采集程序开发 2014-04-09 19:10 星期三
做过采集的人都知道,要采集一个网站,需要按照网站的结构写一个正则模式。这是最传统的方法。这种方法的好处是采集精度可以很精细,采集任意结构网站,但是这种方法也很有限,一套规则只能用于一个网站 ,如果结构发生变化,需要重新分析和调整规则,非常被动。
我一直在想,如果程序能达到人类的识别水平,那么它就可以采集any网站文本的内容。网上搜索了一下,已经有很多类似的算法了。有以下几种:
1、基于Dom树
1),使用开源包HTML Tidy处理HTML,纠正错误或不规范;
2),按照更标准的HTML构建Dom树,然后递归遍历Dom树,比较识别各种非文本信息,包括广告、链接组和非重要节点信息;广告信息清除:需要建立广告服务器频繁更新列表;链接组去除:计算网页中收录的链接数与非链接词数的比值;
3),去掉非文本信息后,Dom树中剩下的内容就是文本信息,直接从剩余的树节
从点中提取。
有一个问题:Dom树的建立对HTML是否良构有很高的要求,树的建立和遍历是时空的
复杂度高,遍历树的方式会因HTML标签的不同而有所差异。
2、根据网页切分查找文本块
1),网页正确切分后,文本提取工作简化为对文本块的判断;
2),分割是在HTML标签和一些视觉信息(如文本颜色、字体大小、文本信息等)中使用分隔线。
存在问题:不同网站的HTML样式差异很大,没有统一的切分方法,通用性难以保证。
3、基于标记窗口
1),先取出文章标题;

2),这两个标签和它们一起收录的文本称为标签窗口(例如text in text就是标签窗口中的文本),将标签窗口中的文本全部取出;
3),每个标记窗口内的文章标题和文本的分词;
4),计算标题序列与每个标签窗口文本序列之间的单词距离L,如果L小于某个阈值,则认为该标签窗口中的文本为正文。
有一个问题:标注窗口的制定很好,但是每个标注窗口的文本都要先切分,还要计算词序距离,效率?
4、基于数据挖掘或机器学习
使用了文本分类、聚类、隐马模型、数据挖掘等。
有问题:简单的问题复杂化。
5、基于逻辑行数和最大接受距离的网页文本提取
1),在人们写网页的时候考虑一些启发式规则,考虑到文字的物理位置会很接近;
2),做出以下推论:
HTML的每一行代表一个完整的语义;
身体代码将在物理上靠近;
一行正文代码主要是文本;
一行正文代码中的非HTML标签数量较多;
一行正文代码中超链接长度的比例不会很大;
3),任何符合上述推论的代码行都被认为是正文行;
有一个问题:文字确实会在物理上接近,但是长标题和长文章评论的链接组也满足上述条件。还是靠html标签来做判断的。
6、基于行块分布函数的通用网页文本提取:线性时间,不建DOM树,独立于HTML标签

首次将网页文本提取问题转化为页面的行块分布函数。这种方法不需要构建Dom树,也没有病态HTML的包袱(其实和HTML标签无关)。通过线性时间建立的线块分布函数图,可以直接准确定位网页正文。同时采用统计与规则相结合的方法来处理一般性问题。作者认为,简单的事情总是应该用最简单的方法来解决。整个算法实现代码不到一百行。但数额并不多,这是在法律规定的。
项目网址:,/p/cx-extractor/
以上算法均来自第六种算法的分析论文。
第 6 种算法在我看来是最好的算法,它快速且易于实现。但也有缺点。该算法主要针对采集文章,即文本内容较多的网页,因为原理是对网页进行去标签,然后分块,哪个块有更多的文字。认为是文字,在使用过程中发现如下问题:
1、不能采集图像;
2、误区采集链接聚合块作为正文,如:相关文章、文章导读,这些地方的标题文字有时可能会超出正文文本;
3、没有标题识别。
对代码的简单修复解决了上述问题:
1、保存图片标签,改用[img=x];
2、保存链接文本,使用[a=x]代替链接块;
3、标题识别比较容易,可以从标题中获取,然后做简单的过滤。
修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者也在论文中解释了这一点。
目前方案还没有完全准确,个别类型网站还是不适用的,比如相册(纯图片)、电影(线路链接)。
应用:,/
网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度找到类似的网站,但那些网站可能不是这样的,也可能是简单的关键词积累。
相信经过重新设计,我们可以实现更精准的匹配,效果会越来越好!
修复完美,到时候分享代码。请关注我的博客Slipper Station(,/),希望和大家一起学习。
测评:前端监控系列3 | 如何衡量一个站点的性能好坏
采集交流 • 优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-09-21 13:16
注意干货,不要迷路
1. 背景
你知道有多少用户没有等待第一个屏幕出现就离开了吗?性能不佳会对业务目标产生负面影响。例如,BBC 发现,他们的 网站 加载时间每增加一秒,他们就会失去 10% 的用户。高绩效网站比低绩效网站更能吸引和留住用户,而用户留存对于提高用户转化率至关重要。
本篇文章就是以此为背景,介绍Byte如何内部衡量网站性能,以及如何依靠性能监控来定位在线网站性能问题。
2. 如何衡量网站性能
网站性能有多种表现形式。并不是简单的以页面加载速度和页面渲染速度来衡量,而是需要关注用户从页面加载开始到关闭过程的性能感知。一个页面,即使渲染得很快,如果对用户交互反应慢,那么网站在用户心目中的表现还是很差的。
站点性能一般可以分为两类,一类是首屏性能,一类是运行时性能。前者衡量页面从加载到稳定交互的性能,后者衡量页面稳定后直到页面关闭的性能。
3. 首屏表现
早在 2012 年,Web 性能工作组 [1] 就针对页面加载场景开发了一个加载过程模型,用于衡量页面加载各个阶段的耗时,从而衡量页面加载的性能。具体加载过程模型如图:
该模型定义了从开始页面加载到完成整个页面加载过程的时间点。除了正常的初始化和拉到主文档之外,还包括解析和渲染的详细时间点。例如:
虽然开发者可以根据这些时间点来衡量页面加载的性能,但在线用户却无法真正感知到这些时间点之间的差异。对于用户来说,只有页面什么时候开始渲染,主要内容什么时候渲染,什么时候可以交互,交互是否有延迟。
那么有没有什么指标可以用来衡量用户感知的四个阶段呢?
3.1 何时开始渲染:FP && FCP
这两个指标来源于Paint Timing [2]标准,主要记录页面加载过程中的一些关键时间点。使用这两个指标,您可以衡量页面何时开始呈现内容。
3.2 主要内容什么时候渲染:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时呈现其主要内容。但是,业内一些测试表明,LCP与FMP的时间点非常相似。同时,FMP对性能的消耗很大,会因为一些微小的变化而造成数值的巨大波动。因此,建议使用 LCP。但由于计算复杂、指标解读困难,SI一般只用于实验室环境。
3.3 我们什么时候可以互动:TTI && TBT
虽然 TTI 可以测量页面可以交互的时间点,但它无法感知此期间浏览器的繁忙状态。结合 TBT,它有助于了解页面在加载期间无法响应用户输入的时间。
3.4 交互时是否有延迟:FID && MPFID
MPFID是虚拟可能的延迟时间,FID是用户真正的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户对整个应用建立良好的印象。同时,在页面加载阶段,资源处理任务最重,最容易出现输入延迟。
至此,通过以上各阶段的指标,基本可以全面衡量首屏的表现。那么如何衡量运行时性能呢?
4. 运行时性能
运行时性能通常可以通过 Long 任务来感知。长任务主要衡量主线程的繁忙程度。
4.1 长任务
如果一个任务在主线程上运行的时间超过 50 毫秒,它就是一个 Long 任务。如果你能在运行时采集所有的 Long 任务,你就可以知道运行时的性能。在具体实践中,可以将注意力集中在耗时较长的长任务上,并将其与用户行为相关联,可以有效帮助定位网卡原因。
5. 绩效指标的计算原理
有与页面性能相关的指标,那么如何采集这些数据呢?
5.1 采集页面加载过程的耗时阶段
页面加载过程中的时间点主要取决于 Navigation Timing [4] 标准。该标准后来升级为 2.0 版本,对应于 Navigation Timing 2 [5] 标准。两者虽然不同,但可以计算出来。指标基本一致。在浏览器中,可以通过以下方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
根据这些数据,不仅可以计算出 DNS/TCP/Request 的耗时,还可以计算出 DOMReady/DOMParse/Load 的耗时。
5.2 采集 FP && FCP
FP和FCP可以直接通过浏览器提供的API获取,所以采集的原理并不复杂。如果页面已经完成了第一次绘制和第一次内容绘制,可以使用下面的方法直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有第一次开始绘制,则需要通过监听来获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
5.3 采集 LCP
LCP主要依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});
浏览器会多次上报 LCP,一般来说真正的 LCP 是用户交互前最近一次上报的 LCP。因为交互往往会改变用户所看到的,所以用户交互后新上报的 LCP 不再符合 LCP 指标定义。
5.4 采集 与FP/FCP/LCP相比,FMP的采集比较复杂,需要通过算法计算,业界没有统一的算法。但是,比较公认的计算FMP的方法是“确定在加载和渲染过程中页面最大布局变化后的绘制时间为当前页面的FMP”。
由于在页面渲染过程中,“DOM结构变化的时间点”和对应的“渲染时间点”大致相同,所以内部以字节为单位计算FMP的方式是计算DOM结构发生变化的时间点大多数,那就是FMP。
具体步骤如下:
通过 MutationObserver 监控整个页面的每一个 DOM 变化,并触发 MutationObserver 的回调。当回调计算当前DOM树的score并结算时,score对比变化最大的时刻是FMP5.5 采集 TTI && TBT
与FMP类似,浏览器并没有提供直接获取TTI的API,但是有详细的说明如何计算TTI,通过实现相应的说明就可以得到TTI的时间点。
具体描述是:先找到FCP的时间点,然后再找一个安静的窗口向前。一个安静的窗口需要满足三个条件: 1) No Long 任务。2)窗口中处理的 GET 请求不超过两个。3) 窗口时间窗口读取至少应为 5 秒。
窗口前最后一个长任务的结束时间是 TTI。
TBT 可以通过将 FCP 和 TTI 之间的长任务的阻塞时间相加得到。
阻塞时间是Long任务中超过50ms后的任务时间。
5.6 采集 FID && MPFID
FID也依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务时间。可以监控 FCP 后的 Long 任务,比较最长的 long 任务是 MPFID。
虽然浏览器提供了足够的 API 来帮助采集单个性能指标,但在 JS 中计算特定指标更加复杂。原因有二:一是API上报的内容与指标本身的定义存在一些差异,所以在计算时需要处理这些差异;二是在某些场景下,浏览器不会上报相应的内容,需要在这些场景下进行仿真测量。
6. 如何评估网站的整体性能
尽管有许多绩效指标,但每个绩效指标评估一个方面。如何看网站的整体表现是好是坏?对于每一个单独的指标,是否有一个标准来定义指标值被认为是好的特定范围?在线网站性能应考虑哪些性能指标?每个绩效指标的适当权重是多少?
6.1 绩效指标基线
谷歌提供了各种性能指标的基准,具有一定的参考意义。
为什么仅供参考?首先,基线本身正在发生变化。随着指标计算的逐步更新和软硬件的更新,基线也会有一定程度的调整。其次,用户的使用场景也会对性能指标产生很大影响。例如,iOS 用户报告的性能指标普遍优于 Android 用户报告的性能指标。
下面是字节目前内部使用的一些性能指标的基准,基本与谷歌推荐的基准一致。通过这些数据,可以分析网站的绩效达标率。
指标名称Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500
超过 2500
FCP
0-1800
1800-3000
超过 3000
液晶面板
0-2500
2500-4000
超过 4000
TTI
0-3800
3800-7300
超过 7300
FID
0-100
100-300
超过 300
6.2 测量网站满意度
除了常规的性能指标外,网站满意度的衡量还应考虑基于体验的指标,例如专门衡量视觉稳定性的 CLS。
在线站点满意度测量一般会根据灯塔的满意度计算规则,去除一些推荐在实验室环境中测量的指标的权重。
以下是Bytes目前使用的在线站点性能满意度权重计算公式,去掉了SI和TBT这两个不推荐用于在线环境测量的指标。
然后有了一个站点的满意度,我们终于可以知道一个站点的性能好坏了。那么假设性能不好,我们应该如何优化呢?
7. 如何优化网站性能
通常,我们可以从性能指标入手,进行有针对性的优化。虽然指标不同,但优化思路是一样的。了解指标的依赖关系后,可以通过优化指标的相关依赖关系,快速优化性能指标,从而提升站点性能。
听起来很抽象,举个例子:比如我们要优化TTI的时候,根据刚才提到的TTI的计算方法,可以得出TTI的依赖主要有FCP、request和Long任务,然后尽快渲染尽可能快的请求,尽快结束请求,避免长时间的任务是优化的关键。指标的具体优化措施有很多,后续文章会介绍。
了解全面的优化措施很重要,但每一项都不一定能有效解决您网站面临的关键性能问题。如何做到立即有针对性的去优化?通过恢复用户加载时的外观来帮助定位性能问题是一个想法。
8. 使用在线监控定位性能问题
一般来说,前端监控除了监控性能指标外,还会监控请求、资源加载、Long任务等数据。这些数据可以帮助还原用户的加载场景,帮助寻找线索。
例如,在下面的例子中,很多性能指标都很差。通过监控平台还原的资源加载瀑布图可以看出,大部分时间都花在了拉取资源上。然后就可以得到一个初步的性能优化方案,把优化措施集中在资源优化上,比如减小JS文件大小,延迟加载未使用的JS代码等等。
在线监控的例子很多,可以帮助定位性能问题,这里就不一一介绍了。截图中使用了Byte内部的前端监控平台。目前该方案已经在火山引擎上同步,可以实时监控web端的真实数据,接入即可解决告警归属、聚类分析、详细定位等问题。白屏、性能瓶颈、查询慢等关键问题欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
最近发布:WordPress自动采集发布插件专业版WP AutoPost Pro [更新至
目录
亲测完美运行于的 WordPress 各个版本,请放心使用。WP-AutoPost-Pro 是一款优秀的 WordPress 文章采集器,是您操作站群,让网站自动更新内容的利器!采集插件适用对象1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容;2、热点内容自动采集并自动发布;3、定时采集,手动采集发布或保存到草稿;4、css样式规则,能更精确的采集需要的内容。5、伪原创与翻译、代理IP进行采集、保存Cookie记录;6、可采集内容到自定义栏目
WP-AutoPost 插件可以采集来自于任何网站的内容并全自动更新你的WordPress站点。它使用非常简单,无需复杂设置,并且足够强大和稳定,支持wordpress所有特性。可采集任何网站的内容全自动任务采集定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容基本设置功能齐全,完美支持Wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章可下载远程图片及其他任意格式附件到本地服务器,并支持给图片自动添加水印
如果是新手,请查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的wordpress站点。不像其他大部分wordpress采集插件,只能根据Feed进行采集,使用Feed采集有很大的弊端,首先必须找到全文Feed,而现在网上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要点击链接才能查看原文,相当于给别的网站做外链。做英文垃圾站用的比较多的WP-Robot也只有20几个采集来源,文章来源比较单一有限。而WP-AutoPost就没有上面这些劣势,真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签过滤、关键词替换、自动链接、自动标签、自动下载远程图片到本地服务器、自动添加文章前缀后缀、并且可以使用微软翻译引擎将采集的文章自动翻译为各种语言进行发布。
1.可采集任何网站的内容,采集信息一目了然。
通过简单设置可采集来自于任何网站的内容,并可设置多个采集任务同时进行,可设置任务为自动运行或手动运行,主任务列表显示每个采集任务的状况:上次检测采集时间,预计下次检测采集时间,最近采集文章,已采集更新的文章数等信息,方便查看管理。
文章管理功能方便查询、搜索、删除已采集文章,改进算法已从根本上杜绝了重复采集相同文章,日志功能记录采集过程中出现的异常和抓取错误,方便检查设置错误以便进行修复。
2.启用任务后,全自动采集更新,无需人工干预。
启用任务后,定时检测是否有新文章可更新,检测文章是否重复,导入更新文章,这一切操作程序都是全自动完成,无需人工干预。
有两种触发采集更新方式,一种是在页面内添加代码由用户访问触发采集更新(后台异步进行,不影响用户体验,也不影响网站效率),另外可以用Cron计划任务定时触发采集更新任务
3.定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容。
定向采集只需要提供文章列表URL即可智能采集来自于任何网站或栏目内容。
不仅支持“通配符匹配”来采集网页内容,更完美支持各种CSS选择器,只需填写简单的形如#title h1的CSS选择器,便可精确采集网页任何内容。(如何设置CSS选择器)
支持设置关键词,如果标题中包含关键词才允许采集(或过滤掉不允许采集)。
支持设置多个匹配规则采集网页上的不同内容,甚至支持采集任何内容添加到“wordpress自定义栏目”,方便扩展。
4.基本设置功能齐全,完美支持wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息
每个采集任务均可选择发布到的分类目录,发布作者,发布状态,检测更新时间间隔,采集目标网站的字符集,选择是否下载图片或附件。
支持自定义文章类型,自定义文章分类、文章形式。
完美支持wordpress各种特色功能,自动添加标签,自动生成摘要,自动设置特色图片,支持自定义栏目等。
5.可采集微信公众号、头条号等自媒体内容,因百度不收录公众号,头条文章等,可轻松获取优质“原创”文章,增加百度收录量及网站权重
支持采集微信公众号(订阅号)文章,无需复杂配置,只需填入“公众号名称”和“微信号”后即可开始采集。
支持采集今日头条文章,也无需复杂配置
微信公众号及今日头条由于目标限制,为半自动方式采集
6.支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章
支持Google神经网络翻译,翻译质量显著提高,已接近人工翻译效果,将文章标题和内容翻译成其他语言,共支持多种语言之间相互翻译,轻松获取原创文章。使用Google翻译API无需翻墙,只需翻墙获取API相关设置信息设置好后即可正常使用,后续调用API翻译无需翻墙
支持有道神经网络翻译,接近人工翻译效果,有道翻译更懂中文,采集英文文章翻译成中文文章,轻松获取原创文章。
同时支持百度翻译,百度翻译每月翻译字符数低于200万,享免费服务
7.支持中英文各种伪原创方式
支持使用翻译引擎获取伪原创文章,不仅仅只是替换了同义词,更是语义的重新表述,唯一性、伪原创效果更好,支持各种语言。同时集成国外最优秀伪原创工具WordAi等,制作英文站可以获取可读性、唯一性都更好的伪原创文章。
8.支持市面上所有主流对象存储服务,包括七牛云、阿里云OSS、腾讯云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可将文章中图片及附件自动上传到云对象存储服务,节省带宽及空间,提高网站访问速度
七牛云存储,每月享10GB的免费存储空间,10GB免费带宽流量
只需简单配置好相关信息,即可自动上传,通过wordpress后台也能直接查看或管理已上传到云对象存储的图片及文件。
9.支持seo优化,内容过滤,HTML标签过滤,关键词替换,自动添加链接,添加自定义内容,自定义采集后样式、自定义模板等常用功能
自动删除采集内容中的HTML注释,可设置删除标签中的id,class,style属性内容,消除采集的痕迹;自动给图片添加上alt属性,过滤链接,关键词替换,自动添加自定义链接,这些都有利于SEO。
支持内容过滤,过滤采集内容中不希望发布的内容(如广告代码,文章来源,版权等信息),甚至可以在文章任意位置添加上自定义内容,增强文章独特性;也可是设置采集后添加自定义样式功能
也支持HTML标签过滤功能,可过滤掉采集文章中的超链接,script和style标签下的不必要的代码。
付费高速下载:
资源下载此资源下载价格为10元,请先登录
服务条款:
购买即代表你对本站的无偿捐助,非购买本站资源。部分资源禁止在中国大陆下载使用,违者后果自负。同意本条款你方可购买下载本站资源,不同意请离开。
所有资源均需登陆后下载,即使是免费的。 查看全部
测评:前端监控系列3 | 如何衡量一个站点的性能好坏
注意干货,不要迷路
1. 背景
你知道有多少用户没有等待第一个屏幕出现就离开了吗?性能不佳会对业务目标产生负面影响。例如,BBC 发现,他们的 网站 加载时间每增加一秒,他们就会失去 10% 的用户。高绩效网站比低绩效网站更能吸引和留住用户,而用户留存对于提高用户转化率至关重要。
本篇文章就是以此为背景,介绍Byte如何内部衡量网站性能,以及如何依靠性能监控来定位在线网站性能问题。
2. 如何衡量网站性能
网站性能有多种表现形式。并不是简单的以页面加载速度和页面渲染速度来衡量,而是需要关注用户从页面加载开始到关闭过程的性能感知。一个页面,即使渲染得很快,如果对用户交互反应慢,那么网站在用户心目中的表现还是很差的。
站点性能一般可以分为两类,一类是首屏性能,一类是运行时性能。前者衡量页面从加载到稳定交互的性能,后者衡量页面稳定后直到页面关闭的性能。
3. 首屏表现
早在 2012 年,Web 性能工作组 [1] 就针对页面加载场景开发了一个加载过程模型,用于衡量页面加载各个阶段的耗时,从而衡量页面加载的性能。具体加载过程模型如图:
该模型定义了从开始页面加载到完成整个页面加载过程的时间点。除了正常的初始化和拉到主文档之外,还包括解析和渲染的详细时间点。例如:
虽然开发者可以根据这些时间点来衡量页面加载的性能,但在线用户却无法真正感知到这些时间点之间的差异。对于用户来说,只有页面什么时候开始渲染,主要内容什么时候渲染,什么时候可以交互,交互是否有延迟。
那么有没有什么指标可以用来衡量用户感知的四个阶段呢?
3.1 何时开始渲染:FP && FCP
这两个指标来源于Paint Timing [2]标准,主要记录页面加载过程中的一些关键时间点。使用这两个指标,您可以衡量页面何时开始呈现内容。
3.2 主要内容什么时候渲染:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时呈现其主要内容。但是,业内一些测试表明,LCP与FMP的时间点非常相似。同时,FMP对性能的消耗很大,会因为一些微小的变化而造成数值的巨大波动。因此,建议使用 LCP。但由于计算复杂、指标解读困难,SI一般只用于实验室环境。
3.3 我们什么时候可以互动:TTI && TBT
虽然 TTI 可以测量页面可以交互的时间点,但它无法感知此期间浏览器的繁忙状态。结合 TBT,它有助于了解页面在加载期间无法响应用户输入的时间。
3.4 交互时是否有延迟:FID && MPFID
MPFID是虚拟可能的延迟时间,FID是用户真正的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户对整个应用建立良好的印象。同时,在页面加载阶段,资源处理任务最重,最容易出现输入延迟。
至此,通过以上各阶段的指标,基本可以全面衡量首屏的表现。那么如何衡量运行时性能呢?
4. 运行时性能
运行时性能通常可以通过 Long 任务来感知。长任务主要衡量主线程的繁忙程度。
4.1 长任务
如果一个任务在主线程上运行的时间超过 50 毫秒,它就是一个 Long 任务。如果你能在运行时采集所有的 Long 任务,你就可以知道运行时的性能。在具体实践中,可以将注意力集中在耗时较长的长任务上,并将其与用户行为相关联,可以有效帮助定位网卡原因。
5. 绩效指标的计算原理
有与页面性能相关的指标,那么如何采集这些数据呢?
5.1 采集页面加载过程的耗时阶段
页面加载过程中的时间点主要取决于 Navigation Timing [4] 标准。该标准后来升级为 2.0 版本,对应于 Navigation Timing 2 [5] 标准。两者虽然不同,但可以计算出来。指标基本一致。在浏览器中,可以通过以下方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
根据这些数据,不仅可以计算出 DNS/TCP/Request 的耗时,还可以计算出 DOMReady/DOMParse/Load 的耗时。

5.2 采集 FP && FCP
FP和FCP可以直接通过浏览器提供的API获取,所以采集的原理并不复杂。如果页面已经完成了第一次绘制和第一次内容绘制,可以使用下面的方法直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有第一次开始绘制,则需要通过监听来获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
5.3 采集 LCP
LCP主要依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});
浏览器会多次上报 LCP,一般来说真正的 LCP 是用户交互前最近一次上报的 LCP。因为交互往往会改变用户所看到的,所以用户交互后新上报的 LCP 不再符合 LCP 指标定义。
5.4 采集 与FP/FCP/LCP相比,FMP的采集比较复杂,需要通过算法计算,业界没有统一的算法。但是,比较公认的计算FMP的方法是“确定在加载和渲染过程中页面最大布局变化后的绘制时间为当前页面的FMP”。
由于在页面渲染过程中,“DOM结构变化的时间点”和对应的“渲染时间点”大致相同,所以内部以字节为单位计算FMP的方式是计算DOM结构发生变化的时间点大多数,那就是FMP。
具体步骤如下:
通过 MutationObserver 监控整个页面的每一个 DOM 变化,并触发 MutationObserver 的回调。当回调计算当前DOM树的score并结算时,score对比变化最大的时刻是FMP5.5 采集 TTI && TBT
与FMP类似,浏览器并没有提供直接获取TTI的API,但是有详细的说明如何计算TTI,通过实现相应的说明就可以得到TTI的时间点。
具体描述是:先找到FCP的时间点,然后再找一个安静的窗口向前。一个安静的窗口需要满足三个条件: 1) No Long 任务。2)窗口中处理的 GET 请求不超过两个。3) 窗口时间窗口读取至少应为 5 秒。
窗口前最后一个长任务的结束时间是 TTI。
TBT 可以通过将 FCP 和 TTI 之间的长任务的阻塞时间相加得到。
阻塞时间是Long任务中超过50ms后的任务时间。
5.6 采集 FID && MPFID
FID也依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务时间。可以监控 FCP 后的 Long 任务,比较最长的 long 任务是 MPFID。
虽然浏览器提供了足够的 API 来帮助采集单个性能指标,但在 JS 中计算特定指标更加复杂。原因有二:一是API上报的内容与指标本身的定义存在一些差异,所以在计算时需要处理这些差异;二是在某些场景下,浏览器不会上报相应的内容,需要在这些场景下进行仿真测量。
6. 如何评估网站的整体性能
尽管有许多绩效指标,但每个绩效指标评估一个方面。如何看网站的整体表现是好是坏?对于每一个单独的指标,是否有一个标准来定义指标值被认为是好的特定范围?在线网站性能应考虑哪些性能指标?每个绩效指标的适当权重是多少?
6.1 绩效指标基线
谷歌提供了各种性能指标的基准,具有一定的参考意义。
为什么仅供参考?首先,基线本身正在发生变化。随着指标计算的逐步更新和软硬件的更新,基线也会有一定程度的调整。其次,用户的使用场景也会对性能指标产生很大影响。例如,iOS 用户报告的性能指标普遍优于 Android 用户报告的性能指标。
下面是字节目前内部使用的一些性能指标的基准,基本与谷歌推荐的基准一致。通过这些数据,可以分析网站的绩效达标率。
指标名称Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500

超过 2500
FCP
0-1800
1800-3000
超过 3000
液晶面板
0-2500
2500-4000
超过 4000
TTI
0-3800
3800-7300
超过 7300
FID
0-100
100-300
超过 300
6.2 测量网站满意度
除了常规的性能指标外,网站满意度的衡量还应考虑基于体验的指标,例如专门衡量视觉稳定性的 CLS。
在线站点满意度测量一般会根据灯塔的满意度计算规则,去除一些推荐在实验室环境中测量的指标的权重。
以下是Bytes目前使用的在线站点性能满意度权重计算公式,去掉了SI和TBT这两个不推荐用于在线环境测量的指标。
然后有了一个站点的满意度,我们终于可以知道一个站点的性能好坏了。那么假设性能不好,我们应该如何优化呢?
7. 如何优化网站性能
通常,我们可以从性能指标入手,进行有针对性的优化。虽然指标不同,但优化思路是一样的。了解指标的依赖关系后,可以通过优化指标的相关依赖关系,快速优化性能指标,从而提升站点性能。
听起来很抽象,举个例子:比如我们要优化TTI的时候,根据刚才提到的TTI的计算方法,可以得出TTI的依赖主要有FCP、request和Long任务,然后尽快渲染尽可能快的请求,尽快结束请求,避免长时间的任务是优化的关键。指标的具体优化措施有很多,后续文章会介绍。
了解全面的优化措施很重要,但每一项都不一定能有效解决您网站面临的关键性能问题。如何做到立即有针对性的去优化?通过恢复用户加载时的外观来帮助定位性能问题是一个想法。
8. 使用在线监控定位性能问题
一般来说,前端监控除了监控性能指标外,还会监控请求、资源加载、Long任务等数据。这些数据可以帮助还原用户的加载场景,帮助寻找线索。
例如,在下面的例子中,很多性能指标都很差。通过监控平台还原的资源加载瀑布图可以看出,大部分时间都花在了拉取资源上。然后就可以得到一个初步的性能优化方案,把优化措施集中在资源优化上,比如减小JS文件大小,延迟加载未使用的JS代码等等。
在线监控的例子很多,可以帮助定位性能问题,这里就不一一介绍了。截图中使用了Byte内部的前端监控平台。目前该方案已经在火山引擎上同步,可以实时监控web端的真实数据,接入即可解决告警归属、聚类分析、详细定位等问题。白屏、性能瓶颈、查询慢等关键问题欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
最近发布:WordPress自动采集发布插件专业版WP AutoPost Pro [更新至
目录
亲测完美运行于的 WordPress 各个版本,请放心使用。WP-AutoPost-Pro 是一款优秀的 WordPress 文章采集器,是您操作站群,让网站自动更新内容的利器!采集插件适用对象1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容;2、热点内容自动采集并自动发布;3、定时采集,手动采集发布或保存到草稿;4、css样式规则,能更精确的采集需要的内容。5、伪原创与翻译、代理IP进行采集、保存Cookie记录;6、可采集内容到自定义栏目
WP-AutoPost 插件可以采集来自于任何网站的内容并全自动更新你的WordPress站点。它使用非常简单,无需复杂设置,并且足够强大和稳定,支持wordpress所有特性。可采集任何网站的内容全自动任务采集定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容基本设置功能齐全,完美支持Wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章可下载远程图片及其他任意格式附件到本地服务器,并支持给图片自动添加水印
如果是新手,请查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的wordpress站点。不像其他大部分wordpress采集插件,只能根据Feed进行采集,使用Feed采集有很大的弊端,首先必须找到全文Feed,而现在网上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要点击链接才能查看原文,相当于给别的网站做外链。做英文垃圾站用的比较多的WP-Robot也只有20几个采集来源,文章来源比较单一有限。而WP-AutoPost就没有上面这些劣势,真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签过滤、关键词替换、自动链接、自动标签、自动下载远程图片到本地服务器、自动添加文章前缀后缀、并且可以使用微软翻译引擎将采集的文章自动翻译为各种语言进行发布。
1.可采集任何网站的内容,采集信息一目了然。
通过简单设置可采集来自于任何网站的内容,并可设置多个采集任务同时进行,可设置任务为自动运行或手动运行,主任务列表显示每个采集任务的状况:上次检测采集时间,预计下次检测采集时间,最近采集文章,已采集更新的文章数等信息,方便查看管理。
文章管理功能方便查询、搜索、删除已采集文章,改进算法已从根本上杜绝了重复采集相同文章,日志功能记录采集过程中出现的异常和抓取错误,方便检查设置错误以便进行修复。
2.启用任务后,全自动采集更新,无需人工干预。
启用任务后,定时检测是否有新文章可更新,检测文章是否重复,导入更新文章,这一切操作程序都是全自动完成,无需人工干预。
有两种触发采集更新方式,一种是在页面内添加代码由用户访问触发采集更新(后台异步进行,不影响用户体验,也不影响网站效率),另外可以用Cron计划任务定时触发采集更新任务
3.定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容。
定向采集只需要提供文章列表URL即可智能采集来自于任何网站或栏目内容。
不仅支持“通配符匹配”来采集网页内容,更完美支持各种CSS选择器,只需填写简单的形如#title h1的CSS选择器,便可精确采集网页任何内容。(如何设置CSS选择器)

支持设置关键词,如果标题中包含关键词才允许采集(或过滤掉不允许采集)。
支持设置多个匹配规则采集网页上的不同内容,甚至支持采集任何内容添加到“wordpress自定义栏目”,方便扩展。
4.基本设置功能齐全,完美支持wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息
每个采集任务均可选择发布到的分类目录,发布作者,发布状态,检测更新时间间隔,采集目标网站的字符集,选择是否下载图片或附件。
支持自定义文章类型,自定义文章分类、文章形式。
完美支持wordpress各种特色功能,自动添加标签,自动生成摘要,自动设置特色图片,支持自定义栏目等。
5.可采集微信公众号、头条号等自媒体内容,因百度不收录公众号,头条文章等,可轻松获取优质“原创”文章,增加百度收录量及网站权重
支持采集微信公众号(订阅号)文章,无需复杂配置,只需填入“公众号名称”和“微信号”后即可开始采集。
支持采集今日头条文章,也无需复杂配置
微信公众号及今日头条由于目标限制,为半自动方式采集
6.支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章
支持Google神经网络翻译,翻译质量显著提高,已接近人工翻译效果,将文章标题和内容翻译成其他语言,共支持多种语言之间相互翻译,轻松获取原创文章。使用Google翻译API无需翻墙,只需翻墙获取API相关设置信息设置好后即可正常使用,后续调用API翻译无需翻墙
支持有道神经网络翻译,接近人工翻译效果,有道翻译更懂中文,采集英文文章翻译成中文文章,轻松获取原创文章。
同时支持百度翻译,百度翻译每月翻译字符数低于200万,享免费服务

7.支持中英文各种伪原创方式
支持使用翻译引擎获取伪原创文章,不仅仅只是替换了同义词,更是语义的重新表述,唯一性、伪原创效果更好,支持各种语言。同时集成国外最优秀伪原创工具WordAi等,制作英文站可以获取可读性、唯一性都更好的伪原创文章。
8.支持市面上所有主流对象存储服务,包括七牛云、阿里云OSS、腾讯云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可将文章中图片及附件自动上传到云对象存储服务,节省带宽及空间,提高网站访问速度
七牛云存储,每月享10GB的免费存储空间,10GB免费带宽流量
只需简单配置好相关信息,即可自动上传,通过wordpress后台也能直接查看或管理已上传到云对象存储的图片及文件。
9.支持seo优化,内容过滤,HTML标签过滤,关键词替换,自动添加链接,添加自定义内容,自定义采集后样式、自定义模板等常用功能
自动删除采集内容中的HTML注释,可设置删除标签中的id,class,style属性内容,消除采集的痕迹;自动给图片添加上alt属性,过滤链接,关键词替换,自动添加自定义链接,这些都有利于SEO。
支持内容过滤,过滤采集内容中不希望发布的内容(如广告代码,文章来源,版权等信息),甚至可以在文章任意位置添加上自定义内容,增强文章独特性;也可是设置采集后添加自定义样式功能
也支持HTML标签过滤功能,可过滤掉采集文章中的超链接,script和style标签下的不必要的代码。
付费高速下载:
资源下载此资源下载价格为10元,请先登录
服务条款:
购买即代表你对本站的无偿捐助,非购买本站资源。部分资源禁止在中国大陆下载使用,违者后果自负。同意本条款你方可购买下载本站资源,不同意请离开。
所有资源均需登陆后下载,即使是免费的。
SRC漏洞挖掘与最重要的环节——信息收集
采集交流 • 优采云 发表了文章 • 0 个评论 • 658 次浏览 • 2022-09-19 20:23
SRC挖掘有很多平台,比如EDUSRC,比如公益SRC:补天、漏洞盒子等,还有就是一些企业SRC。对于挖掘src的小伙伴来说第一步都是对资产进行收集,所以本篇文章首先介绍一下SRC的上分思路,然后会具体讲解一下信息收集的思路。
公益SRC对于公益SRC来说,会存在各种各样的漏洞,SQL注入、反射XSS、存储XSS、任意注册、cms通杀、弱口令还有逻辑漏洞,公益SRC主要比拼的无非就是手速,手速决定一切,提交的最多的一般还是sql注入、弱口令、和cms通杀。公益SRC想要冲榜的话可以选择一些有大的安全活动的时间,大佬们去参加安全活动,这个时候可以取巧,上榜会稍微轻松一点。对于公益SRC来说,想要冲榜就不能在一个站上浪费大量时间,公益SRC对洞的质量要求不高,所以只要 花时间,还是可以上榜的。谷歌镜像站:
SQL注入SQL注入的话主要通过google语法或者fofa进行搜索查找,使用inurl关键字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa进行特定网站搜索,还是进行信息收集,只使用一种关键字对站点去进行查找是绝对无法找全的,关键字有很多,思路也有很多,思维不能局限住,要不断地去变换。可以尝试这么去构造Google语句:地区inurl:"type_id=1"、行业inurl:"ptherinfo.asp?id=1"地区和行业可以任意替换,在提交漏洞的地方通常会有一个选项,选择漏洞所属地区和所属行业,可以以此为准一个一个找,之后还可以将php替换为asp、aspx、jsp等站点。在对某站点进行测试SQL注入的时候,先通过一些方式测试是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工测试,然后提交漏洞。
XSS对于XSS来说可能并不好找,所以我认为没必要太刻意的去挖XSS,不管是反射型还是存储型,所以我认为在测试sql注入的时候顺带对XSS进行测试就好了。但是如果想要专门挖xss,在实战中学习,也可以通过和sql注入一样的语法,改变几个关键字就好了,比如:地区inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注册如果你想要挖任意注册漏洞,那么你首先需要了解什么是任意注册,任意注册是一种程序设计的缺陷,顾名思义就是随便注册,不需要什么条件,注册处无任何验证。Google语法关键词:地区/行业inurl:"register"、地区/行业inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注册算是低危漏洞,不过也有两分。任意注册没多少人挖,可以尝试挖掘。去漏洞盒子提交漏洞的时候,可以看下漏洞类型,可以挑一些你认为漏洞比较冷门没人挖并且普遍存在的去下手。
CMS通杀普通人找通杀的思路无法就是百度谷歌搜索cms通杀,但是其实这样的效率并不高,通杀也找不到几个,这里建议可以去一些漏洞文库,建议多进行漏洞复现,多实战,多积累实战经验,复现漏洞也是一种积累。
弱口令尝试弱口令的过程比较繁琐,但是最好老老实实的手工上分,百度或者谷歌语法搜索后台站点。如:山西inurl:"后台"可以尝试:账号:admin/test/cs/ceshi/test01等 密码:admin/123456/a123456/admin123/admin123456等。也可以借助fofa对后台站点进行搜索:title="后台管理" && country="CN"
EDUSRCfofa语句(查找edu里的管理系统):"管理系统" && org="China Education and Research Network Center"对于EDUSRC来说,想上分的同学主要有两种方式:1.挖通用性漏洞。找一些站点或者系统,被广大学校所使用,覆盖率很高,再去对这个站点或者系统进行漏洞挖掘,挖掘到之后就可以批量刷分。2.定点打击。对一个学校埋头苦干,通过一些信息泄露或者一些学生的微博、朋友圈等,获取一些学生的相关信息,比如学号、身份信息号码、电话等等,尝试登入校园内网或者登录校园统一身份认证系统,对内网进行漏洞挖掘,直接日穿。使用Google语法进行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本内容:site:域名 intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号|admin|login|sys|managetem|password|username查找可注入点:site:域名 inurl:aspx|jsp|php|asp查找上传漏洞:site:域名 inurl:file|load|editor|Files找eweb编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的数据库:site:域名 filetype:mdb|asp|#查看脚本类型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集渗透测试的本质就是信息收集,信息搜集的广度决定了攻击的广度,知识面的广度决定了攻击的深度。不管是进行SRC漏洞挖掘,还是做项目进行渗透测试,又或者是打红蓝对抗,一定要做好信息收集。信息收集很重要,如确定资产,比如他有哪些域名、子域名、C段、旁站、系统、微信小程序或者公众号,确定好站点或者目标系统之后,就是常规的指纹识别,像中间件、网站,扫目录,后台,确定功能然后分析每个功能点上会有哪些漏洞,就比如一个登录页面,我们可以考虑的是爆破账号密码,社工账号密码,SQL注入,XSS漏洞,逻辑漏洞绕过等。如果大家挖掘SRC的水平都是一样的或者说我们对于各种操作都是同样了解的,那么如果超越别人,如果你挖的比别人慢,那么你后期提交的漏洞会撞洞,然后忽略处理。在短时间内你无法去提升你的技术或者是挖掘一个新的思路,这个时候就体现了资产搜集的能力,信息搜集是最难的,也是最麻烦耽误时间的,且必须要实时去关注的一件事情。一些常用网站:ICP备案查询:权重查询:多地ping:whois查询:IP反查:以xxx公司为例,根域名:信息收集可以从多个领域来看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC软件等等可以重点关注备案网站,APP,小程序,微信公众号,甚至是微博。这里说一点小思路,首先可以找到官网,用cmd ping他的官网,可以看到IP地址,然后可以定位whois,whois中包含了用户、邮箱,以及购买的网段。有了网段就可以进行一些主动信息收集,可以使用一些强大的资产测绘工具,goby的资产测绘还是很不错的,会有一些web服务,不用担心没有banner,往往这些没有banner的才有问题。注意观察一下网站底部是否有技术支持:xxxx|网站建设:xxxx之类的标注,一些建站企业会出于知识产权保护或者是对外宣传自己的公司,会在自家搭建的网站上挂上技术支持等之类的标注,很多建站企业往往某种类型的网站都是套用的同一套源码,换汤不换药,运气不错的话,那我们的事件就秒变通用。
子域名收集Oneforall尽量多凑一点API,fofa可以找人借一些api,越多越好。执行命令:常用的获取子域名有2种选择,一种使用--target指定单个域名,一种使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤舆)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一个在网页的JS文件中寻找URL和子域名的工具,在网站的JS文件中,会存在各种对测试有帮助的内容,JSFinder可以帮我们获取到JS中的url和子域名的信息,扩展我们的渗透范围。爬取分为普通爬取和深度爬取,深度爬取会深入下一层页面爬取的JS,时间会消耗的相对较长。执行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt运行结束后会生成两个txt文本,Jsurl.txt为URL里面会有一些接口什么的,Jsdomain.txt为子域名基于TamperMonkey的版本:Layer、子域名收割机 进行挖掘通过这些域名收集工具(layer子域名挖掘机、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)进行挖掘。
在线网站查询为了避免IP被封掉,直接使用在线的子域名爆破网站。subDomainBrute执行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全扫描。Sublist3rKali和Windows环境下都可以装这个工具,Sublist3r是一个python版工具,其原理是基于通过使用搜索引擎,从而对站点子域名进行列举。Kali:git clone 执行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一个域名搜索网站,还会自动归纳同一个IP的多个域名。在线域名爆破小蓝本通过小蓝本进行查询:爱企查、企查查、天眼查之前爱企查活动送了会员,可以更好的进行查询。谷歌语法迅速查找信息泄露、管理后台暴露等漏洞语法,例如:filetype:txt 登录filetype:xls 登录filetype:doc 登录intitle:后台管理intitle:loginintitle:后台管理 inurl:adminintitle:index of /查找指定网站,再加上site:,例如:site: filetype:txt 登录site: intitle:后台管理site: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统谷歌/必应:site:site:如果发现检索出来的很多结果都是www,众所周知主站一般防御很严,如果我们不想看到主站可以直接 -wwwsite: -www这样出来的结果会自动删去wwwShodan、fofa、zoomeye、360quake等忘了资产搜索引擎fofa语法FOFA作为一个搜索引擎,我们要熟悉它的查询语法,类似google语法,FOFA的语法主要分为检索字段以及运算符,所有的查询语句都是由这两种元素组成的。
目前支持的检索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的逻辑运算符包括:=,==,!=,&&,||。如果搜索title字段中存在后台的网站,我们只需要在输入栏中输入title=“后台”,输出的结果即为全网title中存在后台两个字的网站,可以利用得到的信息继续进行渗透攻击,对于网站的后台进行密码暴力破解,密码找回等等攻击行为,这样就可以轻松愉快的开始一次简单渗透攻击之旅,而企业用户也可以利用得到的信息进行内部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host内所有带有的域名:host=“”例:搜索某个IP上的相关信息:ip=“58.63.236.248”ip=“111.1.1.1/8”ip="111.1.1.1/16"ip="111.1.1.1/24"例:搜索title包含有“漏洞”的IP:title=“漏洞”例:Apache出来了一个高危漏洞,我们需要去统计全球的Apache:server=“Apache”例:搜索前段时间非常火的海康威视:header=“Hikvsion”例:假如我想搜索微博的后台,域名为: 并且网页内body包含“后台”:body=“后台”&& domain=“”&&:与body=“后台”&& domain=“”提取域名为:并且网页内body包含“后台”的网站,需要同时满足两个条件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不为80端口的服务搜索证书(https或者imaps等)例:百度公司为了检查自己的域名是否还有心脏出血漏洞可以使用语法:cert=“baidu”搜索指定国家(编码)的资产例:搜索中国的服务器 country=“CN”注:country=“CN” country后面的规则为各国家的缩写,全球国家缩写如下连接:搜索指定城市的资产例:搜索上海的服务器 city=“Shanghai”注:搜索城市时填写城市的全程,首字母必须大写例:搜索centos所有主机 os=“centos”了解了基础查询我们再来说说高级查询,就是多个基础查询语句用逻辑连接符拼成的语句,例如我们要搜索上海的Discus组件,搜索语句时 (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:逻辑与||:逻辑或上面的语句意思为 (title="Disuz" ||body="content="Discuz") 与city="Shanghai" 这两个条件必须同时满足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“与body=”content=\”Discuz“ 满足一个即可
FOFA可以从不同维度搜索网络组件,例如地区,端口号,网络服务,操作系统,网络协议等等。目前FOFA支持了多个网络组件的指纹识别,包括建站模块、分享模块、各种开发框架、安全检测平台、项目管理系统、企业管理系统、视频监控系统、站长平台、电商系统、广告联盟、前端库、路由器、SSL证书、服务器管理系统、CDN、Web服务器、WAF、CMS等等尤其现在支持icon图标、logo搜索,非常方便,fofa搜索语法与shodan类似title="abc" 从标题中搜索abc。例:标题中有北京的网站header="abc" 从http头中搜索abc。例:jboss服务器body="abc" 从html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名带有的网站。例:根域名是的网站host="." 从url中搜索.,注意搜索要用host作为名称。例:政府网站, 教育网站port="443" 查找对应443端口的资产。例:查找对应443端口的资产可以安装shodan chrome插件,方便进行查看和使用。微步在线微步在线的反向IP查找域名十分好用整数透明度公开日志枚举其他途径旁站查询旁站就是在同一台服务器上搭建的多个网站,使用同一个IP地址。在目标网站无法攻击成功时,若他的旁站可以成功攻击并获取相应的系统权限,这势必会影响到目标网站的安全性,因为已经获取到同一台服务器的权限了。公众号、服务号收集搜狗搜索引擎企查查微信小程序从微信小程序入手,进行测试APP小蓝本企查查爱企查点点七麦七麦还可以切换苹果和安卓,获取下载链接apk丢进模拟器指纹识别Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需带上协议,每行一个./Ehole-darwin -f 192.168.1.1/24 //支持单IP或IP段,fofa识别需要配置fofa密钥和邮箱./Ehole-darwin -l url.txt -json export.json //结果输出至export.json文件
Glass使用方法:python3 Glass.py -u 单url测试python3 Glass.py -w domain.txt -o 1.txt // url文件内
BugScanner主站没识别出来,但是其他子站可以丢进来看看潮汐指纹Kscan此工具需要go环境云悉云悉可以在线搜索子域名、IP段、CMS指纹等信息大禹CMS识别程序对于查询到的CMS可以利用网站用于查询其他finger 或者棱镜也可以绕过CDN如果目标没有使用CDN,可以通过ping获取IP地址。或者利用在线网站 使用了CDN就绕过CDN来获取真实的IP地址:因为有些网站设置CDN时,可能没把国外的访问包含进去,所以可以尝试国外绕过验证ip地址因为通过各种方法得到的ip地址很多,有的是伪ip,无法访问,这就需要逐个验证,方法简单但是i西南西量比较大,利用ip地址对web站点进行访问查询域名解析记录内部邮箱源,收集到内部邮箱服务器IP地址网站phpinfo文件phpinfo.php分站IP地址,查询子域名,CDN很贵,很可能分站就不再使用CDN国外访问敏感信息收集githubgithub敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区,安全意识薄弱的同事经常会将公司的代码、各种服务的账号等极度敏感的信息【开源】到github中这里可以利用github找存在这个关键字的代码,这样可以收集到的方面更广
GSIL项目:通过配置关键词,实时监控GitHub敏感信息泄露情况,并发送至指定邮箱常见自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)从流量中分析提取流量代理:通过WebProxy代理电脑所有流量,再分析流量中出现的子域名域名跳转记录中的子域名Response中存在的子域名网络请求资源中的子域名DNS解析SSL证书查询暴力枚举网盘搜索盘多多:盘搜搜:盘搜:凌云风搜索:直接输入厂商名字然后搜索,看看是否泄露了源码,或者账号密码之类的路径扫描404,403页面,不是真的没有东西,要一层一层fuzz,一层一层的扫下去工具:具体使用方法可以查看github介绍,这里我一般是使用如下命令(因为担心线程太高所以通过-t参数设置为2)。python3 dirsearch.py -u * -t 2关键的地方是大家都可以下载这款工具,获取它自带的字典,那么路径的话,便是大家都能够搜得到的了,所以这里我推荐是可以适当整合一些师傅们发出来的路径字典到/dirsearch-0.4.2/db/dicc.txt中。推荐一些字典:GitHub - ybdt/dict-hub: 红队字典:弱用户名、弱口令、默认口令、泄露密钥dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每个工具扫出来同一个站点都会爆出不同的路径,建议把三个工具都拿来扫一遍,另外找一些像后台、登录系统之类的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统御剑7kbscandirsearch基于证书基于shodan找到带有该icon的网站在shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法搜索出使用了同一icon图标的网站。
由于hash为一个未知的随机数,所以是无法通过输入一个确定的hash值来搜索带有指定图标的网站的,只能通过查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。那么这里的用法就非常具有局限性,你只能是碰运气来找到你所需要查找的网站,因为shodan不一定收录了你想要搜索的网站。那么如果shodan收录了某个IP,这个服务器带有某个icon图标,也可以搜索所有带有此icon的服务器IP如果我像搜索带有这个icon的所有IP地址的话,可以先在shodan搜索这个IP。注意:shodan中有一个功能,shodan的原始数据(Raw Data)功能。点击详情里的View Raw Data,打开可以看到shodan所存储的关于这个IP的所有信息的原始数据。关于icon hash的字段是:data.0.http.favicon.hash这个数值就是http.favicon.hash:中所需要的搜索值。根据上述得到的hash值,成功得到了所有待用这个icon的网站。域传送漏洞DNS区域传送(DNZ zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。
这位运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误的配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送(zone transfer)操作是最为严重的错误配置之一。可以用dig工具来检测域传送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通过域名传送漏洞可以得到子域名信息以及子域名对应的IP地址。常见漏洞弱口令,管理员权限的弱口令,可以是一些后台管理系统的,也可以是防火墙的。越权,这个相对来说比较常见,系统设计存在缺陷,通过参数来传递身份和访问请求页面的信息,只需要修改参数即可越权到别人的身份,可能有垂直越权,也可能是水平越权。SQL注入,只要细心一点,SQL注入也是比较常见的,只要能注出数据库就行了,注意别惹祸上身。文件上传,这类的话,有一些老系统没什么限制,可以尝试。struts2框架漏洞,这个框架出了很多漏洞,前段时间比较火。shiro命令执行,也是框架漏洞,一个反序列化漏洞,现在网上还存在很多存在这个洞的站点。任意文件下载,在一些站点的下载点,可以抓包测试,通过修改下载链接中下载文件的路径,像/etc/passwd,WEB-INF/web.xml等文件。任意文件下载常用路径:LINUX:
/root/.ssh/authorized_keys<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_rsa<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_ras.keystore<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/known_hosts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/passwd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/shadow<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/issue<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/fstab<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/host.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/motd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/sysctl.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/inputrc 输入设备配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/default/useradd 添加用户的默认信息的文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/login.defs 是用户密码信息的默认属性<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/skel 用户信息的骨架<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/sbin/nologin 不能登陆的用户<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/log/message 系统的日志文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf 配置http服务的配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/ld.so.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/my.cnf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.bash_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.mysql_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/proc/mounts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/config.gz<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/lib/mlocate/mlocate.db<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/self/cmdline
WINDOWS:
C:\windows\system32\drivers\etc\hosts host文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\boot.ini //查看系统版本<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\repair\sam //系统初次安装的密码<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\my.ini //Mysql配置<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\data\mysql\user.MYD //Mysqlroot<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\php.ini //php配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\my.ini //Mysql配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\win.ini //Windows系统的一个基本系统配置文件
逻辑漏洞,一些已经被很多人挖过的站点除了一些最新的漏洞之外,可能就只剩下逻辑漏洞了,比如任意密码修改,或者一些组件漏洞,还有在修改密码的地方,修改密码请求是一次发包还是分两次发包,密码找回点,有些情况下验证码就在返回包中包含着;有些情况下接受验证码的手机号或者邮箱就在请求包中,可修改为自己的,验证码就会发送到你修改的手机号或者邮箱处,挖逻辑漏洞的话,更多情况下要抓包查看,了解它的逻辑,从中找到缺陷。具体可以看:该文章专门对逻辑漏洞进行了总结。文章来源:FreeBuf.COM;作者:YLion侵权请私聊公众号删文 查看全部
SRC漏洞挖掘与最重要的环节——信息收集
SRC挖掘有很多平台,比如EDUSRC,比如公益SRC:补天、漏洞盒子等,还有就是一些企业SRC。对于挖掘src的小伙伴来说第一步都是对资产进行收集,所以本篇文章首先介绍一下SRC的上分思路,然后会具体讲解一下信息收集的思路。
公益SRC对于公益SRC来说,会存在各种各样的漏洞,SQL注入、反射XSS、存储XSS、任意注册、cms通杀、弱口令还有逻辑漏洞,公益SRC主要比拼的无非就是手速,手速决定一切,提交的最多的一般还是sql注入、弱口令、和cms通杀。公益SRC想要冲榜的话可以选择一些有大的安全活动的时间,大佬们去参加安全活动,这个时候可以取巧,上榜会稍微轻松一点。对于公益SRC来说,想要冲榜就不能在一个站上浪费大量时间,公益SRC对洞的质量要求不高,所以只要 花时间,还是可以上榜的。谷歌镜像站:
SQL注入SQL注入的话主要通过google语法或者fofa进行搜索查找,使用inurl关键字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa进行特定网站搜索,还是进行信息收集,只使用一种关键字对站点去进行查找是绝对无法找全的,关键字有很多,思路也有很多,思维不能局限住,要不断地去变换。可以尝试这么去构造Google语句:地区inurl:"type_id=1"、行业inurl:"ptherinfo.asp?id=1"地区和行业可以任意替换,在提交漏洞的地方通常会有一个选项,选择漏洞所属地区和所属行业,可以以此为准一个一个找,之后还可以将php替换为asp、aspx、jsp等站点。在对某站点进行测试SQL注入的时候,先通过一些方式测试是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工测试,然后提交漏洞。
XSS对于XSS来说可能并不好找,所以我认为没必要太刻意的去挖XSS,不管是反射型还是存储型,所以我认为在测试sql注入的时候顺带对XSS进行测试就好了。但是如果想要专门挖xss,在实战中学习,也可以通过和sql注入一样的语法,改变几个关键字就好了,比如:地区inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注册如果你想要挖任意注册漏洞,那么你首先需要了解什么是任意注册,任意注册是一种程序设计的缺陷,顾名思义就是随便注册,不需要什么条件,注册处无任何验证。Google语法关键词:地区/行业inurl:"register"、地区/行业inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注册算是低危漏洞,不过也有两分。任意注册没多少人挖,可以尝试挖掘。去漏洞盒子提交漏洞的时候,可以看下漏洞类型,可以挑一些你认为漏洞比较冷门没人挖并且普遍存在的去下手。
CMS通杀普通人找通杀的思路无法就是百度谷歌搜索cms通杀,但是其实这样的效率并不高,通杀也找不到几个,这里建议可以去一些漏洞文库,建议多进行漏洞复现,多实战,多积累实战经验,复现漏洞也是一种积累。

弱口令尝试弱口令的过程比较繁琐,但是最好老老实实的手工上分,百度或者谷歌语法搜索后台站点。如:山西inurl:"后台"可以尝试:账号:admin/test/cs/ceshi/test01等 密码:admin/123456/a123456/admin123/admin123456等。也可以借助fofa对后台站点进行搜索:title="后台管理" && country="CN"
EDUSRCfofa语句(查找edu里的管理系统):"管理系统" && org="China Education and Research Network Center"对于EDUSRC来说,想上分的同学主要有两种方式:1.挖通用性漏洞。找一些站点或者系统,被广大学校所使用,覆盖率很高,再去对这个站点或者系统进行漏洞挖掘,挖掘到之后就可以批量刷分。2.定点打击。对一个学校埋头苦干,通过一些信息泄露或者一些学生的微博、朋友圈等,获取一些学生的相关信息,比如学号、身份信息号码、电话等等,尝试登入校园内网或者登录校园统一身份认证系统,对内网进行漏洞挖掘,直接日穿。使用Google语法进行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本内容:site:域名 intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号|admin|login|sys|managetem|password|username查找可注入点:site:域名 inurl:aspx|jsp|php|asp查找上传漏洞:site:域名 inurl:file|load|editor|Files找eweb编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的数据库:site:域名 filetype:mdb|asp|#查看脚本类型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集渗透测试的本质就是信息收集,信息搜集的广度决定了攻击的广度,知识面的广度决定了攻击的深度。不管是进行SRC漏洞挖掘,还是做项目进行渗透测试,又或者是打红蓝对抗,一定要做好信息收集。信息收集很重要,如确定资产,比如他有哪些域名、子域名、C段、旁站、系统、微信小程序或者公众号,确定好站点或者目标系统之后,就是常规的指纹识别,像中间件、网站,扫目录,后台,确定功能然后分析每个功能点上会有哪些漏洞,就比如一个登录页面,我们可以考虑的是爆破账号密码,社工账号密码,SQL注入,XSS漏洞,逻辑漏洞绕过等。如果大家挖掘SRC的水平都是一样的或者说我们对于各种操作都是同样了解的,那么如果超越别人,如果你挖的比别人慢,那么你后期提交的漏洞会撞洞,然后忽略处理。在短时间内你无法去提升你的技术或者是挖掘一个新的思路,这个时候就体现了资产搜集的能力,信息搜集是最难的,也是最麻烦耽误时间的,且必须要实时去关注的一件事情。一些常用网站:ICP备案查询:权重查询:多地ping:whois查询:IP反查:以xxx公司为例,根域名:信息收集可以从多个领域来看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC软件等等可以重点关注备案网站,APP,小程序,微信公众号,甚至是微博。这里说一点小思路,首先可以找到官网,用cmd ping他的官网,可以看到IP地址,然后可以定位whois,whois中包含了用户、邮箱,以及购买的网段。有了网段就可以进行一些主动信息收集,可以使用一些强大的资产测绘工具,goby的资产测绘还是很不错的,会有一些web服务,不用担心没有banner,往往这些没有banner的才有问题。注意观察一下网站底部是否有技术支持:xxxx|网站建设:xxxx之类的标注,一些建站企业会出于知识产权保护或者是对外宣传自己的公司,会在自家搭建的网站上挂上技术支持等之类的标注,很多建站企业往往某种类型的网站都是套用的同一套源码,换汤不换药,运气不错的话,那我们的事件就秒变通用。
子域名收集Oneforall尽量多凑一点API,fofa可以找人借一些api,越多越好。执行命令:常用的获取子域名有2种选择,一种使用--target指定单个域名,一种使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤舆)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一个在网页的JS文件中寻找URL和子域名的工具,在网站的JS文件中,会存在各种对测试有帮助的内容,JSFinder可以帮我们获取到JS中的url和子域名的信息,扩展我们的渗透范围。爬取分为普通爬取和深度爬取,深度爬取会深入下一层页面爬取的JS,时间会消耗的相对较长。执行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt运行结束后会生成两个txt文本,Jsurl.txt为URL里面会有一些接口什么的,Jsdomain.txt为子域名基于TamperMonkey的版本:Layer、子域名收割机 进行挖掘通过这些域名收集工具(layer子域名挖掘机、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)进行挖掘。
在线网站查询为了避免IP被封掉,直接使用在线的子域名爆破网站。subDomainBrute执行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全扫描。Sublist3rKali和Windows环境下都可以装这个工具,Sublist3r是一个python版工具,其原理是基于通过使用搜索引擎,从而对站点子域名进行列举。Kali:git clone 执行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一个域名搜索网站,还会自动归纳同一个IP的多个域名。在线域名爆破小蓝本通过小蓝本进行查询:爱企查、企查查、天眼查之前爱企查活动送了会员,可以更好的进行查询。谷歌语法迅速查找信息泄露、管理后台暴露等漏洞语法,例如:filetype:txt 登录filetype:xls 登录filetype:doc 登录intitle:后台管理intitle:loginintitle:后台管理 inurl:adminintitle:index of /查找指定网站,再加上site:,例如:site: filetype:txt 登录site: intitle:后台管理site: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统谷歌/必应:site:site:如果发现检索出来的很多结果都是www,众所周知主站一般防御很严,如果我们不想看到主站可以直接 -wwwsite: -www这样出来的结果会自动删去wwwShodan、fofa、zoomeye、360quake等忘了资产搜索引擎fofa语法FOFA作为一个搜索引擎,我们要熟悉它的查询语法,类似google语法,FOFA的语法主要分为检索字段以及运算符,所有的查询语句都是由这两种元素组成的。
目前支持的检索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的逻辑运算符包括:=,==,!=,&&,||。如果搜索title字段中存在后台的网站,我们只需要在输入栏中输入title=“后台”,输出的结果即为全网title中存在后台两个字的网站,可以利用得到的信息继续进行渗透攻击,对于网站的后台进行密码暴力破解,密码找回等等攻击行为,这样就可以轻松愉快的开始一次简单渗透攻击之旅,而企业用户也可以利用得到的信息进行内部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host内所有带有的域名:host=“”例:搜索某个IP上的相关信息:ip=“58.63.236.248”ip=“111.1.1.1/8”ip="111.1.1.1/16"ip="111.1.1.1/24"例:搜索title包含有“漏洞”的IP:title=“漏洞”例:Apache出来了一个高危漏洞,我们需要去统计全球的Apache:server=“Apache”例:搜索前段时间非常火的海康威视:header=“Hikvsion”例:假如我想搜索微博的后台,域名为: 并且网页内body包含“后台”:body=“后台”&& domain=“”&&:与body=“后台”&& domain=“”提取域名为:并且网页内body包含“后台”的网站,需要同时满足两个条件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不为80端口的服务搜索证书(https或者imaps等)例:百度公司为了检查自己的域名是否还有心脏出血漏洞可以使用语法:cert=“baidu”搜索指定国家(编码)的资产例:搜索中国的服务器 country=“CN”注:country=“CN” country后面的规则为各国家的缩写,全球国家缩写如下连接:搜索指定城市的资产例:搜索上海的服务器 city=“Shanghai”注:搜索城市时填写城市的全程,首字母必须大写例:搜索centos所有主机 os=“centos”了解了基础查询我们再来说说高级查询,就是多个基础查询语句用逻辑连接符拼成的语句,例如我们要搜索上海的Discus组件,搜索语句时 (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:逻辑与||:逻辑或上面的语句意思为 (title="Disuz" ||body="content="Discuz") 与city="Shanghai" 这两个条件必须同时满足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“与body=”content=\”Discuz“ 满足一个即可
FOFA可以从不同维度搜索网络组件,例如地区,端口号,网络服务,操作系统,网络协议等等。目前FOFA支持了多个网络组件的指纹识别,包括建站模块、分享模块、各种开发框架、安全检测平台、项目管理系统、企业管理系统、视频监控系统、站长平台、电商系统、广告联盟、前端库、路由器、SSL证书、服务器管理系统、CDN、Web服务器、WAF、CMS等等尤其现在支持icon图标、logo搜索,非常方便,fofa搜索语法与shodan类似title="abc" 从标题中搜索abc。例:标题中有北京的网站header="abc" 从http头中搜索abc。例:jboss服务器body="abc" 从html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名带有的网站。例:根域名是的网站host="." 从url中搜索.,注意搜索要用host作为名称。例:政府网站, 教育网站port="443" 查找对应443端口的资产。例:查找对应443端口的资产可以安装shodan chrome插件,方便进行查看和使用。微步在线微步在线的反向IP查找域名十分好用整数透明度公开日志枚举其他途径旁站查询旁站就是在同一台服务器上搭建的多个网站,使用同一个IP地址。在目标网站无法攻击成功时,若他的旁站可以成功攻击并获取相应的系统权限,这势必会影响到目标网站的安全性,因为已经获取到同一台服务器的权限了。公众号、服务号收集搜狗搜索引擎企查查微信小程序从微信小程序入手,进行测试APP小蓝本企查查爱企查点点七麦七麦还可以切换苹果和安卓,获取下载链接apk丢进模拟器指纹识别Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需带上协议,每行一个./Ehole-darwin -f 192.168.1.1/24 //支持单IP或IP段,fofa识别需要配置fofa密钥和邮箱./Ehole-darwin -l url.txt -json export.json //结果输出至export.json文件
Glass使用方法:python3 Glass.py -u 单url测试python3 Glass.py -w domain.txt -o 1.txt // url文件内

BugScanner主站没识别出来,但是其他子站可以丢进来看看潮汐指纹Kscan此工具需要go环境云悉云悉可以在线搜索子域名、IP段、CMS指纹等信息大禹CMS识别程序对于查询到的CMS可以利用网站用于查询其他finger 或者棱镜也可以绕过CDN如果目标没有使用CDN,可以通过ping获取IP地址。或者利用在线网站 使用了CDN就绕过CDN来获取真实的IP地址:因为有些网站设置CDN时,可能没把国外的访问包含进去,所以可以尝试国外绕过验证ip地址因为通过各种方法得到的ip地址很多,有的是伪ip,无法访问,这就需要逐个验证,方法简单但是i西南西量比较大,利用ip地址对web站点进行访问查询域名解析记录内部邮箱源,收集到内部邮箱服务器IP地址网站phpinfo文件phpinfo.php分站IP地址,查询子域名,CDN很贵,很可能分站就不再使用CDN国外访问敏感信息收集githubgithub敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区,安全意识薄弱的同事经常会将公司的代码、各种服务的账号等极度敏感的信息【开源】到github中这里可以利用github找存在这个关键字的代码,这样可以收集到的方面更广
GSIL项目:通过配置关键词,实时监控GitHub敏感信息泄露情况,并发送至指定邮箱常见自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)从流量中分析提取流量代理:通过WebProxy代理电脑所有流量,再分析流量中出现的子域名域名跳转记录中的子域名Response中存在的子域名网络请求资源中的子域名DNS解析SSL证书查询暴力枚举网盘搜索盘多多:盘搜搜:盘搜:凌云风搜索:直接输入厂商名字然后搜索,看看是否泄露了源码,或者账号密码之类的路径扫描404,403页面,不是真的没有东西,要一层一层fuzz,一层一层的扫下去工具:具体使用方法可以查看github介绍,这里我一般是使用如下命令(因为担心线程太高所以通过-t参数设置为2)。python3 dirsearch.py -u * -t 2关键的地方是大家都可以下载这款工具,获取它自带的字典,那么路径的话,便是大家都能够搜得到的了,所以这里我推荐是可以适当整合一些师傅们发出来的路径字典到/dirsearch-0.4.2/db/dicc.txt中。推荐一些字典:GitHub - ybdt/dict-hub: 红队字典:弱用户名、弱口令、默认口令、泄露密钥dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每个工具扫出来同一个站点都会爆出不同的路径,建议把三个工具都拿来扫一遍,另外找一些像后台、登录系统之类的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统御剑7kbscandirsearch基于证书基于shodan找到带有该icon的网站在shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法搜索出使用了同一icon图标的网站。
由于hash为一个未知的随机数,所以是无法通过输入一个确定的hash值来搜索带有指定图标的网站的,只能通过查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。那么这里的用法就非常具有局限性,你只能是碰运气来找到你所需要查找的网站,因为shodan不一定收录了你想要搜索的网站。那么如果shodan收录了某个IP,这个服务器带有某个icon图标,也可以搜索所有带有此icon的服务器IP如果我像搜索带有这个icon的所有IP地址的话,可以先在shodan搜索这个IP。注意:shodan中有一个功能,shodan的原始数据(Raw Data)功能。点击详情里的View Raw Data,打开可以看到shodan所存储的关于这个IP的所有信息的原始数据。关于icon hash的字段是:data.0.http.favicon.hash这个数值就是http.favicon.hash:中所需要的搜索值。根据上述得到的hash值,成功得到了所有待用这个icon的网站。域传送漏洞DNS区域传送(DNZ zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。
这位运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误的配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送(zone transfer)操作是最为严重的错误配置之一。可以用dig工具来检测域传送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通过域名传送漏洞可以得到子域名信息以及子域名对应的IP地址。常见漏洞弱口令,管理员权限的弱口令,可以是一些后台管理系统的,也可以是防火墙的。越权,这个相对来说比较常见,系统设计存在缺陷,通过参数来传递身份和访问请求页面的信息,只需要修改参数即可越权到别人的身份,可能有垂直越权,也可能是水平越权。SQL注入,只要细心一点,SQL注入也是比较常见的,只要能注出数据库就行了,注意别惹祸上身。文件上传,这类的话,有一些老系统没什么限制,可以尝试。struts2框架漏洞,这个框架出了很多漏洞,前段时间比较火。shiro命令执行,也是框架漏洞,一个反序列化漏洞,现在网上还存在很多存在这个洞的站点。任意文件下载,在一些站点的下载点,可以抓包测试,通过修改下载链接中下载文件的路径,像/etc/passwd,WEB-INF/web.xml等文件。任意文件下载常用路径:LINUX:
/root/.ssh/authorized_keys<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_rsa<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_ras.keystore<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/known_hosts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/passwd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/shadow<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/issue<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/fstab<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/host.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/motd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/sysctl.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/inputrc 输入设备配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/default/useradd 添加用户的默认信息的文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/login.defs 是用户密码信息的默认属性<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/skel 用户信息的骨架<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/sbin/nologin 不能登陆的用户<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/log/message 系统的日志文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf 配置http服务的配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/ld.so.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/my.cnf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.bash_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.mysql_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/proc/mounts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/config.gz<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/lib/mlocate/mlocate.db<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/self/cmdline
WINDOWS:
C:\windows\system32\drivers\etc\hosts host文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\boot.ini //查看系统版本<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\repair\sam //系统初次安装的密码<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\my.ini //Mysql配置<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\data\mysql\user.MYD //Mysqlroot<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\php.ini //php配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\my.ini //Mysql配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\win.ini //Windows系统的一个基本系统配置文件
逻辑漏洞,一些已经被很多人挖过的站点除了一些最新的漏洞之外,可能就只剩下逻辑漏洞了,比如任意密码修改,或者一些组件漏洞,还有在修改密码的地方,修改密码请求是一次发包还是分两次发包,密码找回点,有些情况下验证码就在返回包中包含着;有些情况下接受验证码的手机号或者邮箱就在请求包中,可修改为自己的,验证码就会发送到你修改的手机号或者邮箱处,挖逻辑漏洞的话,更多情况下要抓包查看,了解它的逻辑,从中找到缺陷。具体可以看:该文章专门对逻辑漏洞进行了总结。文章来源:FreeBuf.COM;作者:YLion侵权请私聊公众号删文
我做OZON的第24篇:上架产品三种方式之ERP采集刊登详细步骤
采集交流 • 优采云 发表了文章 • 0 个评论 • 973 次浏览 • 2022-08-26 13:39
目前OZON平台卖家使用最多的采集刊登软件是“芒果店长”,那么这篇文章就以【芒果店长】为例来演示如何通过ERP进行采集刊登产品。
首先说一下,对于卖家来说应该使用ERP刊登还是表格刊登,这里要看具体需求。
如果是需要大量采集和翻译图片的,那么通过ERP是会提高效率,因为ERP的图片翻译和图片采集确实要方便很多。但是如果上架产品不多,并集中在某一些品类,那么使用表格刊登反而更好!
第一步:注册登录芒果店长
各位卖家可以自己前往芒果店长注册登录,这里就不做演示
第二步:授权店铺
1、在如下图所示区域输入:店铺别名(自己填写,方便管理即可);Client-Id;Api-Key。然后点击保存即可
2、Client-Id和Api-Key的获取:
(1)进入OZON店铺后台,点击设置页面
(2)点击API秘钥
(3)在如下所示的弹窗中,点击复制按钮,复制秘钥。注意:这个秘钥仅显示1次,注意自己保存好!
3、将Client-Id和Api-Key填进去之后,点击保存,即表示授权成功!
第三步:安装最新版本芒果采集插件
芒果官网有详细的采集插件安装教程,支持chrome\360\QQ\火狐等多款浏览器。教程地址为:
如果出现如下图所示的效果,即表示插件安装成功。
第四步:采集产品(以1688为例)
1、找到你选好的产品,并将其1688的网址复制到芒果店长的采集框内;
2、点击【开始采集】
3、也可以使用采集插件采集,如下图所示,在1688页面底部会出现采集按钮,点击【开始采集】即可。
注意:在某些平台采集的时候,可能会要求授权账号。比如采集1688网址,就需要授权。在这里直接点击授权,然后进入之后输入1688账号及密码即可完成授权。然后就可以正常采集了!
4、成功采集后就会出现如下图所示状态
第五步:认领产品到ozon产品库
这里也可以批量认领,意思就是把你采集的商品认领到你的某个平台的商品库。如果你设置了自动认领规则,这个采集的产品也会自动进入你设置的平台产品刊登库。
第六步:编辑上产品
1、进入产品刊登的ozon平台页面,找到这个产品并点击【编辑】
2、编辑产品:
(1)选择店铺和类目:店铺是必选的,类目需要大家自己查找或者搜索。(如何快速发现自己产品所在的类目,后续我会发一篇文章给大家进行分享)
(2)设置基本信息:
a、标题:这里支持翻译,中文翻译成俄文,英文翻译成俄文,还是比较方便的。
b、SKU编码:自己填写,方便管理即可。
c、其他:增值税、价格、重量、尺寸、合并编号(PDP卡)等等,按照后台单个上传的要求填写即可。
(3)填写特征信息:这里根据不同的类目自动生成的维度正确填写即可。注意这里尽量多填,对于提升产品评分是有帮助的,能够提升产品的搜索权重。
(4)视频图片模块:
a、视频:与后台设置同理,需要填写youtube后缀代码。
b、图片:这里直接从来源网站获取了产品的图片信息,这是比较方便的地方,可以直接选择【采集的图片】进行上传,上传之后如果有中文或者英文信息,可以选择图片翻译。
第七步:保存并提交发布
1、建议大家全部填写完成后,先点击保存然后检查一遍,检查无误后再提交发布。
2、提交发布有两种方式,一种是定时发布,一种是直接发布。
提交发布之后,前往ozon后台即可看到该产品会进入待审核状态,等待审核通过即可。
那么以上就是关于OZON如何通过ERP软件进行采集刊登上架产品的详细教程。 查看全部
我做OZON的第24篇:上架产品三种方式之ERP采集刊登详细步骤
目前OZON平台卖家使用最多的采集刊登软件是“芒果店长”,那么这篇文章就以【芒果店长】为例来演示如何通过ERP进行采集刊登产品。
首先说一下,对于卖家来说应该使用ERP刊登还是表格刊登,这里要看具体需求。
如果是需要大量采集和翻译图片的,那么通过ERP是会提高效率,因为ERP的图片翻译和图片采集确实要方便很多。但是如果上架产品不多,并集中在某一些品类,那么使用表格刊登反而更好!
第一步:注册登录芒果店长
各位卖家可以自己前往芒果店长注册登录,这里就不做演示
第二步:授权店铺
1、在如下图所示区域输入:店铺别名(自己填写,方便管理即可);Client-Id;Api-Key。然后点击保存即可
2、Client-Id和Api-Key的获取:
(1)进入OZON店铺后台,点击设置页面
(2)点击API秘钥
(3)在如下所示的弹窗中,点击复制按钮,复制秘钥。注意:这个秘钥仅显示1次,注意自己保存好!
3、将Client-Id和Api-Key填进去之后,点击保存,即表示授权成功!

第三步:安装最新版本芒果采集插件
芒果官网有详细的采集插件安装教程,支持chrome\360\QQ\火狐等多款浏览器。教程地址为:
如果出现如下图所示的效果,即表示插件安装成功。
第四步:采集产品(以1688为例)
1、找到你选好的产品,并将其1688的网址复制到芒果店长的采集框内;
2、点击【开始采集】
3、也可以使用采集插件采集,如下图所示,在1688页面底部会出现采集按钮,点击【开始采集】即可。
注意:在某些平台采集的时候,可能会要求授权账号。比如采集1688网址,就需要授权。在这里直接点击授权,然后进入之后输入1688账号及密码即可完成授权。然后就可以正常采集了!
4、成功采集后就会出现如下图所示状态
第五步:认领产品到ozon产品库
这里也可以批量认领,意思就是把你采集的商品认领到你的某个平台的商品库。如果你设置了自动认领规则,这个采集的产品也会自动进入你设置的平台产品刊登库。

第六步:编辑上产品
1、进入产品刊登的ozon平台页面,找到这个产品并点击【编辑】
2、编辑产品:
(1)选择店铺和类目:店铺是必选的,类目需要大家自己查找或者搜索。(如何快速发现自己产品所在的类目,后续我会发一篇文章给大家进行分享)
(2)设置基本信息:
a、标题:这里支持翻译,中文翻译成俄文,英文翻译成俄文,还是比较方便的。
b、SKU编码:自己填写,方便管理即可。
c、其他:增值税、价格、重量、尺寸、合并编号(PDP卡)等等,按照后台单个上传的要求填写即可。
(3)填写特征信息:这里根据不同的类目自动生成的维度正确填写即可。注意这里尽量多填,对于提升产品评分是有帮助的,能够提升产品的搜索权重。
(4)视频图片模块:
a、视频:与后台设置同理,需要填写youtube后缀代码。
b、图片:这里直接从来源网站获取了产品的图片信息,这是比较方便的地方,可以直接选择【采集的图片】进行上传,上传之后如果有中文或者英文信息,可以选择图片翻译。
第七步:保存并提交发布
1、建议大家全部填写完成后,先点击保存然后检查一遍,检查无误后再提交发布。
2、提交发布有两种方式,一种是定时发布,一种是直接发布。
提交发布之后,前往ozon后台即可看到该产品会进入待审核状态,等待审核通过即可。
那么以上就是关于OZON如何通过ERP软件进行采集刊登上架产品的详细教程。
日志收集神器:Fluentd 的简明指南,果断收藏
采集交流 • 优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-08-18 12:56
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd配置。
基本概念我们可能有在 bash 中执行过tail -f myapp.log | grep “what I want” > example.log这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入
tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤
| grep "what I want"
在这里,我们从尾部-f的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出
> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd
$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看input部分
@type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志example.20200510.log。
2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh.lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现grep ‘what I want’过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea
解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,能够从一些日志数据中来过滤、解析提取有用的信息。 查看全部
日志收集神器:Fluentd 的简明指南,果断收藏
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd配置。
基本概念我们可能有在 bash 中执行过tail -f myapp.log | grep “what I want” > example.log这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入
tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤
| grep "what I want"
在这里,我们从尾部-f的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出
> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}

这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd
$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看input部分
@type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志example.20200510.log。
2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh.lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。

过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现grep ‘what I want’过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea
解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,能够从一些日志数据中来过滤、解析提取有用的信息。
前端监控系列3 | 如何衡量一个站点的性能好坏
采集交流 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-08-18 01:27
作者:彭莉,火山引擎 APM 研发工程师。2020年加入字节,负责前端监控 SDK 的开发维护、平台数据消费的探索和落地。
背景你知道有多少用户没等到页面首屏出现就离开了吗?性能不佳会对业务目标产生负面影响。比如, BBC 发现他们的网站加载时间每增加一秒,他们就会失去 10% 的用户。高性能站点比低性能站点更能吸引和留住用户,而留住用户对于提高用户转化率至关重要。
这篇文章就是以此为背景,介绍字节内部是如何衡量站点性能的,如何依靠性能监控定位线上站点性能问题的。
如何衡量站点性能站点性能好坏的表现形式是多样的,不是单纯通过页面加载速度、页面渲染速度就能衡量,而是要关注从页面开始加载到被关闭的整个过程中,用户对性能的感知。一个页面,即使很快渲染,如果对用户的交互迟迟没有响应,那么在用户心中这个站点的性能依然很差。
站点性能一般可以分为两类,一类是首屏性能,另一类是运行时性能。前者衡量的是页面从加载开始到可以稳定交互的性能情况,后者衡量的是页面稳定后到页面关闭的性能情况。
首屏性能早在 2012 年, Web 性能工作组[1]就针对页面加载场景制定了加载过程模型,用来衡量页面加载各个阶段的耗时情况,从而衡量页面加载的性能。具体的加载过程模型如图所示:
这个模型定义了页面加载开始到页面加载完成整个过程的各个时间点,除了正常的初始化并且拉取到主文档的时间点以外,还包括了解析渲染的详细时间点。比如:虽然开发者可以根据这些时间点来衡量页面加载时的性能情况,但是线上用户其实感知不到这些时间点的区别。对于用户而言,只能感知到页面何时开始渲染、何时渲染出主要内容、何时可以交互、以及交互时是否有延迟。
那么针对用户感知到的这四个阶段,有没有可用于衡量的指标呢?
何时开始渲染:FP && FCP
这两个指标都来源于 Paint Timing[2] 标准, 这个标准主要是记录在页面加载期间的一些关键时间点。通过这两个指标,就可以衡量页面何时开始渲染内容了。
何时渲染出主要内容:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时渲染出主要内容了。不过业界有测试得出, LCP 非常近似于 FMP 的时间点,同时 FMP 性能消耗较大,且会因为一些细小的变化导致数值巨大波动,所以推荐使用 LCP。而 SI 因为计算复杂,指标难以解释,所以一般只在实验室环境下使用。
何时可以交互:TTI && TBT
TTI 虽然可以衡量页面可以交互的时间点,但是却无法感知这个期间浏览器的繁忙状态。而结合 TBT ,就能帮助理解在加载期间,页面无法响应用户输入的时间有多久。
交互时是否有延迟:FID && MPFIDMPFID 是一个虚拟的可能的延迟时间,而FID是用户真实的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户建立对整个应用的良好印象。同时在页面加载阶段,资源的处理任务最重,最容易产生输入延迟。
至此,通过上面每个阶段的指标,基本可以实现全面衡量首屏性能。那么运行时的性能又可以怎样衡量呢?
运行时性能
运行时性能一般可以通过Long tasks 和 Input Delay来感知。Long tasks主要是衡量主线程的繁忙情况,而 Input Delay 主要是衡量用户交互的延迟情况。
Long tasks
如果一个任务在主线程上运行超过 50 毫秒,那么它就是 Long task。如果可以收集到运行时的所有Long tasks,就能知道运行时的性能情况。在具体实践中,可以关注耗时较长的Long task,将它和用户行为关联在一起,可以有效帮助定位线上卡顿的原因。
Input Delay
它源于 Event Timing[3] 标准,这个标准主要是帮助深入了解由用户交互触发的某些事件的延迟,通过计算用户输入和处理输入后的页面绘制时间的差值来感知延迟时间。这些延迟通常是由于开发人员代码编写不当,引起 JS 执行时间过长而产生的。
性能指标的计算原理
页面性能相关的指标都有了,那么如何采集这些数据呢?
采集页面加载过程的各阶段耗时
页面加载过程中的时间点主要依赖 Navigation Timing[4] 标准,这个标准后来升级到了2.0版本, 对应 Navigation Timing 2[5]标准,两者虽然不尽相同,但是可计算出的指标基本一致。在浏览器中可以通过下面的方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
基于这些数据,不仅可以计算出 DNS / TCP / Request 等耗时,还可以计算出 DOMReady / DOMParse / Load 等耗时。
采集 FP && FCP
FP 和 FCP 可以通过浏览器提供的 API 直接获取,所以采集原理并不复杂。如果页面已经完成了首次绘制和首次内容绘制,可以使用下面的方式直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有开始首次绘制,就需要通过监听获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
采集 LCP
LCP 主要依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});<br />
浏览器会多次报告 LCP ,而一般真正的 LCP 是用户交互前最近一次报告的 LCP ,因为交互往往会改变用户可见的内容,所以用户交互后新报告的 LCP 不再符合 LCP 的指标定义。
采集 FMP与 FP / FCP / LCP 相比, FMP 的采集相对比较复杂,它需要通过算法计算得出,而业界并没有统一的算法。不过比较认可的一个计算 FMP 的方式是「认定页面在加载和渲染过程中最大布局变动之后的那个绘制时间即为当前页面的 FMP 」。由于在页面渲染过程中,「 DOM 结构变化的时间点」和与之对应的「渲染的时间点」近似相同,所以字节内部计算 FMP 的方式是:计算出 DOM 结构变化最剧烈的时间点,即为 FMP。具体步骤为:通过 MutationObserver 监听每一次页面整体的 DOM 变化,触发 MutationObserver 的回调在回调计算出当前 DOM 树的分数在结算时,通过对比得出分数变化最剧烈的时刻,即为 FMP采集 TTI && TBT与 FMP 相似,浏览器也没有提供直接获取 TTI 的 API ,不过针对如何计算 TTI 有详细的描述,实现对应描述就可以得出 TTI 的时间点。具体的描述是:先找到 FCP 的时间点,再往前找到一个安静窗口。安静窗口需要满足三个条件: 1) 没有 Long task。2)窗口中正在处理的 GET 请求不超过两个。3) 窗口时间窗读应该至少 5s。
窗口前的最后一个长任务的结束时间就是 TTI 。
而通过计算 FCP 和 TTI 之间的长任务的阻塞时间的总和,就能得出 TBT 。
阻塞时间是 Long task 中超过 50ms 后的任务耗时。
采集 FID && MPFID
FID 同样依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务耗时,可以通过监听 FCP 之后的 Long tasks,对比拿到最长的长任务就是 MPFID 。
虽然浏览器提供了足够的 API 来帮助采集各个性能指标,但是在 JS 中计算具体指标要更为复杂。原因有两点:一是 API 报告的内容和指标本身的定义有部分差异,所以计算时要处理这些差异;二是 部分场景下浏览器不会报告对应内容,这些场景下需要模拟测量。
怎样评估站点整体的性能好坏
虽然有众多性能指标,但是每个性能指标评估的都是单一方面,如何整体来看站点的性能是好是坏呢?对于每个单一指标,是否有标准去定义指标的值在具体哪个范围内能算优秀?线上的站点性能应该重点考量哪些性能指标?各个性能指标的权重占多少合适呢?
性能指标基准线Google 提供了各个性能指标的基准线,有一定的参考意义。为什么只说是有一定参考意义?首先基准线本身是在变化的,随着指标计算的逐渐更新以及软件硬件的更新,基准线也会有一定的调整。其次用户的使用场景对性能指标也会有很大的影响,比如 iOS 用户上报的性能指标一般都优于 Android 用户上报的性能指标。
下方是目前字节内部使用的部分性能指标基准线,基本对齐 Google 建议的基准线,通过这些数据可以分析站点的性能达标率情况。
衡量站点满意度
站点满意度的衡量除了要考虑常规的性能指标外,还要考虑体验类的指标,比如专门衡量视觉稳定性的指标 CLS。
线上的站点满意度衡量,一般会在参考lighthouse的满意度计算规则的基础上,去除一些推荐在实验室环境测量的指标的权重。
下方是目前字节使用的线上站点性能满意度的权重计算公式,去除了SI 和 TBT这两个不推荐在线上环境测量的指标。
那么有了一个站点满意度以后,我们终于能知道一个站点的性能好坏了。那么假设性能不好,我们应该怎样优化?
如何优化站点性能通常,我们可以从性能指标下手去做针对性的优化。虽然指标各不相同,但是优化的思路是相通的。在了解清楚指标的依赖项以后,通过优化指标的相关依赖项,就能快速优化性能指标,从而提升站点性能。说起来比较抽象,举个例子:比如当我们想要优化 TTI ,根据刚刚提到的 TTI 的计算方式,可以得出 TTI 的依赖项主要包含 FCP 、请求和 Long tasks,那么尽快的渲染、尽早的请求、请求尽快结束、避免长任务就是优化的关键。关于指标的具体优化措施的内容比较多,将在后续的文章中展开介绍。了解全面的优化措施固然重要,但把每个措施都做一遍并不一定能够高效地解决站点面临的关键性能问题。如何立竿见影、具有针对性的去优化?通过还原用户加载时的情况来帮助定位性能问题是一个思路。利用线上监控定位性能问题一般情况下,前端监控除了监控性能指标以外,还会监控请求和资源的加载以及 Long tasks 等数据,这些数据可以帮助还原用户的加载现场,帮助找到蛛丝马迹。比如下面这个例子, 多项性能指标都很差。通过监控平台还原出的资源加载瀑布图,可以看出绝大部分时间都耗在了拉取资源上。那么就可以初步得出性能优化方案,将优化措施侧重在资源优化上,比如缩小JS文件体积、延迟加载未使用的JS代码等等。
线上监控帮助定位性能问题的例子还有很多,这里不一一介绍了。截图中使用的是字节内部的前端监控平台,目前这套解决方案已同步在火山引擎上,接入即可对 Web 端真实数据进行实时监控、报警归因、聚类分析和细节定位,解决白屏、性能瓶颈、慢查询等关键问题,欢迎体验。
扫描下方二维码,立即申请免费使用⬇️ 查看全部
前端监控系列3 | 如何衡量一个站点的性能好坏
作者:彭莉,火山引擎 APM 研发工程师。2020年加入字节,负责前端监控 SDK 的开发维护、平台数据消费的探索和落地。
背景你知道有多少用户没等到页面首屏出现就离开了吗?性能不佳会对业务目标产生负面影响。比如, BBC 发现他们的网站加载时间每增加一秒,他们就会失去 10% 的用户。高性能站点比低性能站点更能吸引和留住用户,而留住用户对于提高用户转化率至关重要。
这篇文章就是以此为背景,介绍字节内部是如何衡量站点性能的,如何依靠性能监控定位线上站点性能问题的。
如何衡量站点性能站点性能好坏的表现形式是多样的,不是单纯通过页面加载速度、页面渲染速度就能衡量,而是要关注从页面开始加载到被关闭的整个过程中,用户对性能的感知。一个页面,即使很快渲染,如果对用户的交互迟迟没有响应,那么在用户心中这个站点的性能依然很差。
站点性能一般可以分为两类,一类是首屏性能,另一类是运行时性能。前者衡量的是页面从加载开始到可以稳定交互的性能情况,后者衡量的是页面稳定后到页面关闭的性能情况。
首屏性能早在 2012 年, Web 性能工作组[1]就针对页面加载场景制定了加载过程模型,用来衡量页面加载各个阶段的耗时情况,从而衡量页面加载的性能。具体的加载过程模型如图所示:
这个模型定义了页面加载开始到页面加载完成整个过程的各个时间点,除了正常的初始化并且拉取到主文档的时间点以外,还包括了解析渲染的详细时间点。比如:虽然开发者可以根据这些时间点来衡量页面加载时的性能情况,但是线上用户其实感知不到这些时间点的区别。对于用户而言,只能感知到页面何时开始渲染、何时渲染出主要内容、何时可以交互、以及交互时是否有延迟。
那么针对用户感知到的这四个阶段,有没有可用于衡量的指标呢?
何时开始渲染:FP && FCP
这两个指标都来源于 Paint Timing[2] 标准, 这个标准主要是记录在页面加载期间的一些关键时间点。通过这两个指标,就可以衡量页面何时开始渲染内容了。
何时渲染出主要内容:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时渲染出主要内容了。不过业界有测试得出, LCP 非常近似于 FMP 的时间点,同时 FMP 性能消耗较大,且会因为一些细小的变化导致数值巨大波动,所以推荐使用 LCP。而 SI 因为计算复杂,指标难以解释,所以一般只在实验室环境下使用。
何时可以交互:TTI && TBT
TTI 虽然可以衡量页面可以交互的时间点,但是却无法感知这个期间浏览器的繁忙状态。而结合 TBT ,就能帮助理解在加载期间,页面无法响应用户输入的时间有多久。
交互时是否有延迟:FID && MPFIDMPFID 是一个虚拟的可能的延迟时间,而FID是用户真实的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户建立对整个应用的良好印象。同时在页面加载阶段,资源的处理任务最重,最容易产生输入延迟。
至此,通过上面每个阶段的指标,基本可以实现全面衡量首屏性能。那么运行时的性能又可以怎样衡量呢?
运行时性能
运行时性能一般可以通过Long tasks 和 Input Delay来感知。Long tasks主要是衡量主线程的繁忙情况,而 Input Delay 主要是衡量用户交互的延迟情况。
Long tasks
如果一个任务在主线程上运行超过 50 毫秒,那么它就是 Long task。如果可以收集到运行时的所有Long tasks,就能知道运行时的性能情况。在具体实践中,可以关注耗时较长的Long task,将它和用户行为关联在一起,可以有效帮助定位线上卡顿的原因。
Input Delay

它源于 Event Timing[3] 标准,这个标准主要是帮助深入了解由用户交互触发的某些事件的延迟,通过计算用户输入和处理输入后的页面绘制时间的差值来感知延迟时间。这些延迟通常是由于开发人员代码编写不当,引起 JS 执行时间过长而产生的。
性能指标的计算原理
页面性能相关的指标都有了,那么如何采集这些数据呢?
采集页面加载过程的各阶段耗时
页面加载过程中的时间点主要依赖 Navigation Timing[4] 标准,这个标准后来升级到了2.0版本, 对应 Navigation Timing 2[5]标准,两者虽然不尽相同,但是可计算出的指标基本一致。在浏览器中可以通过下面的方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
基于这些数据,不仅可以计算出 DNS / TCP / Request 等耗时,还可以计算出 DOMReady / DOMParse / Load 等耗时。
采集 FP && FCP
FP 和 FCP 可以通过浏览器提供的 API 直接获取,所以采集原理并不复杂。如果页面已经完成了首次绘制和首次内容绘制,可以使用下面的方式直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有开始首次绘制,就需要通过监听获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
采集 LCP
LCP 主要依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});<br />
浏览器会多次报告 LCP ,而一般真正的 LCP 是用户交互前最近一次报告的 LCP ,因为交互往往会改变用户可见的内容,所以用户交互后新报告的 LCP 不再符合 LCP 的指标定义。
采集 FMP与 FP / FCP / LCP 相比, FMP 的采集相对比较复杂,它需要通过算法计算得出,而业界并没有统一的算法。不过比较认可的一个计算 FMP 的方式是「认定页面在加载和渲染过程中最大布局变动之后的那个绘制时间即为当前页面的 FMP 」。由于在页面渲染过程中,「 DOM 结构变化的时间点」和与之对应的「渲染的时间点」近似相同,所以字节内部计算 FMP 的方式是:计算出 DOM 结构变化最剧烈的时间点,即为 FMP。具体步骤为:通过 MutationObserver 监听每一次页面整体的 DOM 变化,触发 MutationObserver 的回调在回调计算出当前 DOM 树的分数在结算时,通过对比得出分数变化最剧烈的时刻,即为 FMP采集 TTI && TBT与 FMP 相似,浏览器也没有提供直接获取 TTI 的 API ,不过针对如何计算 TTI 有详细的描述,实现对应描述就可以得出 TTI 的时间点。具体的描述是:先找到 FCP 的时间点,再往前找到一个安静窗口。安静窗口需要满足三个条件: 1) 没有 Long task。2)窗口中正在处理的 GET 请求不超过两个。3) 窗口时间窗读应该至少 5s。
窗口前的最后一个长任务的结束时间就是 TTI 。
而通过计算 FCP 和 TTI 之间的长任务的阻塞时间的总和,就能得出 TBT 。

阻塞时间是 Long task 中超过 50ms 后的任务耗时。
采集 FID && MPFID
FID 同样依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务耗时,可以通过监听 FCP 之后的 Long tasks,对比拿到最长的长任务就是 MPFID 。
虽然浏览器提供了足够的 API 来帮助采集各个性能指标,但是在 JS 中计算具体指标要更为复杂。原因有两点:一是 API 报告的内容和指标本身的定义有部分差异,所以计算时要处理这些差异;二是 部分场景下浏览器不会报告对应内容,这些场景下需要模拟测量。
怎样评估站点整体的性能好坏
虽然有众多性能指标,但是每个性能指标评估的都是单一方面,如何整体来看站点的性能是好是坏呢?对于每个单一指标,是否有标准去定义指标的值在具体哪个范围内能算优秀?线上的站点性能应该重点考量哪些性能指标?各个性能指标的权重占多少合适呢?
性能指标基准线Google 提供了各个性能指标的基准线,有一定的参考意义。为什么只说是有一定参考意义?首先基准线本身是在变化的,随着指标计算的逐渐更新以及软件硬件的更新,基准线也会有一定的调整。其次用户的使用场景对性能指标也会有很大的影响,比如 iOS 用户上报的性能指标一般都优于 Android 用户上报的性能指标。
下方是目前字节内部使用的部分性能指标基准线,基本对齐 Google 建议的基准线,通过这些数据可以分析站点的性能达标率情况。
衡量站点满意度
站点满意度的衡量除了要考虑常规的性能指标外,还要考虑体验类的指标,比如专门衡量视觉稳定性的指标 CLS。
线上的站点满意度衡量,一般会在参考lighthouse的满意度计算规则的基础上,去除一些推荐在实验室环境测量的指标的权重。
下方是目前字节使用的线上站点性能满意度的权重计算公式,去除了SI 和 TBT这两个不推荐在线上环境测量的指标。
那么有了一个站点满意度以后,我们终于能知道一个站点的性能好坏了。那么假设性能不好,我们应该怎样优化?
如何优化站点性能通常,我们可以从性能指标下手去做针对性的优化。虽然指标各不相同,但是优化的思路是相通的。在了解清楚指标的依赖项以后,通过优化指标的相关依赖项,就能快速优化性能指标,从而提升站点性能。说起来比较抽象,举个例子:比如当我们想要优化 TTI ,根据刚刚提到的 TTI 的计算方式,可以得出 TTI 的依赖项主要包含 FCP 、请求和 Long tasks,那么尽快的渲染、尽早的请求、请求尽快结束、避免长任务就是优化的关键。关于指标的具体优化措施的内容比较多,将在后续的文章中展开介绍。了解全面的优化措施固然重要,但把每个措施都做一遍并不一定能够高效地解决站点面临的关键性能问题。如何立竿见影、具有针对性的去优化?通过还原用户加载时的情况来帮助定位性能问题是一个思路。利用线上监控定位性能问题一般情况下,前端监控除了监控性能指标以外,还会监控请求和资源的加载以及 Long tasks 等数据,这些数据可以帮助还原用户的加载现场,帮助找到蛛丝马迹。比如下面这个例子, 多项性能指标都很差。通过监控平台还原出的资源加载瀑布图,可以看出绝大部分时间都耗在了拉取资源上。那么就可以初步得出性能优化方案,将优化措施侧重在资源优化上,比如缩小JS文件体积、延迟加载未使用的JS代码等等。
线上监控帮助定位性能问题的例子还有很多,这里不一一介绍了。截图中使用的是字节内部的前端监控平台,目前这套解决方案已同步在火山引擎上,接入即可对 Web 端真实数据进行实时监控、报警归因、聚类分析和细节定位,解决白屏、性能瓶颈、慢查询等关键问题,欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
日志收集神器:Fluentd 的简明指南,收好了~
采集交流 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-13 23:42
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩分享
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是 fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd 也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd 配置。
基本概念我们可能有在 bash 中执行过 tail -f myapp.log | grep “what I want” > example.log 这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤| grep "what I want"
在这里,我们从尾部 -f 的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf 是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看 input 部分 @type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string >
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志 example.20200510.log。
2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh。
lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1。1\" 404 48 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1。1\" 401 26 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1。1\" 499 0 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
log>log>
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现 grep ‘what I want’ 过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,我们能够从一些日志数据中来过滤、解析提取有用的信息。
福利
系统/网络/应用运维人员的交流圈子,不定期为您提供运维技术领域前沿资讯/培训课程/独家技术手册/运维工具/文档模板等,行业大咖分享交流/同行经验分享互动,期待你的加入!扫码即可加入。
随着材料不断增多社群会不定期涨价早加入更优惠
扫码添加客服微信免费获取以下资料:
1.网络安全技术资料--回复"1"
2.容器云运维资料包--回复"2"
3.Python学习资料--回复"3"
4.Devops学习视频课件--回复"4"
5.Linux运维技术资料--回复"5" 查看全部
日志收集神器:Fluentd 的简明指南,收好了~
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩分享
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是 fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd 也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd 配置。
基本概念我们可能有在 bash 中执行过 tail -f myapp.log | grep “what I want” > example.log 这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤| grep "what I want"
在这里,我们从尾部 -f 的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf 是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:

2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看 input 部分 @type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string >
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志 example.20200510.log。
2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh。
lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1。1\" 404 48 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1。1\" 401 26 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1。1\" 499 0 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
log>log>
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现 grep ‘what I want’ 过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea解析访问日志

为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,我们能够从一些日志数据中来过滤、解析提取有用的信息。
福利
系统/网络/应用运维人员的交流圈子,不定期为您提供运维技术领域前沿资讯/培训课程/独家技术手册/运维工具/文档模板等,行业大咖分享交流/同行经验分享互动,期待你的加入!扫码即可加入。
随着材料不断增多社群会不定期涨价早加入更优惠
扫码添加客服微信免费获取以下资料:
1.网络安全技术资料--回复"1"
2.容器云运维资料包--回复"2"
3.Python学习资料--回复"3"
4.Devops学习视频课件--回复"4"
5.Linux运维技术资料--回复"5"
开源专利分析工具(下) | The WIPO Manual on Open So
采集交流 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-08-10 15:25
将本文节选自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介绍了可用于专利分析的开源工具。本文所介绍的工具可以分为八个种类:通用工具、数据清理工具、数据挖掘工具、数据可视化工具、网络数据可视化工具、信息图制作工具、地理数据可视化工具、文本挖掘工具。上期文章介绍了前面六种(相关链接:;),本期文章介绍最后两种:地理数据可视化工具、文本挖掘工具。PART 7地理数据可视化工具
对于地理数据可视化工具,除了无处不在的Google地图和众所周知的Google地球,我们认为还可以去探索一些其他的工具。
7.1 Open Street Map目前越来越受欢迎的一款应用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受欢迎的、开源的、基于JavaScript库的交互地图。
可通过API访问。R用户可以使用leafletr包,其教程在R-bloggers上()。Python用户的相关教程可以参见以下链接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map来创建强大的交互图表组合,这些图表可以链接到具有不同地理编码精度的地图。Tableau Public可能是用专利数据创建地图的最简单的入门工具。下面这张地图就是使用自定义地理编码创建的,其展示了科学出版物出版的国家以及这些科学出版物的名称。进入后方链接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一个在所有主流平台上都能够运行的软件包。
WIPO的专利分析专家利用QGIS描绘了全球海洋生物科学研究和专利文献的全球分布,并标记了深海热液喷口的位置()。下图是基于科学文献文本挖掘得出的全球海洋科学研究点的QGIS地图。
7.5 .
.()不是一个地图制作工具,而是一个包含了全球地理名称的数据库。在.中,你可以获得很多地方的地理位置数据。用户可以在R、以及Python、Ruby、PHP的客户端通过geonames包()访问geonames。7.6 OpenLayers
如果你想要制作自定义的一些地图形式,OpenLayers()可以帮到你。用户可以通过OpenLayers在OpenStreetMap制作的地图上添加更多的图层和其他数据源,这样就可以制作出用户自己想要的地图。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款开源网络应用程序和交互式地图制作工具,CartoDB具有免费和付费两种账户。对于开发者而言,CartoDB有很多工具的扩展文档和API。7.8 D3.js
D3.js()是一个用于编辑数据和文档的JavaScript库。D3.js也是网络上流行的几个可视化工具的底层库。7.9 Highcharts
对于用于非商业用途的图表,部分图表是免费的,部分图表需要付费。7.10 Datawrapper
Datawrapper()是一个非常完整的制作图表和地图的在线可视化工具。而且Datawrapper被很多大牌新闻媒体所采用,所以它做出来的图表让你有一种似曾相识的感觉。Datawrapper也分有免费和付费的不同功能。7.11 Plotly
Plotly()为R、Python、Matlab、Node.js和Excel的用户都提供免费或付费的服务,免费版本的链接为:。R的用户可以参考Carson Sievert的一本免费的电子书Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的优点是易于使用,并且能够使用很多语言访问,这些优点使得Plotly越来越受欢迎。
PART 8文本挖掘工具8.1 TidytextWIPO的专利分析专家使用来自Julia Silge和David Robinson的tidytext R包()来进行文本挖掘。tidytext可以将文本挖掘的任务变得简单,并且还有免费的电子书可以参考。此外,我们还推荐你使用来自Tyler Rinker的textclean R包()来清理数据。8.2 Weka
Weka()是一个基于Java的文本挖掘软件。8.3 NLTK
NLTK()是Python中最好的包了,它几乎能够实现所有主流需求。其配套的书籍NaturalLanguage Processing with Python也值得参考。
此外,Python文本挖掘包()比NLTK包更简单,但可能适合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一个通用目的的机器学习库,其提供了关于处理文本和数据集的详细说明文档()。8.5 spaCy
spaCy是一个用于处理自然语言的免费机器学习包。spaCy最近越来越受欢迎,因为它专注于创建可以投入生产的机器学习模型,而不仅仅是学术探索。在推进自然语言处理并使得每个人都可以使用方面,spaCy作出了非常重要的贡献。我们推荐由spaCy的创始人和开发者之一的Ines Montani所写的免费教程(),来帮助学习如何使用spaCy。如果是使用R的用户,那么可以使用由伦敦经济学院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo开发的spacyr包,这是一个非常好的选择,并且在使用时也有据可查。8.6 机器学习的注解工具(Annotation Tools forMachine Learning)在对文本或图像进行机器学习时,通常需要对一些文本或图像进行注释以训练模型。在这一方面,出现了越来越多的工具,包括需要付费的explosion.ai(其开发者为spaCy的开发者)。下面列出了一些可供尝试的免费工具:• Label Studio()• Inception()• Doccano()• Label Box()8.7 Google单词树(Google Word Trees)Word Trees可以用来对文本进行详细分析,例如对权利要求进行分析做成权利要求树。
Google Developers网站上的GoogleWord Trees提供了使用Javascript生成单词树的说明。8.8 R语言文本挖掘tm包R的文本挖掘tm包提供了很多访问文本挖掘工具的途径。使用者可以参考tm包的开发者所写的说明()。在R-bloggers()上也有很多非常实用的关于文本挖掘的教程。推荐参考由Graham Williams在2014年写的教程Hands-On Data Science with R Text Mining。关于近期的基于R的文本挖掘工具的概览,可以参见Fridolin Wild于2021年写的CRAN Task View: Natural Language Processing()。需要注意的是,许多文本挖掘包通常侧重于生成单词。这种方式,对于非学术目的的文本挖掘工作,并不十分有用。比如,对于专利分析来说,更注重于从文本中提取出短语,而非单词。因此,对专利分析人员而言,寻找那些能够提取短语并且允许对其进行深入挖掘的工具更有意义。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的资源。但是,近来R和Python正越来越多地被一起使用,以发挥它们的不同优势。8.10 其他文本挖掘资源有关更多的文本挖掘工具的选择,请参阅这篇预测分析文章Top20 free text mining software tools()。
对于其他免费文本挖掘工具,可以参考一些语料库语言学网站(corpus linguistics websites)(语料库语言学,主要研究机器可读的自然语言文本的采集、存储、检索、统计、词性和句法标注、句法语义分析,以及具有上述功能的语料库在语言定量分析、词典编纂、作品风格分析、自然语言理解和机器翻译等领域中的应用),例如:Corpus software and related tools()。一些分析工具是专门为处理专利数据而开发的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育类型的app)的用户可以免费使用VantagePoint的补贴版本。
还有一些定性数据分析软件工具可以应用于专利分析,例如:
•MAXQDA()
•AtlasTI()
•QDAMiner()
但是,除了QDAMine Lite(仅限 Windows)之外,其他的工具提供了免费试用的机会,这些工具并不属于我们所关注的开源工具。
PART 9小结在这三篇文章系列中(;),我们介绍了可用于专利分析的一些主要的免费和开源工具。这些工具并不是专门用于专利分析的,但是它们能够用来分析专利数据。在实践中,了解这些工具的作用,以及了解你的分析需求,是非常重要的。在专利分析的实践中,将付费工具和免费工具结合起来使用也是非常重要的。例如,WIPO的专利分析报告《动物遗传资源专利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,对1100万件专利文献进行大规模文本挖掘,并结合使用PATSTAT进行数据统计,使用Thomson Innovation和VantagePoint进行数据验证,使用Tableau和Gephi做数据可视化。简而言之,使用免费的开源工具来完成一个专利分析项目是可能的,但是如果想要让专利分析的整个流程进行更顺畅,可能需要结合开源工具和商业工具一起使用。所以,了解这些工具并且清楚它们的强项和优势在哪里十分重要。PART 10选择分析工具需要考虑的问题清单当开始使用一项开源软件时,最好是要提前问问自己下面这些问题,来判断这些工具是否能够满足你的特定需求。
下面的这个清单并不是固定的,只是为了鼓励你在使用开源工具之前先思考并明确一下这个工具是否适用。1. 这个工具有意义吗?也就是说,你能不能立刻清楚这个工具的用途是什么?如果答案是否定的,这个工具对于你的特定需求来说可能过于专业,或者是这个工具的开发者可能没有清楚的表明这个工具想要实现的目的,那这就要慎重选择。2.你是否了解这个工具所涉及的编程语言?如果你不了解这个编程语言的话,会不会对你使用这个工具产生影响?为了使用这个工具而去学习该编程语言是否值得?有没有免费的或者你能负担的相关课程?3.源代码是开源的还是专有的?开源许可的条款和条件是什么?当使用开源和免费软件时,清楚地了解开源许可的精确范围。例如,你是否需要以与原始许可完全相同的条款向他人提供对源代码的任何修改?如果你处理了源代码,这就会存在知识产权风险。如果你没有在源代码层面上工作,这可能不就不涉及知识产权问题。了解开放源代码许可对我们的工作来说总是有意义的。4.谁将拥有我的数据?如果我们需要上传数据到一个基于网页的服务应用上,那么数据上传之后谁会拥有这些数据,其他什么人会在什么条件下能够获得这些数据?当这些数据是商业相关的,这个问题就显得尤为关键。
5.“免费”到底意味着什么?免费版本通常会导致高级服务(即转变为付费的服务)。这一转变是开源商业模型的关键特征。在一些情况下,免费的版本可能只能处理、存储或输出少量的数据。在另一些情况下,有些免费工具并不会对用户在使用上施加任何限制,但是使用这些免费工具要求用户具备相应的知识或技能。6.有其他企业(或者专利局)在使用这个工具吗?如果有的话,就说明这个工具较为可靠并且还能够找到相应的案例。7.这个工具是否有相关的使用说明文档或者教程?这是反映该工具是否成熟的指标。如果有很多教程和说明文档,说明在行业中有很多人在使用它。8.有多少人在使用这个工具?这些用户是否积极创建论坛和博客等,以支持用户广泛地交流其使用经验?9.这个工具是只有一个功能还是集成了很多不同的功能?换言之,这个工具能够满足所有的需求,还是仅仅是我们工具箱中的一个特殊的工具。在一些情况下,一个专注于一种功能的工具能够把这个功能做到极致,而那些同时集成了很多功能的工具可能每一项功能都仅仅是一般般。在本文中所列出的所有工具中,R和Python(或者它们的结合使用)能够实现专利分析全流程,从数据采集到数据可视化。在实践中,大多数专利分析工具箱都包含通用工具和特定工具。
10.这个工具的极限在哪里?我们需要了解一个软件的极限在哪里,这样以后在尝试做一些关键任务时就会有所准备。例如,一些软件声称可以完成一些特定的任务,比如处理上千条或者上百万条数据,但实际上如果真的处理了这么大量的数据,结果就会很糟糕。通过尝试使用这个工具到其极限,可以确定这个工具极限在哪里以及如何充分利用它。11.这个工具是否符合我的需求?最近,大数据和使用Hadoop进行分布式计算处理大量数据是领域热点。Hadoop是开源的,任何人都可以使用它,但是Hadoop和大部分的专利分析需求都不相匹配,除非是需要分析全球所有的专利文献,大量的文献资料和科学数据。举例来说,前文中提到的WIPO的《动物遗传资源专利分析报告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel处理了1100万条专利记录。而决定使用GNU Parallel而非Hadoop来处理这1100万条专利数据的部分原因,是因为我们认为Hadoop使用起来比较复杂,而且对于Hadoop来说,处理1100万条数据属于大材小用。简而言之,仔细考虑一个工具是否与我们的目标需求相适应和相匹配是十分重要的。12.最后,用一个简单的原则来总结如何衡量一个工具是否可用于专利分析,即这个工具对我有没有用? 查看全部
开源专利分析工具(下) | The WIPO Manual on Open So
将本文节选自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介绍了可用于专利分析的开源工具。本文所介绍的工具可以分为八个种类:通用工具、数据清理工具、数据挖掘工具、数据可视化工具、网络数据可视化工具、信息图制作工具、地理数据可视化工具、文本挖掘工具。上期文章介绍了前面六种(相关链接:;),本期文章介绍最后两种:地理数据可视化工具、文本挖掘工具。PART 7地理数据可视化工具
对于地理数据可视化工具,除了无处不在的Google地图和众所周知的Google地球,我们认为还可以去探索一些其他的工具。
7.1 Open Street Map目前越来越受欢迎的一款应用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受欢迎的、开源的、基于JavaScript库的交互地图。
可通过API访问。R用户可以使用leafletr包,其教程在R-bloggers上()。Python用户的相关教程可以参见以下链接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map来创建强大的交互图表组合,这些图表可以链接到具有不同地理编码精度的地图。Tableau Public可能是用专利数据创建地图的最简单的入门工具。下面这张地图就是使用自定义地理编码创建的,其展示了科学出版物出版的国家以及这些科学出版物的名称。进入后方链接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一个在所有主流平台上都能够运行的软件包。
WIPO的专利分析专家利用QGIS描绘了全球海洋生物科学研究和专利文献的全球分布,并标记了深海热液喷口的位置()。下图是基于科学文献文本挖掘得出的全球海洋科学研究点的QGIS地图。
7.5 .
.()不是一个地图制作工具,而是一个包含了全球地理名称的数据库。在.中,你可以获得很多地方的地理位置数据。用户可以在R、以及Python、Ruby、PHP的客户端通过geonames包()访问geonames。7.6 OpenLayers

如果你想要制作自定义的一些地图形式,OpenLayers()可以帮到你。用户可以通过OpenLayers在OpenStreetMap制作的地图上添加更多的图层和其他数据源,这样就可以制作出用户自己想要的地图。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款开源网络应用程序和交互式地图制作工具,CartoDB具有免费和付费两种账户。对于开发者而言,CartoDB有很多工具的扩展文档和API。7.8 D3.js
D3.js()是一个用于编辑数据和文档的JavaScript库。D3.js也是网络上流行的几个可视化工具的底层库。7.9 Highcharts
对于用于非商业用途的图表,部分图表是免费的,部分图表需要付费。7.10 Datawrapper
Datawrapper()是一个非常完整的制作图表和地图的在线可视化工具。而且Datawrapper被很多大牌新闻媒体所采用,所以它做出来的图表让你有一种似曾相识的感觉。Datawrapper也分有免费和付费的不同功能。7.11 Plotly
Plotly()为R、Python、Matlab、Node.js和Excel的用户都提供免费或付费的服务,免费版本的链接为:。R的用户可以参考Carson Sievert的一本免费的电子书Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的优点是易于使用,并且能够使用很多语言访问,这些优点使得Plotly越来越受欢迎。
PART 8文本挖掘工具8.1 TidytextWIPO的专利分析专家使用来自Julia Silge和David Robinson的tidytext R包()来进行文本挖掘。tidytext可以将文本挖掘的任务变得简单,并且还有免费的电子书可以参考。此外,我们还推荐你使用来自Tyler Rinker的textclean R包()来清理数据。8.2 Weka
Weka()是一个基于Java的文本挖掘软件。8.3 NLTK
NLTK()是Python中最好的包了,它几乎能够实现所有主流需求。其配套的书籍NaturalLanguage Processing with Python也值得参考。

此外,Python文本挖掘包()比NLTK包更简单,但可能适合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一个通用目的的机器学习库,其提供了关于处理文本和数据集的详细说明文档()。8.5 spaCy
spaCy是一个用于处理自然语言的免费机器学习包。spaCy最近越来越受欢迎,因为它专注于创建可以投入生产的机器学习模型,而不仅仅是学术探索。在推进自然语言处理并使得每个人都可以使用方面,spaCy作出了非常重要的贡献。我们推荐由spaCy的创始人和开发者之一的Ines Montani所写的免费教程(),来帮助学习如何使用spaCy。如果是使用R的用户,那么可以使用由伦敦经济学院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo开发的spacyr包,这是一个非常好的选择,并且在使用时也有据可查。8.6 机器学习的注解工具(Annotation Tools forMachine Learning)在对文本或图像进行机器学习时,通常需要对一些文本或图像进行注释以训练模型。在这一方面,出现了越来越多的工具,包括需要付费的explosion.ai(其开发者为spaCy的开发者)。下面列出了一些可供尝试的免费工具:• Label Studio()• Inception()• Doccano()• Label Box()8.7 Google单词树(Google Word Trees)Word Trees可以用来对文本进行详细分析,例如对权利要求进行分析做成权利要求树。
Google Developers网站上的GoogleWord Trees提供了使用Javascript生成单词树的说明。8.8 R语言文本挖掘tm包R的文本挖掘tm包提供了很多访问文本挖掘工具的途径。使用者可以参考tm包的开发者所写的说明()。在R-bloggers()上也有很多非常实用的关于文本挖掘的教程。推荐参考由Graham Williams在2014年写的教程Hands-On Data Science with R Text Mining。关于近期的基于R的文本挖掘工具的概览,可以参见Fridolin Wild于2021年写的CRAN Task View: Natural Language Processing()。需要注意的是,许多文本挖掘包通常侧重于生成单词。这种方式,对于非学术目的的文本挖掘工作,并不十分有用。比如,对于专利分析来说,更注重于从文本中提取出短语,而非单词。因此,对专利分析人员而言,寻找那些能够提取短语并且允许对其进行深入挖掘的工具更有意义。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的资源。但是,近来R和Python正越来越多地被一起使用,以发挥它们的不同优势。8.10 其他文本挖掘资源有关更多的文本挖掘工具的选择,请参阅这篇预测分析文章Top20 free text mining software tools()。
对于其他免费文本挖掘工具,可以参考一些语料库语言学网站(corpus linguistics websites)(语料库语言学,主要研究机器可读的自然语言文本的采集、存储、检索、统计、词性和句法标注、句法语义分析,以及具有上述功能的语料库在语言定量分析、词典编纂、作品风格分析、自然语言理解和机器翻译等领域中的应用),例如:Corpus software and related tools()。一些分析工具是专门为处理专利数据而开发的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育类型的app)的用户可以免费使用VantagePoint的补贴版本。
还有一些定性数据分析软件工具可以应用于专利分析,例如:
•MAXQDA()
•AtlasTI()
•QDAMiner()
但是,除了QDAMine Lite(仅限 Windows)之外,其他的工具提供了免费试用的机会,这些工具并不属于我们所关注的开源工具。
PART 9小结在这三篇文章系列中(;),我们介绍了可用于专利分析的一些主要的免费和开源工具。这些工具并不是专门用于专利分析的,但是它们能够用来分析专利数据。在实践中,了解这些工具的作用,以及了解你的分析需求,是非常重要的。在专利分析的实践中,将付费工具和免费工具结合起来使用也是非常重要的。例如,WIPO的专利分析报告《动物遗传资源专利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,对1100万件专利文献进行大规模文本挖掘,并结合使用PATSTAT进行数据统计,使用Thomson Innovation和VantagePoint进行数据验证,使用Tableau和Gephi做数据可视化。简而言之,使用免费的开源工具来完成一个专利分析项目是可能的,但是如果想要让专利分析的整个流程进行更顺畅,可能需要结合开源工具和商业工具一起使用。所以,了解这些工具并且清楚它们的强项和优势在哪里十分重要。PART 10选择分析工具需要考虑的问题清单当开始使用一项开源软件时,最好是要提前问问自己下面这些问题,来判断这些工具是否能够满足你的特定需求。
下面的这个清单并不是固定的,只是为了鼓励你在使用开源工具之前先思考并明确一下这个工具是否适用。1. 这个工具有意义吗?也就是说,你能不能立刻清楚这个工具的用途是什么?如果答案是否定的,这个工具对于你的特定需求来说可能过于专业,或者是这个工具的开发者可能没有清楚的表明这个工具想要实现的目的,那这就要慎重选择。2.你是否了解这个工具所涉及的编程语言?如果你不了解这个编程语言的话,会不会对你使用这个工具产生影响?为了使用这个工具而去学习该编程语言是否值得?有没有免费的或者你能负担的相关课程?3.源代码是开源的还是专有的?开源许可的条款和条件是什么?当使用开源和免费软件时,清楚地了解开源许可的精确范围。例如,你是否需要以与原始许可完全相同的条款向他人提供对源代码的任何修改?如果你处理了源代码,这就会存在知识产权风险。如果你没有在源代码层面上工作,这可能不就不涉及知识产权问题。了解开放源代码许可对我们的工作来说总是有意义的。4.谁将拥有我的数据?如果我们需要上传数据到一个基于网页的服务应用上,那么数据上传之后谁会拥有这些数据,其他什么人会在什么条件下能够获得这些数据?当这些数据是商业相关的,这个问题就显得尤为关键。
5.“免费”到底意味着什么?免费版本通常会导致高级服务(即转变为付费的服务)。这一转变是开源商业模型的关键特征。在一些情况下,免费的版本可能只能处理、存储或输出少量的数据。在另一些情况下,有些免费工具并不会对用户在使用上施加任何限制,但是使用这些免费工具要求用户具备相应的知识或技能。6.有其他企业(或者专利局)在使用这个工具吗?如果有的话,就说明这个工具较为可靠并且还能够找到相应的案例。7.这个工具是否有相关的使用说明文档或者教程?这是反映该工具是否成熟的指标。如果有很多教程和说明文档,说明在行业中有很多人在使用它。8.有多少人在使用这个工具?这些用户是否积极创建论坛和博客等,以支持用户广泛地交流其使用经验?9.这个工具是只有一个功能还是集成了很多不同的功能?换言之,这个工具能够满足所有的需求,还是仅仅是我们工具箱中的一个特殊的工具。在一些情况下,一个专注于一种功能的工具能够把这个功能做到极致,而那些同时集成了很多功能的工具可能每一项功能都仅仅是一般般。在本文中所列出的所有工具中,R和Python(或者它们的结合使用)能够实现专利分析全流程,从数据采集到数据可视化。在实践中,大多数专利分析工具箱都包含通用工具和特定工具。
10.这个工具的极限在哪里?我们需要了解一个软件的极限在哪里,这样以后在尝试做一些关键任务时就会有所准备。例如,一些软件声称可以完成一些特定的任务,比如处理上千条或者上百万条数据,但实际上如果真的处理了这么大量的数据,结果就会很糟糕。通过尝试使用这个工具到其极限,可以确定这个工具极限在哪里以及如何充分利用它。11.这个工具是否符合我的需求?最近,大数据和使用Hadoop进行分布式计算处理大量数据是领域热点。Hadoop是开源的,任何人都可以使用它,但是Hadoop和大部分的专利分析需求都不相匹配,除非是需要分析全球所有的专利文献,大量的文献资料和科学数据。举例来说,前文中提到的WIPO的《动物遗传资源专利分析报告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel处理了1100万条专利记录。而决定使用GNU Parallel而非Hadoop来处理这1100万条专利数据的部分原因,是因为我们认为Hadoop使用起来比较复杂,而且对于Hadoop来说,处理1100万条数据属于大材小用。简而言之,仔细考虑一个工具是否与我们的目标需求相适应和相匹配是十分重要的。12.最后,用一个简单的原则来总结如何衡量一个工具是否可用于专利分析,即这个工具对我有没有用?
完整收集信息以扩展实战攻击面
采集交流 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-07-24 01:01
原文:0x00 前言
距离上次分享文章已经过去了5个月,写这篇文章之前。我已经做了较多的渗透项目,也打了一些地级和省级市的红队项目。在此期间,让我感觉非常受用的技巧无非是对于信息的收集,不管是在前期打点,亦或是拿到shell后的横向,对于目标信息的掌握程度,很大层面决定了能打到多深,能打到多宽。由于自己技术受限,仍然停留在安服水平,因此文章主要以简单技巧分享为主。主要是分享自己在早期以及近期遇到的两个例子,也是较为简单的实战技术理论,并不是较为复杂的研究性分享,分别以外部和内部为例。
并且本文主要是说收集信息,而不是信息收集,希望加以区分。
0x01 外部_收集信息
这个例子是我以前众测的时候找到的一系列漏洞,主要成果就是通过日志泄露到Getshell。
该站点是Thinkphp的,但是做了Nginx反代,通过wappalyzer可以收集到站点指纹,通过路径报错,也可以判断出是TP站点,一般此时要么是3.x要么是5.x
最后通过漏洞扫描工具ThinkphpGUI-1.2-SNAPSHOT发现存在Tp3.x日志泄露的问题
通过TPlogScan获取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
获取了若干日志后,就到了收集信息的重点,这里主要分享的实战理论就是
在收集信息中,一定要将所获得的信息和关键字关联,进行灵活筛选
所获得的信息,在这里就是指,我们获取的TP日志,回想一般日志会记录的东西,比如Sql语句,比如攻击流量,比如程序运行日志。
关键字,在这里就是指,我们经常关心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
关联:将这些得到的信息和关键字关联,比如Sql语句中会出现对用户名称和密码的对比是否正确,会出现数据的添加删除等。
灵活筛选:根据现有信息,去优先选择我们需要获得的信息
如只有一个后台登录页面,当前最好的筛选是通过用户名密码的字段在大量的日志中去筛选password,username,passwd,user等关键字,尝试获取某个用户的账号密码,进入后台,去扩展自己的攻击面;
又或是此时已获得后台用户权限,想找到一个Sql注入打到shell或内网,此时应该以Insert,Delete,Update,Select,Where,Order By等关键字为主,去筛选查找;
或通过漏洞拿到了shell分但是数据库用户密码是加密的,此时还想继续获取数据分,呢么还是类似1的方式,筛选password,username,Admin,Administrator,root,system等高权限用户关键字,尝试获取在写入数据库前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情况,灵活关联
我当时正处于第一种情况只有一个登录页面,此时立马去筛选关键字,在庞大的日志中,筛选出来了一条关于管理员用户admin的查询语句
获取到了hash值,然后很幸运的是,cmd5有相关缓存,直接解了出来
进入后台后,在上传处有对后缀的限制,有对内容的限制
此处我通过换行绕过后缀限制,脏数据绕过了对内容的限制,成功上传了php的shell
其实这些后续的bypass上传花费了我更长的事件,上述上传还需要一次特别的更名操作,才能被解析,但这里不是写Getshell的,而不是分享收集信息的实战理论,因此不多讲。这里主要就是跟大家啰嗦了下,在拿到仅限的大量无用信息中,一定要把此时自己获得的信息和关键字做匹配,做关联,减少在废物信息中的搜寻时间,最效率化利用当前的信息,去扩展自己的渗透攻击面
0x02 内部_收集信息
前期Shiro打点(我也很好奇,2022年了,还有shiro),特别小的内网,没任何东西打,只能拿数据分了。
尝试翻找各种数据库配置文件,可以根据数据库后缀文件名进行检索,比如yml,ini,conf,config等
这个数据库里面数据很少,基本凑不够。
于是找到一个源码备份文件,虽然不懂Java,但是只要能收集信息的地方,我们一个都不能漏。在源码文件中,我们可以收集到的信息,往往有很多硬编码的信息,注释中的测试账号密码,泄露的token,api,accesskey等。
即使你不会java,你也可以解压缩jar包,然后丢到IDEA中可查看源代码。或者使用Jd-Gui直接打开jar包也可以查看源代码
发现jar包中打包进来了数据库配置文件,里面有一个内网的aliyun mysql数据库。没有太多的用户数据,但是发现了一些app_id,app_secret字段
拿着通过这些关键字,我在源代码中检索,发现跟微信相关
通过查询资料发现,app_id和app_secret是关于企业微信的,两个参数认证后可以获取Token,通过Token可以调用企业微信的各种API,比如将自己添加到企业微信用户中,获取企业微信部门人员列表等,具体利用可参考下面的文章
这里我通过id和sercert认证获取Token中,由于不在白名单中,被拒绝了。
此时我仍没有放弃,在数据库中继续检索关键词Token(sql语句检索列名或内容可参考百度学习),发现了token_cache的字段,翻译过来就是token缓存
此时通过/cgi-bin/groups/get api验证Token是可用状态,后续的信息利用就不放出了,无非是获取了部门所有人员详细信息,以及提个严重漏洞罢了
搞完数据库,我接着看源码,此时我没有立刻搜索文件内容,而是搜索整个jar包中的文件名,关键字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通过关键字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通过文件名我找到了一个带有OSS名字的class
通过该Class我又找到了一些存储配置的Class
找到了两个阿里云 accesskey,一个七牛云的acesskey
通过阿里云accesskey拿到一个OSS BUCKET 以及150多台的云主机
0x03 总结
通过上述内网的两个例子,主要就是想将现有信息和关键字关联,灵活筛选。
简单的说,就是要根据当前获得信息的固有属性来与关键字做适配,什么环境该拥有什么属性,什么属性该适配哪种检索关键字以及检索方式。尽可能的做一个关联性假想。
本篇文章实质是实战技术案例分享,但是想透过两个特别简单的例子,来描述下自己心中对于收集信息,扩展攻击面的认知。基本是自我粗糙的拙见,如果能给各位师傅带来一点技巧的扩充帮助,也足够我欢喜了。
喜欢就点在看哦~
长按识别二维码
欢迎投稿
EMAIL:
博客: 查看全部
完整收集信息以扩展实战攻击面
原文:0x00 前言
距离上次分享文章已经过去了5个月,写这篇文章之前。我已经做了较多的渗透项目,也打了一些地级和省级市的红队项目。在此期间,让我感觉非常受用的技巧无非是对于信息的收集,不管是在前期打点,亦或是拿到shell后的横向,对于目标信息的掌握程度,很大层面决定了能打到多深,能打到多宽。由于自己技术受限,仍然停留在安服水平,因此文章主要以简单技巧分享为主。主要是分享自己在早期以及近期遇到的两个例子,也是较为简单的实战技术理论,并不是较为复杂的研究性分享,分别以外部和内部为例。
并且本文主要是说收集信息,而不是信息收集,希望加以区分。
0x01 外部_收集信息
这个例子是我以前众测的时候找到的一系列漏洞,主要成果就是通过日志泄露到Getshell。
该站点是Thinkphp的,但是做了Nginx反代,通过wappalyzer可以收集到站点指纹,通过路径报错,也可以判断出是TP站点,一般此时要么是3.x要么是5.x
最后通过漏洞扫描工具ThinkphpGUI-1.2-SNAPSHOT发现存在Tp3.x日志泄露的问题
通过TPlogScan获取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
获取了若干日志后,就到了收集信息的重点,这里主要分享的实战理论就是
在收集信息中,一定要将所获得的信息和关键字关联,进行灵活筛选
所获得的信息,在这里就是指,我们获取的TP日志,回想一般日志会记录的东西,比如Sql语句,比如攻击流量,比如程序运行日志。
关键字,在这里就是指,我们经常关心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
关联:将这些得到的信息和关键字关联,比如Sql语句中会出现对用户名称和密码的对比是否正确,会出现数据的添加删除等。
灵活筛选:根据现有信息,去优先选择我们需要获得的信息
如只有一个后台登录页面,当前最好的筛选是通过用户名密码的字段在大量的日志中去筛选password,username,passwd,user等关键字,尝试获取某个用户的账号密码,进入后台,去扩展自己的攻击面;
又或是此时已获得后台用户权限,想找到一个Sql注入打到shell或内网,此时应该以Insert,Delete,Update,Select,Where,Order By等关键字为主,去筛选查找;
或通过漏洞拿到了shell分但是数据库用户密码是加密的,此时还想继续获取数据分,呢么还是类似1的方式,筛选password,username,Admin,Administrator,root,system等高权限用户关键字,尝试获取在写入数据库前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情况,灵活关联
我当时正处于第一种情况只有一个登录页面,此时立马去筛选关键字,在庞大的日志中,筛选出来了一条关于管理员用户admin的查询语句
获取到了hash值,然后很幸运的是,cmd5有相关缓存,直接解了出来

进入后台后,在上传处有对后缀的限制,有对内容的限制
此处我通过换行绕过后缀限制,脏数据绕过了对内容的限制,成功上传了php的shell
其实这些后续的bypass上传花费了我更长的事件,上述上传还需要一次特别的更名操作,才能被解析,但这里不是写Getshell的,而不是分享收集信息的实战理论,因此不多讲。这里主要就是跟大家啰嗦了下,在拿到仅限的大量无用信息中,一定要把此时自己获得的信息和关键字做匹配,做关联,减少在废物信息中的搜寻时间,最效率化利用当前的信息,去扩展自己的渗透攻击面
0x02 内部_收集信息
前期Shiro打点(我也很好奇,2022年了,还有shiro),特别小的内网,没任何东西打,只能拿数据分了。
尝试翻找各种数据库配置文件,可以根据数据库后缀文件名进行检索,比如yml,ini,conf,config等
这个数据库里面数据很少,基本凑不够。
于是找到一个源码备份文件,虽然不懂Java,但是只要能收集信息的地方,我们一个都不能漏。在源码文件中,我们可以收集到的信息,往往有很多硬编码的信息,注释中的测试账号密码,泄露的token,api,accesskey等。
即使你不会java,你也可以解压缩jar包,然后丢到IDEA中可查看源代码。或者使用Jd-Gui直接打开jar包也可以查看源代码
发现jar包中打包进来了数据库配置文件,里面有一个内网的aliyun mysql数据库。没有太多的用户数据,但是发现了一些app_id,app_secret字段
拿着通过这些关键字,我在源代码中检索,发现跟微信相关
通过查询资料发现,app_id和app_secret是关于企业微信的,两个参数认证后可以获取Token,通过Token可以调用企业微信的各种API,比如将自己添加到企业微信用户中,获取企业微信部门人员列表等,具体利用可参考下面的文章
这里我通过id和sercert认证获取Token中,由于不在白名单中,被拒绝了。
此时我仍没有放弃,在数据库中继续检索关键词Token(sql语句检索列名或内容可参考百度学习),发现了token_cache的字段,翻译过来就是token缓存
此时通过/cgi-bin/groups/get api验证Token是可用状态,后续的信息利用就不放出了,无非是获取了部门所有人员详细信息,以及提个严重漏洞罢了

搞完数据库,我接着看源码,此时我没有立刻搜索文件内容,而是搜索整个jar包中的文件名,关键字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通过关键字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通过文件名我找到了一个带有OSS名字的class
通过该Class我又找到了一些存储配置的Class
找到了两个阿里云 accesskey,一个七牛云的acesskey
通过阿里云accesskey拿到一个OSS BUCKET 以及150多台的云主机
0x03 总结
通过上述内网的两个例子,主要就是想将现有信息和关键字关联,灵活筛选。
简单的说,就是要根据当前获得信息的固有属性来与关键字做适配,什么环境该拥有什么属性,什么属性该适配哪种检索关键字以及检索方式。尽可能的做一个关联性假想。
本篇文章实质是实战技术案例分享,但是想透过两个特别简单的例子,来描述下自己心中对于收集信息,扩展攻击面的认知。基本是自我粗糙的拙见,如果能给各位师傅带来一点技巧的扩充帮助,也足够我欢喜了。
喜欢就点在看哦~
长按识别二维码
欢迎投稿
EMAIL:
博客:
行业解决方案:WebRTC录采集平面数据
采集交流 • 优采云 发表了文章 • 0 个评论 • 119 次浏览 • 2022-10-20 18:39
1. 网络交易采集
WebRTC中有一个可用于获取桌面的API:获取显示媒体
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
约束是可选的 约束约束与 getUser 媒体函数中的约束一致。
2. 采集平面数据
采集平面数据:此功能在 Chrome 中是实验性的。
在实际战斗之前,我们需要打开浏览器并进行设置 chrome://flags/#enable-experimental-web-platform-features
如下图所示:
接下来,让我们看一下具体的js代码,如下所示:
C++音频和视频开发
学习地址:免费]FFMPEG/WebRTC/RTMP/NDK/安卓音视频流高级开发
【文章福利】:免费C++音视频学习包、技术视频、内容包括(音视频开发、大厂面试问题、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免费分享,如有必要,可以添加君阳接收! ~学习交流俊阳994289133点击加入即可接收信息包
'use strict'
var audioSource = document.querySelector('select#audioSource');
var audioOutput = document.querySelector('select#audioOutput');
var videoSource = document.querySelector('select#videoSource');
// 获取video标签
var videoplay = document.querySelector('video#player');
// 获取音频标签
var audioplay = document.querySelector('audio#audioplayer');
//div
var divConstraints = document.querySelector('div#constraints');
// 定义二进制数组
var buffer;
var mediaRecorder;
//record 视频录制 播放 下载按钮
var recvideo = document.querySelector('video#recplayer');
var btnRecord = document.querySelector('button#record');
var btnPlay = document.querySelector('button#recplay');
var btnDownload = document.querySelector('button#download');
//filter 特效选择
var filtersSelect = document.querySelector('select#filter');
//picture 获取视频帧图片相关的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是设备信息的数组
function gotDevices(deviceInfos){
// 遍历设备信息数组, 函数里面也有个参数是每一项的deviceinfo, 这样我们就拿到每个设备的信息了
deviceInfos.forEach(function(deviceinfo){
// 创建每一项
var option = document.createElement('option');
option.text = deviceinfo.label;
option.value = deviceinfo.deviceId;
if(deviceinfo.kind === 'audioinput'){ // 音频输入
audioSource.appendChild(option);
}else if(deviceinfo.kind === 'audiooutput'){ // 音频输出
audioOutput.appendChild(option);
}else if(deviceinfo.kind === 'videoinput'){ // 视频输入
videoSource.appendChild(option);
}
})
}
// 获取到流做什么, 在gotMediaStream方面里面我们要传人一个参数,也就是流,
// 这个流里面实际上包含了音频轨和视频轨,因为我们通过constraints设置了要采集视频和音频
// 我们直接吧这个流赋值给HTML中赋值的video标签
// 当时拿到这个流了,说明用户已经同意去访问音视频设备了
function gotMediaStream(stream){
<p>
// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定数据源来自stream,这样视频标签采集到这个数据之后就可以将视频和音频播放出来
// 通过stream来获取到视频的track 这样我们就将所有的视频流中的track都获取到了,这里我们只取列表中的第一个
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我们就能调用Track的方法
var videoConstraints = videoTrack.getSettings(); // 这样就可以拿到所有video的约束
// 将这个对象转化成json格式
// 第一个是videoConstraints, 第二个为空, 第三个表示缩进2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 当我们采集到音视频的数据之后,我们返回一个Promise
return navigator.mediaDevices.enumerateDevices();
}
function handleError(err){
console.log('getUserMedia error:', err);
}
function start() {
// 判断浏览器是否支持
if(!navigator.mediaDevices ||
!navigator.mediaDevices.getDisplayMedia){ // 判断是否支持录屏
console.log('getUserMedia is not supported!');
}else{
// 获取到deviceId
var deviceId = videoSource.value;
// 这里是约束参数,正常情况下我们只需要是否使用视频是否使用音频
// 对于视频就可以按我们刚才所说的做一些限制
/**
* video : {
width: 640, // 宽带
height: 480, // 高度
frameRate:15, // 帧率
facingMode: 'enviroment', // 设置为后置摄像头
deviceId : deviceId ? deviceId : undefined // 如果deviceId不为空直接设置值,如果为空就是undefined
},
*/
var constraints = { // 表示同时采集视频金和音频
video : true,
audio : false
}
// 调用录屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 这样就可以抓起桌面的数据了
.then(gotMediaStream) // 使用Promise串联的方式,获取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 当我选择摄像头的时候,他可以触发一个事件,
// 当我调用start之后我要改变constraints
videoSource.onchange = start;
// 选择特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 点击按钮获取视频帧图片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 调用canvas API获取上下文,图片是二维的,所以2d,这样我们就拿到它的上下文了
// 调用drawImage绘制图片,第一个参数就是视频,我们这里是videoplay,
// 第二和第三个参数是起始点 0,0
// 第四个和第五个参数表示图片的高度和宽度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//
function handleDataAvailable(e){ // 5、获取数据的事件函数 当我们点击录制之后,数据就会源源不断的从这个事件函数中获取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 将e.data放入二进制数组里面
// 这个buffer应该是我们在开始录制的时候创建这个buffer
}
}
// 2、录制方法
function startRecord(){
buffer = []; // 定义数组
var options = {
mimeType: 'video/webm;codecs=vp8' // 录制视频 编码vp8
}
if(!MediaRecorder.isTypeSupported(options.mimeType)){ // 判断录制的视频 mimeType 格式浏览器是否支持
console.error(`${options.mimeType} is not supported!`);
return;
}
try{ // 防止录制异常
// 5、先在上面定义全局对象mediaRecorder,以便于后面停止录制的时候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 调用录制API // window.stream在gotMediaStream中获取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、调用事件 这个事件处理函数里面就会收到我们录制的那块数据 当我们收集到这个数据之后我们应该把它存储起来
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面传入一个时间片,每隔一个 时间片存储 一块数据
}
// 3、停止录制
function stopRecord(){
// 6、调用停止录制
mediaRecorder.stop();
}
// 1、录制视频
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 开始录制
startRecord(); // 调用startRecord方法开启录制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按钮状态禁止
btnDownload.disabled = true; // 下载按钮状态禁止
}else{ // 结束录制
stopRecord(); // 停止录制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止录制之后可以播放
btnDownload.disabled = false; // 停止录制可以下载
}
}
// 点击播放视频
btnPlay.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
recvideo.src = window.URL.createObjectURL(blob);
recvideo.srcObject = null;
recvideo.controls = true;
recvideo.play();
}
// 下载视频
btnDownload.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'aaa.webm';
a.click();
}</p>
原创链接:WebRTC录制采集平面数据 - 信息中心 - 音视频发展中国网 - 打造中国最权威的音视频技术交流分享论坛
解决方案:百度seo快速排名工具!
软件介绍
百度seo快速排名工具,用来提高百度权重,百度排名的小工具。
使用场景
如果您以前没有看过它,您可以先回顾一下。
就是说做网站一般来说,如果你想做一个高权重的网站,要花很长时间,甚至很多年,如果你想花时间做一个高权重网站,可以刷品牌字。
比如第一次做煎蛋的时候,虽然权重是0,但是必须在上排名第一。
只是炒蛋网这个词没有索引,所以权重也是0。我们想一想:只要我们把炒蛋网这个词刷出索引,然后把这个词提交到站长家,那么我们可以在短时间内获得高权重。
另外,一个带有“网上赚钱”等索引的词,搜索这个词,你的网站可能在第10页,普通人找不到你的网站。
但是如果你用软件,搜索这个词,然后进入你的网站,搜索引擎也会认为你的网站满足了用户的需求,也会提升你的排名。
指示
打开软件设置“ip代理api地址”、搜索词、URL。
添加会有点慢。
也可以直接在文件夹中设置:
需要注意的是ip代理api地址需要购买和付费,有几个免费的已经测试过,不能使用。
另外,搜狗搜索也不行。
如果要刷多个字,可以多打开软件,放在多个文件夹中,全部打开!
下载链接 查看全部
行业解决方案:WebRTC录采集平面数据
1. 网络交易采集
WebRTC中有一个可用于获取桌面的API:获取显示媒体
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
约束是可选的 约束约束与 getUser 媒体函数中的约束一致。
2. 采集平面数据
采集平面数据:此功能在 Chrome 中是实验性的。
在实际战斗之前,我们需要打开浏览器并进行设置 chrome://flags/#enable-experimental-web-platform-features
如下图所示:
接下来,让我们看一下具体的js代码,如下所示:
C++音频和视频开发
学习地址:免费]FFMPEG/WebRTC/RTMP/NDK/安卓音视频流高级开发
【文章福利】:免费C++音视频学习包、技术视频、内容包括(音视频开发、大厂面试问题、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免费分享,如有必要,可以添加君阳接收! ~学习交流俊阳994289133点击加入即可接收信息包
'use strict'
var audioSource = document.querySelector('select#audioSource');
var audioOutput = document.querySelector('select#audioOutput');
var videoSource = document.querySelector('select#videoSource');
// 获取video标签
var videoplay = document.querySelector('video#player');
// 获取音频标签
var audioplay = document.querySelector('audio#audioplayer');
//div
var divConstraints = document.querySelector('div#constraints');
// 定义二进制数组
var buffer;
var mediaRecorder;
//record 视频录制 播放 下载按钮
var recvideo = document.querySelector('video#recplayer');
var btnRecord = document.querySelector('button#record');
var btnPlay = document.querySelector('button#recplay');
var btnDownload = document.querySelector('button#download');
//filter 特效选择
var filtersSelect = document.querySelector('select#filter');
//picture 获取视频帧图片相关的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是设备信息的数组
function gotDevices(deviceInfos){
// 遍历设备信息数组, 函数里面也有个参数是每一项的deviceinfo, 这样我们就拿到每个设备的信息了
deviceInfos.forEach(function(deviceinfo){
// 创建每一项
var option = document.createElement('option');
option.text = deviceinfo.label;
option.value = deviceinfo.deviceId;
if(deviceinfo.kind === 'audioinput'){ // 音频输入
audioSource.appendChild(option);
}else if(deviceinfo.kind === 'audiooutput'){ // 音频输出
audioOutput.appendChild(option);
}else if(deviceinfo.kind === 'videoinput'){ // 视频输入
videoSource.appendChild(option);
}
})
}
// 获取到流做什么, 在gotMediaStream方面里面我们要传人一个参数,也就是流,
// 这个流里面实际上包含了音频轨和视频轨,因为我们通过constraints设置了要采集视频和音频
// 我们直接吧这个流赋值给HTML中赋值的video标签
// 当时拿到这个流了,说明用户已经同意去访问音视频设备了
function gotMediaStream(stream){
<p>

// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定数据源来自stream,这样视频标签采集到这个数据之后就可以将视频和音频播放出来
// 通过stream来获取到视频的track 这样我们就将所有的视频流中的track都获取到了,这里我们只取列表中的第一个
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我们就能调用Track的方法
var videoConstraints = videoTrack.getSettings(); // 这样就可以拿到所有video的约束
// 将这个对象转化成json格式
// 第一个是videoConstraints, 第二个为空, 第三个表示缩进2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 当我们采集到音视频的数据之后,我们返回一个Promise
return navigator.mediaDevices.enumerateDevices();
}
function handleError(err){
console.log('getUserMedia error:', err);
}
function start() {
// 判断浏览器是否支持
if(!navigator.mediaDevices ||
!navigator.mediaDevices.getDisplayMedia){ // 判断是否支持录屏
console.log('getUserMedia is not supported!');
}else{
// 获取到deviceId
var deviceId = videoSource.value;
// 这里是约束参数,正常情况下我们只需要是否使用视频是否使用音频
// 对于视频就可以按我们刚才所说的做一些限制
/**
* video : {
width: 640, // 宽带
height: 480, // 高度
frameRate:15, // 帧率
facingMode: 'enviroment', // 设置为后置摄像头
deviceId : deviceId ? deviceId : undefined // 如果deviceId不为空直接设置值,如果为空就是undefined
},
*/
var constraints = { // 表示同时采集视频金和音频
video : true,
audio : false
}
// 调用录屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 这样就可以抓起桌面的数据了
.then(gotMediaStream) // 使用Promise串联的方式,获取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 当我选择摄像头的时候,他可以触发一个事件,
// 当我调用start之后我要改变constraints
videoSource.onchange = start;
// 选择特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 点击按钮获取视频帧图片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 调用canvas API获取上下文,图片是二维的,所以2d,这样我们就拿到它的上下文了
// 调用drawImage绘制图片,第一个参数就是视频,我们这里是videoplay,
// 第二和第三个参数是起始点 0,0
// 第四个和第五个参数表示图片的高度和宽度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//

function handleDataAvailable(e){ // 5、获取数据的事件函数 当我们点击录制之后,数据就会源源不断的从这个事件函数中获取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 将e.data放入二进制数组里面
// 这个buffer应该是我们在开始录制的时候创建这个buffer
}
}
// 2、录制方法
function startRecord(){
buffer = []; // 定义数组
var options = {
mimeType: 'video/webm;codecs=vp8' // 录制视频 编码vp8
}
if(!MediaRecorder.isTypeSupported(options.mimeType)){ // 判断录制的视频 mimeType 格式浏览器是否支持
console.error(`${options.mimeType} is not supported!`);
return;
}
try{ // 防止录制异常
// 5、先在上面定义全局对象mediaRecorder,以便于后面停止录制的时候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 调用录制API // window.stream在gotMediaStream中获取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、调用事件 这个事件处理函数里面就会收到我们录制的那块数据 当我们收集到这个数据之后我们应该把它存储起来
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面传入一个时间片,每隔一个 时间片存储 一块数据
}
// 3、停止录制
function stopRecord(){
// 6、调用停止录制
mediaRecorder.stop();
}
// 1、录制视频
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 开始录制
startRecord(); // 调用startRecord方法开启录制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按钮状态禁止
btnDownload.disabled = true; // 下载按钮状态禁止
}else{ // 结束录制
stopRecord(); // 停止录制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止录制之后可以播放
btnDownload.disabled = false; // 停止录制可以下载
}
}
// 点击播放视频
btnPlay.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
recvideo.src = window.URL.createObjectURL(blob);
recvideo.srcObject = null;
recvideo.controls = true;
recvideo.play();
}
// 下载视频
btnDownload.onclick = ()=> {
var blob = new Blob(buffer, {type: 'video/webm'});
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'aaa.webm';
a.click();
}</p>
原创链接:WebRTC录制采集平面数据 - 信息中心 - 音视频发展中国网 - 打造中国最权威的音视频技术交流分享论坛
解决方案:百度seo快速排名工具!
软件介绍
百度seo快速排名工具,用来提高百度权重,百度排名的小工具。
使用场景
如果您以前没有看过它,您可以先回顾一下。
就是说做网站一般来说,如果你想做一个高权重的网站,要花很长时间,甚至很多年,如果你想花时间做一个高权重网站,可以刷品牌字。

比如第一次做煎蛋的时候,虽然权重是0,但是必须在上排名第一。
只是炒蛋网这个词没有索引,所以权重也是0。我们想一想:只要我们把炒蛋网这个词刷出索引,然后把这个词提交到站长家,那么我们可以在短时间内获得高权重。
另外,一个带有“网上赚钱”等索引的词,搜索这个词,你的网站可能在第10页,普通人找不到你的网站。
但是如果你用软件,搜索这个词,然后进入你的网站,搜索引擎也会认为你的网站满足了用户的需求,也会提升你的排名。
指示
打开软件设置“ip代理api地址”、搜索词、URL。

添加会有点慢。
也可以直接在文件夹中设置:
需要注意的是ip代理api地址需要购买和付费,有几个免费的已经测试过,不能使用。
另外,搜狗搜索也不行。
如果要刷多个字,可以多打开软件,放在多个文件夹中,全部打开!
下载链接
通用解决方案:程序员必备网站之一:API Coding
采集交流 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-10-18 15:17
大家好,我叫G。
前不久,我们推送了一篇文章文章《这个神器可以帮助你快速找到你想要的API接口!》,分享给大家网站:来自印度、丹麦的开发者制作的Public APIs,其主要功能是帮助开发者找到一些免费实用的API接口。
在文章的最后,顺便提到了作者的其他几个项目,并承诺以后会介绍给大家。今天,小G就是来兑现这个承诺的。
下面我们要介绍的网站就是API Coding。
它的主要功能是采集和汇总众多API相关的开放接口、学习资源、工具教程等,帮助开发者降低信息检索成本和学习成本。
地址:apicoding.io
从它的主页介绍来看,它的主要内容主要分为以下几类。
API 合集:自由开放的接口
它采集了互联网上大量免费开放的API接口,包括视频会议、股票分析、货币转换、PDF转换、IP查询、图像压缩、短链生成等众多不同功能的API接口。
地址:apicoding.io/public-apis
学习:解释API开发的文章
共收录6个文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 开发工具
共采集了22个有用的API工具,包括但不限于云存储、云托管、JSON在线编辑/解析/生成、API接口调试、假数据生成、数据爬取等功能。
地址:apicoding.io/tools
资源:API 教程和项目在线开放
主要采集网上众多作者发现的优质API教程,包括API的最佳开发实践、微软API设计指南、REST API的快速创建、真实环境在线部署等。
地址:apicoding.io/resources
总体来说,网站提供的界面列表、学习资源、开发工具都挺实用的。
如果你目前的API接口设计和开发能力比较薄弱,建议你看看这个网站,相信你能在上面找到很多好东西。
--
文末安利还有一波我们的公众号:GitHubDaily。目前每天至少更新3篇文章,主要分享比较实用或者有趣的开发工具和开源项目,偶尔聊聊技术圈的最新。有什么新鲜事,感兴趣的朋友可以关注一下。
高效的方法:如何利用SEO站长工具优化工作
网站 的提升都被优化器使用。没有搜索引擎优化,推广是不可能的。百度站长之物的推出,得到了草根站长们的大力支持。虽然这些东西不能满足很多地方站长的需求,但是很多内容都很好的支持了站长。如何更好地利用百度站长?有必要了解一下百度站长的一些成就。
1.如何发送外部链接应该从外部链接分析中获得。这些都是自然技巧,其他的网站在讲解的时候也需要说明。你会发现百度文章采集里面的文字很好,百度笔墨采集前面的链接也很不错。这很好。锚文本上下文链接是网站外链发布的重要推广上下文,也是站长们关注和值得做的事情。
2. 竞争对手数据也可以通过外链进行解释。通过外链搞定站长,可以轻松搞定一系列外链竞争对手。我们能知道有多少外展是有效的,外展的传递平台在哪里?俗话说:“知己知彼,百战百胜”。解释竞争对手的 网站 是我创建 网站 的常见情况。实时获取竞争对手的外链资源,挖掘新资源是重中之重。站长只有大量的熟人对竞争对手的所有信息进行粗略的解释和超越。竞争对手的外部链接也是站长学习的。
3. 丰富使用网页优化启动“可以提高网站的访问率,站长可以利用一系列条件来提高网站的运行率,这些成就每个都要学习丰富网站。这样一个敷衍的商业网站的结果是非常实用的。网页优化的结果是当我创建一个网站并更新它时,我可以实时照顾百度。如何优化我的网站网站? 同时,网站 上有一些headers 需要改进。
这可以让你在输入关键词后查看这些词中哪些相关词被用户搜索过,从而可以大致提高网站对关键词的收益。
站长使用东西在很大程度上简化了站长在使用过程中,服从性也提高了,站长的优化能力也提高了。这些都是百度站长用的东西。虽然现在百度的东西还不是很全面,但相信在不久的将来,站长的东西会全面转型,内容会越来越满意。 查看全部
通用解决方案:程序员必备网站之一:API Coding
大家好,我叫G。
前不久,我们推送了一篇文章文章《这个神器可以帮助你快速找到你想要的API接口!》,分享给大家网站:来自印度、丹麦的开发者制作的Public APIs,其主要功能是帮助开发者找到一些免费实用的API接口。
在文章的最后,顺便提到了作者的其他几个项目,并承诺以后会介绍给大家。今天,小G就是来兑现这个承诺的。
下面我们要介绍的网站就是API Coding。
它的主要功能是采集和汇总众多API相关的开放接口、学习资源、工具教程等,帮助开发者降低信息检索成本和学习成本。
地址:apicoding.io
从它的主页介绍来看,它的主要内容主要分为以下几类。
API 合集:自由开放的接口

它采集了互联网上大量免费开放的API接口,包括视频会议、股票分析、货币转换、PDF转换、IP查询、图像压缩、短链生成等众多不同功能的API接口。
地址:apicoding.io/public-apis
学习:解释API开发的文章
共收录6个文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 开发工具
共采集了22个有用的API工具,包括但不限于云存储、云托管、JSON在线编辑/解析/生成、API接口调试、假数据生成、数据爬取等功能。
地址:apicoding.io/tools

资源:API 教程和项目在线开放
主要采集网上众多作者发现的优质API教程,包括API的最佳开发实践、微软API设计指南、REST API的快速创建、真实环境在线部署等。
地址:apicoding.io/resources
总体来说,网站提供的界面列表、学习资源、开发工具都挺实用的。
如果你目前的API接口设计和开发能力比较薄弱,建议你看看这个网站,相信你能在上面找到很多好东西。
--
文末安利还有一波我们的公众号:GitHubDaily。目前每天至少更新3篇文章,主要分享比较实用或者有趣的开发工具和开源项目,偶尔聊聊技术圈的最新。有什么新鲜事,感兴趣的朋友可以关注一下。
高效的方法:如何利用SEO站长工具优化工作
网站 的提升都被优化器使用。没有搜索引擎优化,推广是不可能的。百度站长之物的推出,得到了草根站长们的大力支持。虽然这些东西不能满足很多地方站长的需求,但是很多内容都很好的支持了站长。如何更好地利用百度站长?有必要了解一下百度站长的一些成就。

1.如何发送外部链接应该从外部链接分析中获得。这些都是自然技巧,其他的网站在讲解的时候也需要说明。你会发现百度文章采集里面的文字很好,百度笔墨采集前面的链接也很不错。这很好。锚文本上下文链接是网站外链发布的重要推广上下文,也是站长们关注和值得做的事情。
2. 竞争对手数据也可以通过外链进行解释。通过外链搞定站长,可以轻松搞定一系列外链竞争对手。我们能知道有多少外展是有效的,外展的传递平台在哪里?俗话说:“知己知彼,百战百胜”。解释竞争对手的 网站 是我创建 网站 的常见情况。实时获取竞争对手的外链资源,挖掘新资源是重中之重。站长只有大量的熟人对竞争对手的所有信息进行粗略的解释和超越。竞争对手的外部链接也是站长学习的。
3. 丰富使用网页优化启动“可以提高网站的访问率,站长可以利用一系列条件来提高网站的运行率,这些成就每个都要学习丰富网站。这样一个敷衍的商业网站的结果是非常实用的。网页优化的结果是当我创建一个网站并更新它时,我可以实时照顾百度。如何优化我的网站网站? 同时,网站 上有一些headers 需要改进。

这可以让你在输入关键词后查看这些词中哪些相关词被用户搜索过,从而可以大致提高网站对关键词的收益。
站长使用东西在很大程度上简化了站长在使用过程中,服从性也提高了,站长的优化能力也提高了。这些都是百度站长用的东西。虽然现在百度的东西还不是很全面,但相信在不久的将来,站长的东西会全面转型,内容会越来越满意。
完整解决方案:JavaScript架构前端监控搭建过程步骤
采集交流 • 优采云 发表了文章 • 0 个评论 • 69 次浏览 • 2022-10-18 05:15
目录
前言
上一篇介绍了为什么前端会有监控系统?前端监控系统有什么意义?有朋友看完后留言,想听听一些详细的实现。那么在本文中,我们将开始介绍前端监控是如何实现的。
如果还是不明白为什么,监控有什么用,推荐阅读上一篇文章文章:前端为什么不能没有监控系统?
在实施之前,首先要在脑海中有一个整体的背景,了解构建前端监控的具体流程步骤。因为前端监控系统其实是一个完整的全栈项目,不仅仅是前端,甚至主要的实现都围绕着数据。
当然,还有一点需要说明。本文的实现主要针对普通业务和中小厂自研方向。我看过大厂做的监控系统。它非常复杂和强大,动辄数以亿计的数据。最终走向了大数据的方向。我只介绍如何实现main函数,如何解决问题。
前端监控的构建过程分为以下几个阶段:
下面我来梳理一下各个阶段的关键实现思路。
采集阶段:采集什么数据?
监控的第一步是采集数据。有数据是监控的前提。
采集数据的含义是记录用户在使用产品过程中的真实操作。结合我们上一篇的分析,实际操作产生的数据可以分为两类:异常数据和行为数据。
我们先分析异常数据。项目中的异常一般可以分为两类,一类是前端异常,一类是接口异常。
前端异常
前端异常大致可以分为:
最重要的,也是我们遇到最多的,就是各种js代码执行异常。比如类型错误、引用错误等。这些异常大部分是由于我们的编码不精确造成的,所以采集这些异常有助于我们提高编码质量。
然后是 Promise 异常。Promise 是 ES6 最重要的属性之一。考验我们的js异步编程能力,主要体现在接口请求上。因此,这两部分的异常捕获非常关键。
另外,静态资源加载异常一般是指引用了一些html中的图片地址、第三方js地址等,由于各种原因不能正常加载,这个也要监控。
console.error 异常一般用在第三方前端框架中。它自定义了一些错误,会被console.error抛出。此类异常也需要被捕获。
至于跨域异常,我们经常会遇到这种情况,通常可以在前后端开发联调阶段发现。但不确定是后端的配置突然在线更改,导致前端跨域。为了安全起见,您还应该对其进行监控。
前端异常采集大概只有这5种,基本覆盖了前端90%以上的异常。
接口异常
接口异常属于后端异常,但是接口异常会直接导致前端页面错误。因此,此类异常是我们判断线上问题根源的重要依据。接口异常可以根据响应结果分类:
有时由于网络问题或服务器问题,前端发起请求后没有收到响应,请求被挂起。这次是无响应/超时响应异常。对于此类异常,我们可以设置最大请求时间,超时后主动断开请求,添加接口超时记录。
另外,其他类型的接口异常可以根据HTTP状态码或者后端返回的error_code等指定字段来判断。
不管是使用状态码还是其他判断方式,只要能区分异常类型,这个不是严格要求的。
4xx异常类型是请求异常,一般是前端传递的参数有问题,或者接口验证参数有问题。处理此类异常的关键是保存请求参数,这样可以方便前端排查。
5xx 错误是服务器内部处理的异常。此类异常的关键信息是报错时间和返回的异常描述。保存这些可以方便后端查找日志。
我认为权限不足也是一种重要的错误类型。因为有些管理系统的权限设计比较复杂,有时候界面突然莫名其妙无法调整,影响用户接下来的操作,也需要记录和跟踪。
行为数据
行为数据比较广泛,用户任何有意义的操作都可以定义为行为数据。
例如,当一个按钮被点击时,它在那里停留了多长时间,新功能的点击率,何时使用等等。自主研发的监控系统的优势之一是灵活性。您需要的任何有用信息都可以在此阶段进行设计。
这个阶段非常关键,是监控系统设计的核心,所以我写的很详细,这个阶段大家要多考虑采集哪些数据。后面的阶段都是基于这个设计的具体实现。
API阶段:构建上报数据的API接口
在上一阶段,采集数据计划已经准备好了。当 采集 数据到达时,接下来会上报数据。
说白了,数据上报就是通过调用API接口将数据传输出来,然后存入数据库。因此,这个阶段的任务是构建一个用于报告数据的API接口应用程序。
作为一名光荣的前端工程师,在开发接口时自然会选择属于 JS 家族的 Node.js。Node.js 目前有很多框架。我比较喜欢轻量简洁,什么都需要自己安装,所以选择了简洁经典的Express框架。
构建 API 应用程序要做的事情是:
还有一些细节需要处理。这个阶段对于后端基础薄弱的同学来说是一个很好的学习机会。
强烈建议前端的朋友掌握一些后端的基础知识,至少从简单的原理上了解是怎么回事。这个阶段主要是了解API应用是如何搭建的,每个部分为什么要做,可以解决哪些问题,这样你对后端的基础知识就会建立起来。
框架搭建好后,主要是设计接口URL,然后编写处理逻辑,保证这一步设计的接口可以调整,可以接收数据。
数据存储阶段:与数据库接口对接
上一步我们构建了API接口,接收到采集的数据。然后,在这一步中,我们需要连接数据库,并将 采集 中的数据存储到数据库中。
数据库方面,选择对前端最友好的,属于NoSQL家族的文档数据库MongoDB。
这个数据库最大的特点就是存储的数据格式类似于JSON,操作就像在JS中调用函数,结合JOSN数据。我们很容易理解并开始使用前端。可以在实战过程中体验。优雅也。
数据存储阶段主要介绍数据库的基本信息和操作,包括以下几个方面:
这个阶段的关键是数据验证。在设计完数据库字段后,我们希望所有写入的数据都必须符合我们想要的数据格式。如果验证后不符合,我们可以补充或修改数据字段,或者干脆拒绝写入,这样可以保证数据的可靠性,避免不必要的数据清洗。
数据写入完成后,需要添加一些简单的查询和修改功能。因为要在写完数据后查看执行是否成功,可以查看一个列表来查看结果。
还需要修改功能。前端监控中一个很常见的需求就是计算用户的页面停留时间。我的计划是在用户进入某个页面时创建一条记录,然后在用户离开时修改该记录并添加一个结束时间字段,这需要修改功能。
最后但并非最不重要的一点是,许多人都在谈论如何清理数据。实际上,这取决于您在将数据存储在您面前时如何验证。如果确实可以存储无效数据,可以写一个清空数据的接口,自己写清空逻辑,定时执行。
查询统计阶段:数据查询和统计分析
经过一系列的准备,我们已经完成了API接口和数据写入的功能。假设我们有 采集 足够的数据并存储在数据库中,这个阶段就是充分利用这些数据的时候了。
这个阶段的主要任务是对数据进行检索和统计分析,基本上是“查询”操作。
这里的查询不仅仅是为了检查,如何检查,关系到我们采集到的数据能否得到有效利用。我的想法是从这两个方面入手:
当然,这只是笼统的说法。行为数据也将在一行中查询。例如,如果我想查看用户在某个时间做了什么,这就是精确搜索。还有异常数据的统计,比如异常接口的触发频率排名。
行为数据量会非常大,在用户使用系统的过程中会频繁生成并写入数据库。因此,在这类数据的大部分情况下,都是通过聚合查询的方式,从页数、时间等多个维度进行整体统计,最后得出一些百分比的结论。这些统计值可以大致反映产品的实际使用情况。
这里有个优化点,因为频繁的请求会增加接口的负担,所以一部分数据也可以在本地存储,达到一定数量后,一次性请求并存储接口。
异常数据对于开发者来说非常重要,对于我们定位和解决bug来说是天赐之物。与行为数据的多重统计不同,我们更关心异常数据的每一条记录的详细信息,让错误一目了然。
查询异常数据也比较简单。和普通的列表查询一样,只需要返回最新的异常数据即可。当然,我们排查问题后,也要把处理的异常标记为已处理,这样可以防止重复排查。
可以看出,这个阶段最重要的是做一个统计界面,为下一阶段图表展示的可视化做准备。
可视化阶段:最终数据图表展示
在最后阶段,我们开发了一个统计界面并找到了想要的数据结果。不幸的是,这些结果只有程序员才能理解,其他人可能无法理解。所以最后,为了更直观的反映数据,我们需要使用前端的可视化图表,让这些数据活起来。
在这个阶段,我们终于回到了最熟悉的前端领域。这个阶段的任务比较简单,比较顺利。基于React构建一个新的前端应用,访问上一步的统计界面,然后集成前端图表库,以图表的形式展示统计结果。
这个新应用是一个前端监控系统,真正需要展示给外界。供团队内部的开发人员或产品学生使用,方便他们实时查看产品产生的数据信息,解决自己的问题。
事实上,现阶段没有关键问题可谈。主要是选择一个好用的图表库并连接接口。还有各种类型的图表。需要考虑哪些数据适合哪些图表,根据实际情况做出判断。
最后,监控系统的前端页面和界面数据不是人人都能看到的,所以要有基本的登录页面和功能。做到这一点,这个阶段的任务就结束了。
报警阶段:发现异常立即报警通知
前一阶段,监控系统前端搭建完成,统计数据以图表形式展示后,整个监控系统基本可用。
但是还有另一种情况,就是用户在使用我们的产品时突然报错,错误信息也被写入了数据库。如果此时你不主动刷新页面,实际上你也不能一直刷新页面,那么我们根本不知道这个错误。
如果这是一个非常致命的bug,影响范围很广,我们甚至不知道这个bug是什么时候发生的,那会给我们带来很大的损失。
所以,为了保证我们能及时解决bug,告警通知的功能就显得非常重要了。它的作用是在出现异常的第一时间推送给开发者,让大家第一时间发现问题,然后以最快的速度解决,避免遗漏。
报警通知,现在一般的解决方案是连接钉钉或者企业微信的机器人,我们这里使用钉钉。使用哪个平台取决于您的主题所在的平台。比如我的团队主体在钉钉上,所以在发送报警通知时,可以直接用手机号@任意一个团队成员,实现更精准的提醒。
本部分是对 API 应用的补充。申请钉钉开发者权限后,访问API中的相关代码。
部署阶段:万事俱备,只等上线
前期我们完成了数据采集、API应用构建、数据存储、前端可视化展示、监控告警。整个前端监控系统功能齐全。最后一步是将所有的前端和后端数据库都在线部署,供大家访问。
部署主要是nginx解析、https配置、数据库安装、nodejs的应用部署等,这个阶段的内容会多一点运维。不过不用担心,这里我也会详细介绍关键操作。
系统上线后,你可以尝试在你的任意一个前端项目中通过API保存数据采集,按照第一篇中的采集方法,然后登录监控系统查看真实使用数据。
当这部分完成后,恭喜,一个小型的前端监控系统搭建完成。未来我们可以在此基础上继续扩展功能,慢慢让这个自研的监控系统变得更强大。
总结
本文介绍了前端监控系统的搭建流程,将整个流程分为几个阶段,简要介绍了每个阶段要做什么,有哪些关键问题,帮助大家理清搭建监控系统的思路,以及更多关于前端监控和构建JavaScript架构的信息,请关注脚本之家文章的其他相关话题!
最佳实践:DEDE采集规则过滤与替换
删除最常用的超链接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像这样填写它,那么链接的文本也会被删除{dede:trim替换=''}]*)>(.*){/dede:trim}
2、过滤JS调用广告,比如GG广告,添加这样的东西:{dede:trim=''}{/dede:trim}
3. 过滤 div 标签。这是非常重要的,如果不过滤,它可能会错放已发布的文章布局,并且当前大多数采集在遇到它之后都放错了位置。{dede:trim replace=''}
{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有时有必要像这样过滤:{dede:修剪替换=''}
(.*)
{/dede:trim}
4.其他过滤规则可以根据上述规则引入。
5.过滤经常使用的片段和关键字使用情况。{dede:trim replace=''}{/dede:trim}
6.更换简单。
{dede:trim replace ='被替换的单词'} 要替换的单词 {/dede:trim}
当然,采集的内容也需要搜索引擎收录,过滤和替换的目的是为了减少重复、伪原创,如何具体操作,这取决于个人的要求和喜好。
有关更多信息,请参阅 IT 技术专栏 查看全部
完整解决方案:JavaScript架构前端监控搭建过程步骤
目录
前言
上一篇介绍了为什么前端会有监控系统?前端监控系统有什么意义?有朋友看完后留言,想听听一些详细的实现。那么在本文中,我们将开始介绍前端监控是如何实现的。
如果还是不明白为什么,监控有什么用,推荐阅读上一篇文章文章:前端为什么不能没有监控系统?
在实施之前,首先要在脑海中有一个整体的背景,了解构建前端监控的具体流程步骤。因为前端监控系统其实是一个完整的全栈项目,不仅仅是前端,甚至主要的实现都围绕着数据。
当然,还有一点需要说明。本文的实现主要针对普通业务和中小厂自研方向。我看过大厂做的监控系统。它非常复杂和强大,动辄数以亿计的数据。最终走向了大数据的方向。我只介绍如何实现main函数,如何解决问题。
前端监控的构建过程分为以下几个阶段:
下面我来梳理一下各个阶段的关键实现思路。
采集阶段:采集什么数据?
监控的第一步是采集数据。有数据是监控的前提。
采集数据的含义是记录用户在使用产品过程中的真实操作。结合我们上一篇的分析,实际操作产生的数据可以分为两类:异常数据和行为数据。
我们先分析异常数据。项目中的异常一般可以分为两类,一类是前端异常,一类是接口异常。
前端异常
前端异常大致可以分为:
最重要的,也是我们遇到最多的,就是各种js代码执行异常。比如类型错误、引用错误等。这些异常大部分是由于我们的编码不精确造成的,所以采集这些异常有助于我们提高编码质量。
然后是 Promise 异常。Promise 是 ES6 最重要的属性之一。考验我们的js异步编程能力,主要体现在接口请求上。因此,这两部分的异常捕获非常关键。
另外,静态资源加载异常一般是指引用了一些html中的图片地址、第三方js地址等,由于各种原因不能正常加载,这个也要监控。
console.error 异常一般用在第三方前端框架中。它自定义了一些错误,会被console.error抛出。此类异常也需要被捕获。
至于跨域异常,我们经常会遇到这种情况,通常可以在前后端开发联调阶段发现。但不确定是后端的配置突然在线更改,导致前端跨域。为了安全起见,您还应该对其进行监控。
前端异常采集大概只有这5种,基本覆盖了前端90%以上的异常。
接口异常
接口异常属于后端异常,但是接口异常会直接导致前端页面错误。因此,此类异常是我们判断线上问题根源的重要依据。接口异常可以根据响应结果分类:
有时由于网络问题或服务器问题,前端发起请求后没有收到响应,请求被挂起。这次是无响应/超时响应异常。对于此类异常,我们可以设置最大请求时间,超时后主动断开请求,添加接口超时记录。
另外,其他类型的接口异常可以根据HTTP状态码或者后端返回的error_code等指定字段来判断。
不管是使用状态码还是其他判断方式,只要能区分异常类型,这个不是严格要求的。
4xx异常类型是请求异常,一般是前端传递的参数有问题,或者接口验证参数有问题。处理此类异常的关键是保存请求参数,这样可以方便前端排查。

5xx 错误是服务器内部处理的异常。此类异常的关键信息是报错时间和返回的异常描述。保存这些可以方便后端查找日志。
我认为权限不足也是一种重要的错误类型。因为有些管理系统的权限设计比较复杂,有时候界面突然莫名其妙无法调整,影响用户接下来的操作,也需要记录和跟踪。
行为数据
行为数据比较广泛,用户任何有意义的操作都可以定义为行为数据。
例如,当一个按钮被点击时,它在那里停留了多长时间,新功能的点击率,何时使用等等。自主研发的监控系统的优势之一是灵活性。您需要的任何有用信息都可以在此阶段进行设计。
这个阶段非常关键,是监控系统设计的核心,所以我写的很详细,这个阶段大家要多考虑采集哪些数据。后面的阶段都是基于这个设计的具体实现。
API阶段:构建上报数据的API接口
在上一阶段,采集数据计划已经准备好了。当 采集 数据到达时,接下来会上报数据。
说白了,数据上报就是通过调用API接口将数据传输出来,然后存入数据库。因此,这个阶段的任务是构建一个用于报告数据的API接口应用程序。
作为一名光荣的前端工程师,在开发接口时自然会选择属于 JS 家族的 Node.js。Node.js 目前有很多框架。我比较喜欢轻量简洁,什么都需要自己安装,所以选择了简洁经典的Express框架。
构建 API 应用程序要做的事情是:
还有一些细节需要处理。这个阶段对于后端基础薄弱的同学来说是一个很好的学习机会。
强烈建议前端的朋友掌握一些后端的基础知识,至少从简单的原理上了解是怎么回事。这个阶段主要是了解API应用是如何搭建的,每个部分为什么要做,可以解决哪些问题,这样你对后端的基础知识就会建立起来。
框架搭建好后,主要是设计接口URL,然后编写处理逻辑,保证这一步设计的接口可以调整,可以接收数据。
数据存储阶段:与数据库接口对接
上一步我们构建了API接口,接收到采集的数据。然后,在这一步中,我们需要连接数据库,并将 采集 中的数据存储到数据库中。
数据库方面,选择对前端最友好的,属于NoSQL家族的文档数据库MongoDB。
这个数据库最大的特点就是存储的数据格式类似于JSON,操作就像在JS中调用函数,结合JOSN数据。我们很容易理解并开始使用前端。可以在实战过程中体验。优雅也。
数据存储阶段主要介绍数据库的基本信息和操作,包括以下几个方面:
这个阶段的关键是数据验证。在设计完数据库字段后,我们希望所有写入的数据都必须符合我们想要的数据格式。如果验证后不符合,我们可以补充或修改数据字段,或者干脆拒绝写入,这样可以保证数据的可靠性,避免不必要的数据清洗。
数据写入完成后,需要添加一些简单的查询和修改功能。因为要在写完数据后查看执行是否成功,可以查看一个列表来查看结果。
还需要修改功能。前端监控中一个很常见的需求就是计算用户的页面停留时间。我的计划是在用户进入某个页面时创建一条记录,然后在用户离开时修改该记录并添加一个结束时间字段,这需要修改功能。
最后但并非最不重要的一点是,许多人都在谈论如何清理数据。实际上,这取决于您在将数据存储在您面前时如何验证。如果确实可以存储无效数据,可以写一个清空数据的接口,自己写清空逻辑,定时执行。
查询统计阶段:数据查询和统计分析
经过一系列的准备,我们已经完成了API接口和数据写入的功能。假设我们有 采集 足够的数据并存储在数据库中,这个阶段就是充分利用这些数据的时候了。
这个阶段的主要任务是对数据进行检索和统计分析,基本上是“查询”操作。
这里的查询不仅仅是为了检查,如何检查,关系到我们采集到的数据能否得到有效利用。我的想法是从这两个方面入手:

当然,这只是笼统的说法。行为数据也将在一行中查询。例如,如果我想查看用户在某个时间做了什么,这就是精确搜索。还有异常数据的统计,比如异常接口的触发频率排名。
行为数据量会非常大,在用户使用系统的过程中会频繁生成并写入数据库。因此,在这类数据的大部分情况下,都是通过聚合查询的方式,从页数、时间等多个维度进行整体统计,最后得出一些百分比的结论。这些统计值可以大致反映产品的实际使用情况。
这里有个优化点,因为频繁的请求会增加接口的负担,所以一部分数据也可以在本地存储,达到一定数量后,一次性请求并存储接口。
异常数据对于开发者来说非常重要,对于我们定位和解决bug来说是天赐之物。与行为数据的多重统计不同,我们更关心异常数据的每一条记录的详细信息,让错误一目了然。
查询异常数据也比较简单。和普通的列表查询一样,只需要返回最新的异常数据即可。当然,我们排查问题后,也要把处理的异常标记为已处理,这样可以防止重复排查。
可以看出,这个阶段最重要的是做一个统计界面,为下一阶段图表展示的可视化做准备。
可视化阶段:最终数据图表展示
在最后阶段,我们开发了一个统计界面并找到了想要的数据结果。不幸的是,这些结果只有程序员才能理解,其他人可能无法理解。所以最后,为了更直观的反映数据,我们需要使用前端的可视化图表,让这些数据活起来。
在这个阶段,我们终于回到了最熟悉的前端领域。这个阶段的任务比较简单,比较顺利。基于React构建一个新的前端应用,访问上一步的统计界面,然后集成前端图表库,以图表的形式展示统计结果。
这个新应用是一个前端监控系统,真正需要展示给外界。供团队内部的开发人员或产品学生使用,方便他们实时查看产品产生的数据信息,解决自己的问题。
事实上,现阶段没有关键问题可谈。主要是选择一个好用的图表库并连接接口。还有各种类型的图表。需要考虑哪些数据适合哪些图表,根据实际情况做出判断。
最后,监控系统的前端页面和界面数据不是人人都能看到的,所以要有基本的登录页面和功能。做到这一点,这个阶段的任务就结束了。
报警阶段:发现异常立即报警通知
前一阶段,监控系统前端搭建完成,统计数据以图表形式展示后,整个监控系统基本可用。
但是还有另一种情况,就是用户在使用我们的产品时突然报错,错误信息也被写入了数据库。如果此时你不主动刷新页面,实际上你也不能一直刷新页面,那么我们根本不知道这个错误。
如果这是一个非常致命的bug,影响范围很广,我们甚至不知道这个bug是什么时候发生的,那会给我们带来很大的损失。
所以,为了保证我们能及时解决bug,告警通知的功能就显得非常重要了。它的作用是在出现异常的第一时间推送给开发者,让大家第一时间发现问题,然后以最快的速度解决,避免遗漏。
报警通知,现在一般的解决方案是连接钉钉或者企业微信的机器人,我们这里使用钉钉。使用哪个平台取决于您的主题所在的平台。比如我的团队主体在钉钉上,所以在发送报警通知时,可以直接用手机号@任意一个团队成员,实现更精准的提醒。
本部分是对 API 应用的补充。申请钉钉开发者权限后,访问API中的相关代码。
部署阶段:万事俱备,只等上线
前期我们完成了数据采集、API应用构建、数据存储、前端可视化展示、监控告警。整个前端监控系统功能齐全。最后一步是将所有的前端和后端数据库都在线部署,供大家访问。
部署主要是nginx解析、https配置、数据库安装、nodejs的应用部署等,这个阶段的内容会多一点运维。不过不用担心,这里我也会详细介绍关键操作。
系统上线后,你可以尝试在你的任意一个前端项目中通过API保存数据采集,按照第一篇中的采集方法,然后登录监控系统查看真实使用数据。
当这部分完成后,恭喜,一个小型的前端监控系统搭建完成。未来我们可以在此基础上继续扩展功能,慢慢让这个自研的监控系统变得更强大。
总结
本文介绍了前端监控系统的搭建流程,将整个流程分为几个阶段,简要介绍了每个阶段要做什么,有哪些关键问题,帮助大家理清搭建监控系统的思路,以及更多关于前端监控和构建JavaScript架构的信息,请关注脚本之家文章的其他相关话题!
最佳实践:DEDE采集规则过滤与替换
删除最常用的超链接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像这样填写它,那么链接的文本也会被删除{dede:trim替换=''}]*)>(.*){/dede:trim}
2、过滤JS调用广告,比如GG广告,添加这样的东西:{dede:trim=''}{/dede:trim}
3. 过滤 div 标签。这是非常重要的,如果不过滤,它可能会错放已发布的文章布局,并且当前大多数采集在遇到它之后都放错了位置。{dede:trim replace=''}

{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有时有必要像这样过滤:{dede:修剪替换=''}
(.*)
{/dede:trim}

4.其他过滤规则可以根据上述规则引入。
5.过滤经常使用的片段和关键字使用情况。{dede:trim replace=''}{/dede:trim}
6.更换简单。
{dede:trim replace ='被替换的单词'} 要替换的单词 {/dede:trim}
当然,采集的内容也需要搜索引擎收录,过滤和替换的目的是为了减少重复、伪原创,如何具体操作,这取决于个人的要求和喜好。
有关更多信息,请参阅 IT 技术专栏
最新版本:原来这才是Api文档的完全体
采集交流 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-10-14 19:10
一、简介
在目前主流的前后端分离模式开发下,需要有一个好用的接口文档。
**PS:以下几点是实际开发场景中遇到并实现的痛点**。
在项目的开发过程中,接口文档的存在可以让前端和后端工程师保持统一的数据信息概念。例如:“项目需求的接口字段和参数字段。只要将请求返回的参数记录在文档中,前端和后端工程师就可以针对接口文档统一编写自己的逻辑在写代码的时候,统一命名后,各个代码中就不会出现需要的函数的前端请求接口命名与后端返回接口的命名信息不一致的情况,这样可以大大避免故障排查失败,快速定位问题。
一个好的界面文档肯定会更直观、更容易维护、更容易保存。这些基本属性。但是到了21世纪的今天,还是有界面文档还是用word文档或者excel等笔记本记录工具来记录的。这样,文档是可用的,但是在项目的不断迭代中,文档需要不断的维护和更新,投入了不必要的成本。在项目交接的场景中,也交付了大量的接口文档。但是,在基于人工维护编写文档时,自然会出现删除参数、复制错误等错误操作的错误,从而无法很好地保证文档的正确性。
2.apifox在线接口文档
如今,许多界面文档工具层出不穷,如swagger、yapi、Knife4j等。但它们或多或少都有一些缺点。比如我们后端同学最常用的swagger-ui,有以下痛点:
提交的参数为 JSON,无法格式化。如果参数错误,查找起来很麻烦。返回的结果不能折叠。阅读时间太长了。
swagger-ui 在界面数量增加的情况下非常难用,而且没有分类菜单。
在最近的技术社区中,发现了一个api接口工具Apifox。相当于一个集Postman + Swagger + Mock + JMeter于一体的工具。Apifox 的界面文档是我遇到过的最亲密的程序员之一。不仅解决了我遇到的开发痛点,接口文档也很强大。
2.1 如何生成在线接口文档 2.1.1 第一步
首先去Apifox官网根据你对应的系统下载对应的Apifox客户端。当然,直接使用网页版并不妨碍我们后续的步骤。
下载完成后,我们打开客户端或者网页登录。如果你是第一次使用,可以先注册一个账号再登录。第一次使用的同学会发现如下页面进入。
因为演示,我会直接使用当前的示例团队和里面的示例项目。点击示例项目进入Apifox,会看到演示中使用的宠物店的界面分组。
2.1.2 第二步
为了让学生更恰当地使用 Apifox 替代到自己的项目中。我决定更多地模拟我们的真实使用环境,我在我的服务器上部署了一个名为 jeetcg-Boot 的开源项目。本项目有自己的自定义接口文档,但是可以导出一些OpenApi和Markdown格式的文档,然后我可以使用导出的接口文档来演示如何慢慢连接到网上提供的Apifox文档。
现在的同学有没有类似swagger格式的文档也没关系,因为Apifox支持21种格式的导入方式,把你的数据转换成Apifox。但也有例外。比如我上面提到的当前项目没有文档,其实你也可以通过Apifox的新界面添加当前项目的请求参数等信息,让你的项目从现在开始。有自己的接口文档。所以这里我们主要关注生成在线文档的操作如何创建一个新的在线文档。,所以这里不再详细介绍新的界面。此处操作不是很好的同学可以点击这部分文档帮助进行参考。
然后我将我的jeetcg-boot项目的接口文件导出为一个OpenApi.json文件,通过Apifox的导入功能将我当前项目的接口转入Apifox
6
通过这么简单的步骤,我的项目界面就成功移植到了Apifox进行管理。
在这里我要表扬一下 Apifox 真的很漂亮的设计和舒适的排版,对于像我这样的颜值控。
2.1.3 第三步
这一步是我们目的的最后一步。确保我们的接口已经存在于项目中后,我们可以通过左侧的在线分享点击我们的新分享。
7
此时我们可以看到创建在线文档的信息表,需要填写接手当前项目的团队或其他小公司对于合作伙伴使用的这种场景,建议填写对应的匹配名称。密码访问可以为我们生成的在线文档提供一层加密保护,让不小心泄露的界面地址不会被其他人访问看到我们的界面设计等信息,所以这里要填写的小伙伴可以按照真实情况填写。过期时间可以决定我们当前生成的在线接口文档的过期时间。共享范围允许我们挑选和选择我们需要生成到在线接口文档的接口。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。
8
填写完所有信息后,我们可以点击保存,为我们的项目生成一个在线界面文档url。此时,我们复制当前生成的在线接口文档链接,打开即可找到我们的项目接口文档。
9
102.2 Apifox 的在线界面文档中的“魔力”是什么 2.2.1 文档中直接运行界面
细心的同学一定发现,选择一个界面后,在我们文档的右侧有一个运行按钮。单击该按钮将显示执行操作界面。点击发送后,我们可以看到返回的结果和我们的界面一模一样。返回响应的格式相同。调用正是我们在生成这个接口时选择使用的云mock环境,所以现在显示的数据是mock为我们生成的假数据。
但是,这对于获取文档的开发来说并不是太简单。可以直接在文档上测试当前接口是否满足要求,测试当前环境的接口状态是否正常。
在mock环境中调用的接口也方便前端程序员先开发后端,不会被后端同学卡住。
11
122.2.2 13种语言生成请求示例代码
在文档的中间,我们可以看到一些编程语言的非常明显的图标。它们是干什么用的??
13
作为一个前端程序员,我自然会用javascript来介绍给我的同学。点击 javascript 图标,我们发现下面有一行选项卡提供选择。相信文章之前也是前端程序员的同学们并不陌生。这些是js常用的请求方法,在每个方法的选项卡下选择编辑器。会有代码使用这个方法来调用当前接口。**当我第一次看到这个功能时,我惊呆了。有这么亲密的互动吗?? **
由于程序员的职业病,我们当然要测试生成的代码,他能跑吗?正确的。这里推荐你使用一些在线 IDE 来运行一些代码的方法。例如,流行的 stackblitz
我们把axios的代码复制到ide编辑器中,在线安装axios的库就可以在线运行了。
结果很明显,右边的打印和我们刚才跑的返回一模一样。这真的是牛肉。所以意味着这13种语言都可以生成自己的请求代码,在实际代码中验证当前接口请求的性能。
如果你想在这里测试更多的编程语言,那我就分享一个在线的ide小闪电,可以运行30多种语言。
2.2.3 生成模型代码
这个函数也是我很喜欢的一个函数,生成模型代码。主要是为返回的响应参数生成的模型代码。
比如我选择使用Typescript代码,那么它会自动生成一个带返回参数的typescript类型接口,这对于使用ts开发的前端同学来说是一个福音。不再需要一一复制请求返回的类型。现在可以直接复制粘贴到界面文档中,放入代码中。
当前代码生成模型的操作栏针对每种编程语言都有相应的配置开关。例如,对于 typescript,您可以打开仅生成类型定义,这将删除下面的转换代码。仅保留类型定义。并且还可以对运行时的json.parse的结果进行校验,确保我们返回的结果参数符合条件。
所以需要生成什么类型的模型代码就看同学们配置的需要了。
3. Apifox 在线分享接口文档的详细信息。这里我要说的是,我认为目前的这个接口文档确实是为了程序员的效率和易用性。
3.1.1 接口连接可直接点击复制:
3.1.2 文档整体布局
文档的整体布局是左右结构的,所以当我们的程序员在阅读文档的时候需要做一个试运行的时候,我们可以通过左右检查参数来检查是否有不符合要求的参数,这与顶部的swagger参数和底部的请求不同。需要上下移动,方便性大打折扣。
3.1.3 运行时批量编辑参数
在操作界面中,我们有时会有大量的请求参数,可能需要临时更改才能上厕所。表单中是否逐个更改是一件很痛苦的事情,而Apifox为开发者提供了批量编辑交互。更容易实现他们的目标
四、结尾
使用过 Apifox 后,相信你会或多或少对这款软件的细节和强大的功能印象深刻。因为一个软件工具的使命必须是为用户提供方便,处处简化用户的操作,让工作更有效率,这就是一个好工具的表现。
Apifox 确实有一点要说,它是一个有利于程序员的良心工具。
终极:吐血整理!顶级程序员的百宝箱来咯!| 原力计划
每个人都知道我是一个电子商务企业。在线界面多的在线问题如何排查?捕获数据包并查看数据。
JMeter
Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具
是的,它用于压力测试。如何模拟大量请求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平台使用的软件编程文档管理工具,可以浏览 API 文档,管理代码片段。Dash 自带丰富的 API 文档,涵盖各种主流编程语言和框架。
开发文档
上面的兄弟,不过这个不用下载,是在线的
数据夹
DataGrip 是 JetBrains 推出的数据库管理产品。对于 JetBrains,开发者必须熟悉它。IDEA和ReSharper都是这家公司的产品,用户体验非常好。
一开始,我只是用它来看看我的同事正在使用一个很酷的界面。后来发现功能也很好吃,突出文字等等。你可以挖掘很多功能。
视觉虚拟机
VisualVM 是 Netbeans 的一个配置文件子项目。JDK6.0 update 7已经收录,可以监控线程,内存情况,查看内存中方法和对象的CPU时间,已经被GC的对象,反向查看分配的栈(比如分配了哪些对象)到 100 个字符串对象)。
VisualVM 可以根据需要安装不同的插件。每个插件都有不同的关注点。有的主要监控GC,有的主要监控内存,还有的监控线程。
Iterm2
这是我用于日志故障排除的客户端工具。它还支持许多配置。可以直接ssh到跳板查看在线机器的状态等,还是需要在线排查的。
网*有道词典
有朋友想问帅青是什么情况,是不是有鬼畜混进来?
不,我们在开发它们时不知道很多单词,或者在命名它们时不知道单词的英文。仍然有必要检查它们。标准化的命名是你成为顶级大牛的第一步。你的名字全是A.B,C 当你的代码审核时,你的Leader会打电话给hr让你回家过年,然后再提交。新年来临之际,不要轻易尝试。
崇高的文本
这是一个文本记录的工具,也可以用来写代码,但是如果我们有IDE的话,它可以作为日常琐事记录的工具,临时文档处理的工具也是可以的,而且反正还是很有用的。
最近刚好有人才群里的人才打电话给我安利,给我做笔记和写博客的工具,说我的排版很好看。(我在飘)
安排!
印象笔记
这可以说是陪伴我大学到现在的一个工具。数了几千个文件,记录了生活中的小事,学了编程之后的很多东西。我在收录里面。
我不会和其他笔记比较,因为我一开始使用的那个从来没有被替换过。
泰波拉
Typora 是我一直在为其编写 Markdown 的工具。它易于使用,但也可以切换模式。你相信吗?打字机模式、对焦模式、音源模式总有一款适合你。
ipic
我使用 Typora 的图片床。Markdown复制图片是不是从本地地址进来的,发到外网就失效了。但是,这个基于 Typora 的工具,你复制进去的时候可以直接上传到互联网上。现在,你可以在任何你想要的平台上发布。
Md2All
每个人都很好奇我的降价如何看起来如此美丽。其实我写完markdown后,转成html,就用了上面的工具。
写完就在这里打出来然后发出去。打字花了很长时间,忍不住夸了帅C。
图像处理 Adobe Photoshop CC 2019
ps,众所周知,正常的图片处理啊用这个香味,没事帮美P拍照,说不定还能找个女朋友(又开始YY了)
Adobe Premiere Pro CC 2019
这可能是最常用的视频处理软件了,非常好用!!!
功能太丰富了,喘不过气来。缺点是学习成本有点高,入门很快。成为大神需要很多时间。
Adobe After Effects CC 2019
不知道你看了多少视频。视频的很多特效都是由此制作的。下面还有一个我的演示。
GIPHY 捕获
有时候人们文章不想用静态图片来表达,而是想录制Gif动画来写代码,那么这个软件真的好用。
视频播放 KMPlayer
其实帅C,我心里有一个玩家神器,快点播吧。
可惜没过多久,直播就过早地死掉了。我将使用以下播放软件播放自己的视频。
因为很多电脑自带的格式可能不支持,而且我喜欢剪辑视频,一直在用。
斗图
你有没有注意到我之前的很多 文章 表情实际上是在网上制作的?
碳
帅兵之前的文章里很多代码的图片都是这个网站生成的。有很多款式可供选择,非常漂亮。
代码LF
这个 网站 很有趣。如果你在写代码的时候不知道如何命名这些单词,可以去这里查看一下。他是GitHub的爬虫工具。看到大神之名,总会有想法。
注:我简单介绍一下上面的软件是做什么的,因为实在太多了,真正的功能还需要深挖。
总结
其实更香的工具太多了,这里就不一一介绍了,其实有一个很简单的方法,就是问,学,学。
我就是这样。看到Leader用什么工具,我问他是什么,好用吗?如何使用?
包括我写博客,其实才写了20多天。第一天准备写的时候,直接问三外(Java3y),你用什么开发工具,怎么用,包括他主要发布哪些平台,发布时间段,我会直接问。
他坐在我对面,因为我的猥亵而被迫说出真相,主要是因为最近有需要我为他写代码哈哈。
别人有这么多经验,会不会是软件不好?而且在使用过程中如果不知道,可以问问对方,是不是很香。
潺潺
我们先来看看人才交流群里一位人才提出的问题:
不知道大家还记得我之前写的幂等情况吗?
这就是下图中的情况。当我下单增加或减少 GMV 时,我会先去看看有没有流水。有的话就证明已经加了,我直接回。如果没有,请继续以下过程。
其实他提的问题很好,因为我们日常的开发是主从同步,读写分离,也就是说我们可能会加GMV,但是我们操作主库,他需要同步数据到奴隶图书馆,但是这个他在这个过程中被耽搁了。
这时候如果另一个系统重试订单号消息,你又进来了吗?你查看流水,发现没有流水,却以为自己没有加钱,进行了加钱的操作,结果耽误了。, 是不是加了两次。
正常开发中确实有,但是主从延迟应该是DBA(Database Administrator)考虑的,但是我说不能写有逻辑漏洞的代码,其实很简单,把他放到Redis中,设置一个时间约30分钟,可避免在此期间重复食用。如果延迟超过30分钟,问题已经很大了,DBA会知道的。
本文由吐血整理,大家吃好,记得给个赞哦!
原来的:
【结尾】
来吧,原力计划的升级版来了!2019年末,我们为您准备了一场交通盛宴!即日起,只要参与原力计划,文章达到要求,即可获得流量+现金的支持!
参与方式:发布原创文章时,在提交页面勾选原力计划即可参与。扫码戳详情↓ 查看全部
最新版本:原来这才是Api文档的完全体
一、简介
在目前主流的前后端分离模式开发下,需要有一个好用的接口文档。
**PS:以下几点是实际开发场景中遇到并实现的痛点**。
在项目的开发过程中,接口文档的存在可以让前端和后端工程师保持统一的数据信息概念。例如:“项目需求的接口字段和参数字段。只要将请求返回的参数记录在文档中,前端和后端工程师就可以针对接口文档统一编写自己的逻辑在写代码的时候,统一命名后,各个代码中就不会出现需要的函数的前端请求接口命名与后端返回接口的命名信息不一致的情况,这样可以大大避免故障排查失败,快速定位问题。
一个好的界面文档肯定会更直观、更容易维护、更容易保存。这些基本属性。但是到了21世纪的今天,还是有界面文档还是用word文档或者excel等笔记本记录工具来记录的。这样,文档是可用的,但是在项目的不断迭代中,文档需要不断的维护和更新,投入了不必要的成本。在项目交接的场景中,也交付了大量的接口文档。但是,在基于人工维护编写文档时,自然会出现删除参数、复制错误等错误操作的错误,从而无法很好地保证文档的正确性。
2.apifox在线接口文档
如今,许多界面文档工具层出不穷,如swagger、yapi、Knife4j等。但它们或多或少都有一些缺点。比如我们后端同学最常用的swagger-ui,有以下痛点:
提交的参数为 JSON,无法格式化。如果参数错误,查找起来很麻烦。返回的结果不能折叠。阅读时间太长了。
swagger-ui 在界面数量增加的情况下非常难用,而且没有分类菜单。
在最近的技术社区中,发现了一个api接口工具Apifox。相当于一个集Postman + Swagger + Mock + JMeter于一体的工具。Apifox 的界面文档是我遇到过的最亲密的程序员之一。不仅解决了我遇到的开发痛点,接口文档也很强大。
2.1 如何生成在线接口文档 2.1.1 第一步
首先去Apifox官网根据你对应的系统下载对应的Apifox客户端。当然,直接使用网页版并不妨碍我们后续的步骤。
下载完成后,我们打开客户端或者网页登录。如果你是第一次使用,可以先注册一个账号再登录。第一次使用的同学会发现如下页面进入。
因为演示,我会直接使用当前的示例团队和里面的示例项目。点击示例项目进入Apifox,会看到演示中使用的宠物店的界面分组。
2.1.2 第二步
为了让学生更恰当地使用 Apifox 替代到自己的项目中。我决定更多地模拟我们的真实使用环境,我在我的服务器上部署了一个名为 jeetcg-Boot 的开源项目。本项目有自己的自定义接口文档,但是可以导出一些OpenApi和Markdown格式的文档,然后我可以使用导出的接口文档来演示如何慢慢连接到网上提供的Apifox文档。
现在的同学有没有类似swagger格式的文档也没关系,因为Apifox支持21种格式的导入方式,把你的数据转换成Apifox。但也有例外。比如我上面提到的当前项目没有文档,其实你也可以通过Apifox的新界面添加当前项目的请求参数等信息,让你的项目从现在开始。有自己的接口文档。所以这里我们主要关注生成在线文档的操作如何创建一个新的在线文档。,所以这里不再详细介绍新的界面。此处操作不是很好的同学可以点击这部分文档帮助进行参考。
然后我将我的jeetcg-boot项目的接口文件导出为一个OpenApi.json文件,通过Apifox的导入功能将我当前项目的接口转入Apifox

6
通过这么简单的步骤,我的项目界面就成功移植到了Apifox进行管理。
在这里我要表扬一下 Apifox 真的很漂亮的设计和舒适的排版,对于像我这样的颜值控。
2.1.3 第三步
这一步是我们目的的最后一步。确保我们的接口已经存在于项目中后,我们可以通过左侧的在线分享点击我们的新分享。
7
此时我们可以看到创建在线文档的信息表,需要填写接手当前项目的团队或其他小公司对于合作伙伴使用的这种场景,建议填写对应的匹配名称。密码访问可以为我们生成的在线文档提供一层加密保护,让不小心泄露的界面地址不会被其他人访问看到我们的界面设计等信息,所以这里要填写的小伙伴可以按照真实情况填写。过期时间可以决定我们当前生成的在线接口文档的过期时间。共享范围允许我们挑选和选择我们需要生成到在线接口文档的接口。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。我们可能会遇到这样一种场景,我们需要向开发团队提供一些功能复杂的接口,但又不想将所有接口都暴露给对方。这时候我们就可以选择需要提供的接口了。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。运行时环境是决定生成的在线接口文档调用什么环境的接口。这里的环境设置,同学们可以看看这部分。这里我们选择用来模拟我们的接口调用的环境。更多设置允许我们在我们的在线文档中显示这三个信息。
8
填写完所有信息后,我们可以点击保存,为我们的项目生成一个在线界面文档url。此时,我们复制当前生成的在线接口文档链接,打开即可找到我们的项目接口文档。
9
102.2 Apifox 的在线界面文档中的“魔力”是什么 2.2.1 文档中直接运行界面
细心的同学一定发现,选择一个界面后,在我们文档的右侧有一个运行按钮。单击该按钮将显示执行操作界面。点击发送后,我们可以看到返回的结果和我们的界面一模一样。返回响应的格式相同。调用正是我们在生成这个接口时选择使用的云mock环境,所以现在显示的数据是mock为我们生成的假数据。
但是,这对于获取文档的开发来说并不是太简单。可以直接在文档上测试当前接口是否满足要求,测试当前环境的接口状态是否正常。
在mock环境中调用的接口也方便前端程序员先开发后端,不会被后端同学卡住。
11
122.2.2 13种语言生成请求示例代码
在文档的中间,我们可以看到一些编程语言的非常明显的图标。它们是干什么用的??
13
作为一个前端程序员,我自然会用javascript来介绍给我的同学。点击 javascript 图标,我们发现下面有一行选项卡提供选择。相信文章之前也是前端程序员的同学们并不陌生。这些是js常用的请求方法,在每个方法的选项卡下选择编辑器。会有代码使用这个方法来调用当前接口。**当我第一次看到这个功能时,我惊呆了。有这么亲密的互动吗?? **

由于程序员的职业病,我们当然要测试生成的代码,他能跑吗?正确的。这里推荐你使用一些在线 IDE 来运行一些代码的方法。例如,流行的 stackblitz
我们把axios的代码复制到ide编辑器中,在线安装axios的库就可以在线运行了。
结果很明显,右边的打印和我们刚才跑的返回一模一样。这真的是牛肉。所以意味着这13种语言都可以生成自己的请求代码,在实际代码中验证当前接口请求的性能。
如果你想在这里测试更多的编程语言,那我就分享一个在线的ide小闪电,可以运行30多种语言。
2.2.3 生成模型代码
这个函数也是我很喜欢的一个函数,生成模型代码。主要是为返回的响应参数生成的模型代码。
比如我选择使用Typescript代码,那么它会自动生成一个带返回参数的typescript类型接口,这对于使用ts开发的前端同学来说是一个福音。不再需要一一复制请求返回的类型。现在可以直接复制粘贴到界面文档中,放入代码中。
当前代码生成模型的操作栏针对每种编程语言都有相应的配置开关。例如,对于 typescript,您可以打开仅生成类型定义,这将删除下面的转换代码。仅保留类型定义。并且还可以对运行时的json.parse的结果进行校验,确保我们返回的结果参数符合条件。
所以需要生成什么类型的模型代码就看同学们配置的需要了。
3. Apifox 在线分享接口文档的详细信息。这里我要说的是,我认为目前的这个接口文档确实是为了程序员的效率和易用性。
3.1.1 接口连接可直接点击复制:
3.1.2 文档整体布局
文档的整体布局是左右结构的,所以当我们的程序员在阅读文档的时候需要做一个试运行的时候,我们可以通过左右检查参数来检查是否有不符合要求的参数,这与顶部的swagger参数和底部的请求不同。需要上下移动,方便性大打折扣。
3.1.3 运行时批量编辑参数
在操作界面中,我们有时会有大量的请求参数,可能需要临时更改才能上厕所。表单中是否逐个更改是一件很痛苦的事情,而Apifox为开发者提供了批量编辑交互。更容易实现他们的目标
四、结尾
使用过 Apifox 后,相信你会或多或少对这款软件的细节和强大的功能印象深刻。因为一个软件工具的使命必须是为用户提供方便,处处简化用户的操作,让工作更有效率,这就是一个好工具的表现。
Apifox 确实有一点要说,它是一个有利于程序员的良心工具。
终极:吐血整理!顶级程序员的百宝箱来咯!| 原力计划
每个人都知道我是一个电子商务企业。在线界面多的在线问题如何排查?捕获数据包并查看数据。
JMeter
Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具
是的,它用于压力测试。如何模拟大量请求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平台使用的软件编程文档管理工具,可以浏览 API 文档,管理代码片段。Dash 自带丰富的 API 文档,涵盖各种主流编程语言和框架。
开发文档
上面的兄弟,不过这个不用下载,是在线的
数据夹
DataGrip 是 JetBrains 推出的数据库管理产品。对于 JetBrains,开发者必须熟悉它。IDEA和ReSharper都是这家公司的产品,用户体验非常好。
一开始,我只是用它来看看我的同事正在使用一个很酷的界面。后来发现功能也很好吃,突出文字等等。你可以挖掘很多功能。
视觉虚拟机
VisualVM 是 Netbeans 的一个配置文件子项目。JDK6.0 update 7已经收录,可以监控线程,内存情况,查看内存中方法和对象的CPU时间,已经被GC的对象,反向查看分配的栈(比如分配了哪些对象)到 100 个字符串对象)。
VisualVM 可以根据需要安装不同的插件。每个插件都有不同的关注点。有的主要监控GC,有的主要监控内存,还有的监控线程。
Iterm2
这是我用于日志故障排除的客户端工具。它还支持许多配置。可以直接ssh到跳板查看在线机器的状态等,还是需要在线排查的。
网*有道词典
有朋友想问帅青是什么情况,是不是有鬼畜混进来?
不,我们在开发它们时不知道很多单词,或者在命名它们时不知道单词的英文。仍然有必要检查它们。标准化的命名是你成为顶级大牛的第一步。你的名字全是A.B,C 当你的代码审核时,你的Leader会打电话给hr让你回家过年,然后再提交。新年来临之际,不要轻易尝试。
崇高的文本
这是一个文本记录的工具,也可以用来写代码,但是如果我们有IDE的话,它可以作为日常琐事记录的工具,临时文档处理的工具也是可以的,而且反正还是很有用的。
最近刚好有人才群里的人才打电话给我安利,给我做笔记和写博客的工具,说我的排版很好看。(我在飘)
安排!

印象笔记
这可以说是陪伴我大学到现在的一个工具。数了几千个文件,记录了生活中的小事,学了编程之后的很多东西。我在收录里面。
我不会和其他笔记比较,因为我一开始使用的那个从来没有被替换过。
泰波拉
Typora 是我一直在为其编写 Markdown 的工具。它易于使用,但也可以切换模式。你相信吗?打字机模式、对焦模式、音源模式总有一款适合你。
ipic
我使用 Typora 的图片床。Markdown复制图片是不是从本地地址进来的,发到外网就失效了。但是,这个基于 Typora 的工具,你复制进去的时候可以直接上传到互联网上。现在,你可以在任何你想要的平台上发布。
Md2All
每个人都很好奇我的降价如何看起来如此美丽。其实我写完markdown后,转成html,就用了上面的工具。
写完就在这里打出来然后发出去。打字花了很长时间,忍不住夸了帅C。
图像处理 Adobe Photoshop CC 2019
ps,众所周知,正常的图片处理啊用这个香味,没事帮美P拍照,说不定还能找个女朋友(又开始YY了)
Adobe Premiere Pro CC 2019
这可能是最常用的视频处理软件了,非常好用!!!
功能太丰富了,喘不过气来。缺点是学习成本有点高,入门很快。成为大神需要很多时间。
Adobe After Effects CC 2019
不知道你看了多少视频。视频的很多特效都是由此制作的。下面还有一个我的演示。
GIPHY 捕获
有时候人们文章不想用静态图片来表达,而是想录制Gif动画来写代码,那么这个软件真的好用。
视频播放 KMPlayer
其实帅C,我心里有一个玩家神器,快点播吧。
可惜没过多久,直播就过早地死掉了。我将使用以下播放软件播放自己的视频。
因为很多电脑自带的格式可能不支持,而且我喜欢剪辑视频,一直在用。

斗图
你有没有注意到我之前的很多 文章 表情实际上是在网上制作的?
碳
帅兵之前的文章里很多代码的图片都是这个网站生成的。有很多款式可供选择,非常漂亮。
代码LF
这个 网站 很有趣。如果你在写代码的时候不知道如何命名这些单词,可以去这里查看一下。他是GitHub的爬虫工具。看到大神之名,总会有想法。
注:我简单介绍一下上面的软件是做什么的,因为实在太多了,真正的功能还需要深挖。
总结
其实更香的工具太多了,这里就不一一介绍了,其实有一个很简单的方法,就是问,学,学。
我就是这样。看到Leader用什么工具,我问他是什么,好用吗?如何使用?
包括我写博客,其实才写了20多天。第一天准备写的时候,直接问三外(Java3y),你用什么开发工具,怎么用,包括他主要发布哪些平台,发布时间段,我会直接问。
他坐在我对面,因为我的猥亵而被迫说出真相,主要是因为最近有需要我为他写代码哈哈。
别人有这么多经验,会不会是软件不好?而且在使用过程中如果不知道,可以问问对方,是不是很香。
潺潺
我们先来看看人才交流群里一位人才提出的问题:
不知道大家还记得我之前写的幂等情况吗?
这就是下图中的情况。当我下单增加或减少 GMV 时,我会先去看看有没有流水。有的话就证明已经加了,我直接回。如果没有,请继续以下过程。
其实他提的问题很好,因为我们日常的开发是主从同步,读写分离,也就是说我们可能会加GMV,但是我们操作主库,他需要同步数据到奴隶图书馆,但是这个他在这个过程中被耽搁了。
这时候如果另一个系统重试订单号消息,你又进来了吗?你查看流水,发现没有流水,却以为自己没有加钱,进行了加钱的操作,结果耽误了。, 是不是加了两次。
正常开发中确实有,但是主从延迟应该是DBA(Database Administrator)考虑的,但是我说不能写有逻辑漏洞的代码,其实很简单,把他放到Redis中,设置一个时间约30分钟,可避免在此期间重复食用。如果延迟超过30分钟,问题已经很大了,DBA会知道的。
本文由吐血整理,大家吃好,记得给个赞哦!
原来的:
【结尾】
来吧,原力计划的升级版来了!2019年末,我们为您准备了一场交通盛宴!即日起,只要参与原力计划,文章达到要求,即可获得流量+现金的支持!
参与方式:发布原创文章时,在提交页面勾选原力计划即可参与。扫码戳详情↓
文章采集api 完美:Datakit,真正的统一可观测性 Agent
采集交流 • 优采云 发表了文章 • 0 个评论 • 147 次浏览 • 2022-10-12 05:25
随着云和云原生的发展,越来越多的客户意识到“数据”的重要性,掀起了一波又一波的数据积累浪潮。
如今,国内外数据量很大采集器,但采集的能力大多是单一的。比如 Telegraf 只支持指标,Filebeat 只服务日志,OpenTelemetry 的 Collector 对非云原生组件不友好。需要大量安装 Exporter 插件。为了实现系统的可观察性,需要使用多个采集器,造成资源的浪费。
Datakit是目前唯一真正整合各种环境(传统环境,云/云原生)数据统一的平台采集,一个进程或者Daemonset Pod就可以实现全方位的数据采集,配置体验不错,开源且可扩展。本文将对Datakit相关功能进行全面介绍。
(DataKit 内部架构)
多维可观测性数据采集
Datakit 支持来自各种基础设施和技术栈的采集 Metrics、Logs、Traces 等数据,并对这些数据进行结构化处理。
1.实时基础设施对象
DataKit 支持从主机、容器、k8s、进程、云产品等所有基础设施对象的实时状态,一气呵成。例如:
(1) Datakit hostobject用于采集基本的主机信息,如硬件型号、基本资源消耗等。
(2)进程采集器可以监控系统中各种正在运行的进程,获取并分析进程运行时的各种指标,包括内存使用率、CPU时间、进程当前状态、进程监控的端口等..,并且根据进程运行时各种指标的信息,用户可以在观察云中配置相关的告警,以便用户了解进程的状态,当进程发生故障时,故障进程可以及时维护。
二、指标
相比Telegraf只能采集系列数据,DataKit涵盖的数据更全面采集类型,拥有海量技术栈指标采集能力,采集器配置更简单,数据质量更好.
3. 日志
针对日志数据的整体可观测性,提供了一种足够灵活多变的信息组合方式。正因为如此,相比指标和追踪,日志有更多的采集和处理方式,以适应不同的采集环境、架构和技术栈的场景。
从磁盘文件中获取日志
这是最原创的日志处理方式。无论是开发者还是传统的日志采集方案,一般都是先将日志直接写入磁盘文件。写入磁盘文件的日志具有以下特点:
(1) 顺序写入:一般的日志框架可以保证日志在磁盘文件中,保持时间的序列性
自动分片:由于磁盘日志文件是物理增量的,为了防止日志炸毁磁盘,一般的日志框架会自动进行分片,或者通过一些外部常驻脚本来实现日志分片
(2) 基于以上特性,DataKit 只需要跟踪这些文件的变化(即采集 最新更新),一旦写入日志,DataKit 就可以采集 到达,其部署也很简单,在日志采集器的conf中填写文件路径(或通配符路径)为采集即可。
通过调用环境API获取日志
这个采集方法目前主要针对容器环境下的stdout日志。这种日志需要容器(或Kubernetes Pod)中运行的应用程序将日志输出到stdout,然后通过Docker的日志接口,将对应的stdout的日志同步到DataKit。
远程推送日志到 DataKit
对于远程日志推送,主要是
(1) 开发者直接将应用日志推送到DataKit指定的服务中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持将日志发送到远程服务。
(2) 第三方平台日志访问
这种形式的特点是日志直接发送到DataKit,不需要把日志放在中间。
Sidecar 形式的日志采集
采集这个方法其实结合了磁盘日志采集和日志远程推送两种方法。具体来说就是在用户的Pod中添加一个兼容DataKit的Sidecar(即logfwd)。应用,采集方法如下:
4.链接跟踪
DataKit目前支持多种广泛使用的trace数据,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要将对应的数据地址指向Datakit即可。
5.终端行为
DataKit支持全面采集前端行为数据,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集网页或移动设备上报的用户访问监控数据。建议将 RUM 单独部署在公网上,不要与现有服务(如 Kubernetes 集群)一起部署。因为RUM接口上的流量可能非常大,集群内部的流量会受到干扰,集群内部一些可能的资源调度机制可能会影响RUM服务的运行。
通常,生产环境中的js文件会经过各种转换和压缩,与开发时的源代码有较大差异,不方便调试。如果需要在源代码中定位错误,则必须使用 sourcemap 文件。
DataKit支持将js对应的sourcemap文件压缩打包,命名为--.zip,上传到/data/rum/,从而实现上报的错误指标集数据自动转换 error_stack_source 字段并将其附加到指标集。
6. 云原生安全
SChecker插件,绝对安全的安全检查器,lua沙箱只读分析,支持300+安全事件发现,用户可以自定义自己的规则文件和lib库。
一般来说,运维过程中一项非常重要的工作就是检查系统、软件、日志等一系列状态。传统的解决方案往往是由工程师编写shell(bash)脚本来执行类似的工作,并使用一些远程脚本来执行类似的任务。管理工具实现集群管理。然而,这种方法实际上是非常危险的。由于系统检查操作中权限过多的问题,经常以root模式运行。一旦恶意脚本被执行,后果将是灾难性的。在实践中,恶意脚本有两种,一种是恶意命令,如rm -rf,另一种是数据窃取,如通过网络IO向外部泄露数据。
因此,Security Checker 希望提供一种新型的安全脚本方法(限制命令执行、限制本地 IO、限制网络 IO)来保证所有行为安全可控,Security Checker 将通过统一的网络模型在日志的形式采集事件。同时,Security Checker 将提供大量可更新的规则库脚本,包括对系统、容器、网络和安全的一系列检查。scheck 是安全检查器的缩写。
7、基于eBPF的网络监控
DataKit eBPF 采集器 支持采集主机/进程/容器的网络层 4/7 性能和异常数据。
eBPF采集器、采集主机网络TCP、UDP连接信息、Bash执行日志等。这个采集器主要包括两种:ebpf-net和ebpf-bash:
ebpf 网:
数据类别:网络
完整的解决方案:面向开源软件的自动化漏洞数据采集与处理技术研究
漏洞数据分散在数百个资源中,数据碎片化、无格式,导致采集不便、处理复杂。然而,人工构建的漏洞数据集样本类型简单、特征单一,难以支撑真实软件漏洞检测的研究。因此,软件安全领域缺乏大规模、真实、有效的漏洞数据集。针对这一问题,本文提出了一种开源软件漏洞数据自动化采集及处理系统,能够自动实现来自多源平台的采集补丁文件,进行冗余处理和一致性处理。得到一个缩减的数据集,进一步生成大量的漏洞样本。与现有研究相比,本文构建的系统可以采集更多源平台的漏洞数据,漏洞数据更丰富,样本质量更高。通过深度学习漏洞检测实验证明,本文在数据集上训练的模型在实际软件漏洞检测中更为有效。
该成果已在实验室github组织下开源,相关内容请访问。
背景和动机
在软件安全领域,漏洞检测技术是一个具有挑战性的问题。为了减少人工参与,提高漏洞的检测规模和检测速度,基于深度学习的漏洞检测模型应运而生。然而,漏洞检测领域缺乏大规模的、真实的漏洞数据集。一方面,目前公开的人工构建的数据集,如SARD数据集,只能作为学术研究的对象,对真实漏洞的研究辅助相对有限。漏洞检测不是很有效。另一方面,漏洞数据分散在数百个资源上,没有统一的访问渠道,而且这些数据是碎片化的、无格式的,这给数据采集和处理带来了挑战。此外,不同来源的漏洞数据质量参差不齐,其中一些是安全缺陷,不一定是漏洞补丁。传统的采集方法依赖安全专家通过人工分析进行过滤,耗时耗力、效率低、成本高。为了解决这些问题,本文构建了漏洞数据自动化采集处理系统,旨在总结漏洞数据的分布规律和内容特征,突破漏洞数据准确提取等关键点。自动过滤漏洞补丁链接。技术,解决自动化问题采集和多源漏洞补丁采集 大数据环境下海量异构的漏洞信息,从而实现构建大规模、高质量的漏洞数据集,为深度学习漏洞检测提供有效的训练数据,提高模型检测精度。设计与实现如图1所示。系统主要有三个模块: 1)Data采集模块,输入为美国国家漏洞数据库NVD和一般漏洞,输出为漏洞信息和补丁文件;2)数据处理模块,输入为多源采集的补丁文件,输出为处理后的简化补丁库;3)数据生成模块,输入为补丁库和上一步输出的开源项目的源代码,
图 1 系统架构图
在data采集模块中,我们对权威漏洞库NVD的数据进行解析提取,得到结构化的漏洞属性信息。进一步系统分析研究主流开源软件的漏洞参考链接,找出存在漏洞的平台链接,获取不同安全发布平台的漏洞补丁文件,从而获取漏洞样本,为深度学习漏洞检测提供数据支持研究。. 我们提出了一种基于多源补丁的数据自动化采集 模型,通过三种方法自动化采集补丁。首先是从补丁的安全漏洞公告平台获取补丁,软件厂商自己的漏洞公告平台,和代码管理仓库。在对数百个补丁发布平台进行系统分析总结后,总结出20多种补丁自动化。采集网站,如图2。二是通过“CVE”过滤GitHub的历史修改Commits " 关键词,查找CVE的修改记录,自动过滤历史修改。三是在bug追踪平台Bugzilla的NVD Reference中搜索与CVE匹配的bugid,得到对应的bug修复文件或补丁。
图2 补丁源平台
在数据处理模块中,我们系统地分析了多源补丁的结构和格式,总结了标准的补丁文件结构和内容信息,并对通过多种采集方法得到的补丁文件进行了合并和去冗余。相同软件版本冗余如图3,不同版本软件冗余如图4。我们提出了一套基于多种信息的补丁有效性评估机制,并结合提取的漏洞文件名,函数名和补丁源平台,判断补丁文件和漏洞的相关性。如果补丁是直接针对漏洞功能的补丁,则认为是最准确的类型1;如果补丁是针对漏洞文件的补丁,它被认为是下一个准确的类型2;如果补丁无法判断是打漏洞函数还是漏洞文件,则可以判断补丁是针对CVE的,则为Type 3;如果不能通过现有信息直接判断,需要进一步人工处理,则暂按第4类处理。
图 3 相同软件版本的补丁冗余
图 4 不同软件版本的补丁冗余
在数据生成模块中,我们将补丁文件与代码库进行匹配,以获取函数级别和文件级别的细粒度漏洞样本。由于源代码漏洞数据集均为线性文本形式,无法反映代码程序的控制依赖信息和层次结构信息,缺乏程序语义与漏洞特征的关系,难以获得准确的语法结构信息通过进一步分析。具有更多语义信息的中间语言形式的漏洞数据可以提供更全面、更直接的代码表示,提高漏洞检测模型的检测能力和准确性。本模块搭建各版本主流软件的编译环境,查找编译漏洞文件所需的头文件、库文件等依赖项,并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。
表 1 数据集统计
采用基于深度学习的漏洞检测框架 SySeVR() 训练最有效的模型 BGRU。实验一是原创数据集在真实漏洞数据NVD上的检测结果。原创数据集有14000个SARD程序和1591个NVD程序,包括13906个SADR易受攻击程序(包括易受攻击的函数和修补函数),94个非易受攻击程序,874个NVD易受攻击程序,717个无bug程序。实验2使用一个新的数据集,使用原创数据集中来自SARD的数据集,将部分NVD数据集替换为本文构建的6847个易受攻击程序和6573个非易受攻击程序,并在真实数据集上进行测试软件漏洞数据集 NVD。测试结果如表2所示。
表2 漏洞检测实验结果对比
可以看出,用系统构建的数据集训练的模型在真实数据集的漏洞检测方面表现更好。这体现在假阴性率和假阳性率的降低,以及准确率、准确率和召回率的提高上。这是因为在模型训练中加入了大量真实的软件漏洞数据,提供了丰富的漏洞样本,使得模型可以用于漏洞特征进行更全面的学习。 查看全部
文章采集api 完美:Datakit,真正的统一可观测性 Agent
随着云和云原生的发展,越来越多的客户意识到“数据”的重要性,掀起了一波又一波的数据积累浪潮。
如今,国内外数据量很大采集器,但采集的能力大多是单一的。比如 Telegraf 只支持指标,Filebeat 只服务日志,OpenTelemetry 的 Collector 对非云原生组件不友好。需要大量安装 Exporter 插件。为了实现系统的可观察性,需要使用多个采集器,造成资源的浪费。
Datakit是目前唯一真正整合各种环境(传统环境,云/云原生)数据统一的平台采集,一个进程或者Daemonset Pod就可以实现全方位的数据采集,配置体验不错,开源且可扩展。本文将对Datakit相关功能进行全面介绍。
(DataKit 内部架构)
多维可观测性数据采集
Datakit 支持来自各种基础设施和技术栈的采集 Metrics、Logs、Traces 等数据,并对这些数据进行结构化处理。
1.实时基础设施对象
DataKit 支持从主机、容器、k8s、进程、云产品等所有基础设施对象的实时状态,一气呵成。例如:
(1) Datakit hostobject用于采集基本的主机信息,如硬件型号、基本资源消耗等。
(2)进程采集器可以监控系统中各种正在运行的进程,获取并分析进程运行时的各种指标,包括内存使用率、CPU时间、进程当前状态、进程监控的端口等..,并且根据进程运行时各种指标的信息,用户可以在观察云中配置相关的告警,以便用户了解进程的状态,当进程发生故障时,故障进程可以及时维护。
二、指标
相比Telegraf只能采集系列数据,DataKit涵盖的数据更全面采集类型,拥有海量技术栈指标采集能力,采集器配置更简单,数据质量更好.
3. 日志
针对日志数据的整体可观测性,提供了一种足够灵活多变的信息组合方式。正因为如此,相比指标和追踪,日志有更多的采集和处理方式,以适应不同的采集环境、架构和技术栈的场景。
从磁盘文件中获取日志

这是最原创的日志处理方式。无论是开发者还是传统的日志采集方案,一般都是先将日志直接写入磁盘文件。写入磁盘文件的日志具有以下特点:
(1) 顺序写入:一般的日志框架可以保证日志在磁盘文件中,保持时间的序列性
自动分片:由于磁盘日志文件是物理增量的,为了防止日志炸毁磁盘,一般的日志框架会自动进行分片,或者通过一些外部常驻脚本来实现日志分片
(2) 基于以上特性,DataKit 只需要跟踪这些文件的变化(即采集 最新更新),一旦写入日志,DataKit 就可以采集 到达,其部署也很简单,在日志采集器的conf中填写文件路径(或通配符路径)为采集即可。
通过调用环境API获取日志
这个采集方法目前主要针对容器环境下的stdout日志。这种日志需要容器(或Kubernetes Pod)中运行的应用程序将日志输出到stdout,然后通过Docker的日志接口,将对应的stdout的日志同步到DataKit。
远程推送日志到 DataKit
对于远程日志推送,主要是
(1) 开发者直接将应用日志推送到DataKit指定的服务中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持将日志发送到远程服务。
(2) 第三方平台日志访问
这种形式的特点是日志直接发送到DataKit,不需要把日志放在中间。
Sidecar 形式的日志采集
采集这个方法其实结合了磁盘日志采集和日志远程推送两种方法。具体来说就是在用户的Pod中添加一个兼容DataKit的Sidecar(即logfwd)。应用,采集方法如下:

4.链接跟踪
DataKit目前支持多种广泛使用的trace数据,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要将对应的数据地址指向Datakit即可。
5.终端行为
DataKit支持全面采集前端行为数据,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集网页或移动设备上报的用户访问监控数据。建议将 RUM 单独部署在公网上,不要与现有服务(如 Kubernetes 集群)一起部署。因为RUM接口上的流量可能非常大,集群内部的流量会受到干扰,集群内部一些可能的资源调度机制可能会影响RUM服务的运行。
通常,生产环境中的js文件会经过各种转换和压缩,与开发时的源代码有较大差异,不方便调试。如果需要在源代码中定位错误,则必须使用 sourcemap 文件。
DataKit支持将js对应的sourcemap文件压缩打包,命名为--.zip,上传到/data/rum/,从而实现上报的错误指标集数据自动转换 error_stack_source 字段并将其附加到指标集。
6. 云原生安全
SChecker插件,绝对安全的安全检查器,lua沙箱只读分析,支持300+安全事件发现,用户可以自定义自己的规则文件和lib库。
一般来说,运维过程中一项非常重要的工作就是检查系统、软件、日志等一系列状态。传统的解决方案往往是由工程师编写shell(bash)脚本来执行类似的工作,并使用一些远程脚本来执行类似的任务。管理工具实现集群管理。然而,这种方法实际上是非常危险的。由于系统检查操作中权限过多的问题,经常以root模式运行。一旦恶意脚本被执行,后果将是灾难性的。在实践中,恶意脚本有两种,一种是恶意命令,如rm -rf,另一种是数据窃取,如通过网络IO向外部泄露数据。
因此,Security Checker 希望提供一种新型的安全脚本方法(限制命令执行、限制本地 IO、限制网络 IO)来保证所有行为安全可控,Security Checker 将通过统一的网络模型在日志的形式采集事件。同时,Security Checker 将提供大量可更新的规则库脚本,包括对系统、容器、网络和安全的一系列检查。scheck 是安全检查器的缩写。
7、基于eBPF的网络监控
DataKit eBPF 采集器 支持采集主机/进程/容器的网络层 4/7 性能和异常数据。
eBPF采集器、采集主机网络TCP、UDP连接信息、Bash执行日志等。这个采集器主要包括两种:ebpf-net和ebpf-bash:
ebpf 网:
数据类别:网络
完整的解决方案:面向开源软件的自动化漏洞数据采集与处理技术研究
漏洞数据分散在数百个资源中,数据碎片化、无格式,导致采集不便、处理复杂。然而,人工构建的漏洞数据集样本类型简单、特征单一,难以支撑真实软件漏洞检测的研究。因此,软件安全领域缺乏大规模、真实、有效的漏洞数据集。针对这一问题,本文提出了一种开源软件漏洞数据自动化采集及处理系统,能够自动实现来自多源平台的采集补丁文件,进行冗余处理和一致性处理。得到一个缩减的数据集,进一步生成大量的漏洞样本。与现有研究相比,本文构建的系统可以采集更多源平台的漏洞数据,漏洞数据更丰富,样本质量更高。通过深度学习漏洞检测实验证明,本文在数据集上训练的模型在实际软件漏洞检测中更为有效。
该成果已在实验室github组织下开源,相关内容请访问。
背景和动机
在软件安全领域,漏洞检测技术是一个具有挑战性的问题。为了减少人工参与,提高漏洞的检测规模和检测速度,基于深度学习的漏洞检测模型应运而生。然而,漏洞检测领域缺乏大规模的、真实的漏洞数据集。一方面,目前公开的人工构建的数据集,如SARD数据集,只能作为学术研究的对象,对真实漏洞的研究辅助相对有限。漏洞检测不是很有效。另一方面,漏洞数据分散在数百个资源上,没有统一的访问渠道,而且这些数据是碎片化的、无格式的,这给数据采集和处理带来了挑战。此外,不同来源的漏洞数据质量参差不齐,其中一些是安全缺陷,不一定是漏洞补丁。传统的采集方法依赖安全专家通过人工分析进行过滤,耗时耗力、效率低、成本高。为了解决这些问题,本文构建了漏洞数据自动化采集处理系统,旨在总结漏洞数据的分布规律和内容特征,突破漏洞数据准确提取等关键点。自动过滤漏洞补丁链接。技术,解决自动化问题采集和多源漏洞补丁采集 大数据环境下海量异构的漏洞信息,从而实现构建大规模、高质量的漏洞数据集,为深度学习漏洞检测提供有效的训练数据,提高模型检测精度。设计与实现如图1所示。系统主要有三个模块: 1)Data采集模块,输入为美国国家漏洞数据库NVD和一般漏洞,输出为漏洞信息和补丁文件;2)数据处理模块,输入为多源采集的补丁文件,输出为处理后的简化补丁库;3)数据生成模块,输入为补丁库和上一步输出的开源项目的源代码,
图 1 系统架构图
在data采集模块中,我们对权威漏洞库NVD的数据进行解析提取,得到结构化的漏洞属性信息。进一步系统分析研究主流开源软件的漏洞参考链接,找出存在漏洞的平台链接,获取不同安全发布平台的漏洞补丁文件,从而获取漏洞样本,为深度学习漏洞检测提供数据支持研究。. 我们提出了一种基于多源补丁的数据自动化采集 模型,通过三种方法自动化采集补丁。首先是从补丁的安全漏洞公告平台获取补丁,软件厂商自己的漏洞公告平台,和代码管理仓库。在对数百个补丁发布平台进行系统分析总结后,总结出20多种补丁自动化。采集网站,如图2。二是通过“CVE”过滤GitHub的历史修改Commits " 关键词,查找CVE的修改记录,自动过滤历史修改。三是在bug追踪平台Bugzilla的NVD Reference中搜索与CVE匹配的bugid,得到对应的bug修复文件或补丁。

图2 补丁源平台
在数据处理模块中,我们系统地分析了多源补丁的结构和格式,总结了标准的补丁文件结构和内容信息,并对通过多种采集方法得到的补丁文件进行了合并和去冗余。相同软件版本冗余如图3,不同版本软件冗余如图4。我们提出了一套基于多种信息的补丁有效性评估机制,并结合提取的漏洞文件名,函数名和补丁源平台,判断补丁文件和漏洞的相关性。如果补丁是直接针对漏洞功能的补丁,则认为是最准确的类型1;如果补丁是针对漏洞文件的补丁,它被认为是下一个准确的类型2;如果补丁无法判断是打漏洞函数还是漏洞文件,则可以判断补丁是针对CVE的,则为Type 3;如果不能通过现有信息直接判断,需要进一步人工处理,则暂按第4类处理。
图 3 相同软件版本的补丁冗余
图 4 不同软件版本的补丁冗余

在数据生成模块中,我们将补丁文件与代码库进行匹配,以获取函数级别和文件级别的细粒度漏洞样本。由于源代码漏洞数据集均为线性文本形式,无法反映代码程序的控制依赖信息和层次结构信息,缺乏程序语义与漏洞特征的关系,难以获得准确的语法结构信息通过进一步分析。具有更多语义信息的中间语言形式的漏洞数据可以提供更全面、更直接的代码表示,提高漏洞检测模型的检测能力和准确性。本模块搭建各版本主流软件的编译环境,查找编译漏洞文件所需的头文件、库文件等依赖项,并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。并使用编译器以中间语言的形式生成漏洞样本。目前已经对19个开源软件进行了数据采集和处理,得到了有效的细粒度漏洞样本库。补丁库涵盖 4643 个 CVE,收录 8685 个补丁文件。漏洞样本库有6847个漏洞文件样本、6573个无漏洞文件样本、10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。847个漏洞文件样本,6573个无漏洞文件样本,10412个漏洞函数/非漏洞函数程序样本。统计结果见表1。
表 1 数据集统计
采用基于深度学习的漏洞检测框架 SySeVR() 训练最有效的模型 BGRU。实验一是原创数据集在真实漏洞数据NVD上的检测结果。原创数据集有14000个SARD程序和1591个NVD程序,包括13906个SADR易受攻击程序(包括易受攻击的函数和修补函数),94个非易受攻击程序,874个NVD易受攻击程序,717个无bug程序。实验2使用一个新的数据集,使用原创数据集中来自SARD的数据集,将部分NVD数据集替换为本文构建的6847个易受攻击程序和6573个非易受攻击程序,并在真实数据集上进行测试软件漏洞数据集 NVD。测试结果如表2所示。
表2 漏洞检测实验结果对比
可以看出,用系统构建的数据集训练的模型在真实数据集的漏洞检测方面表现更好。这体现在假阴性率和假阳性率的降低,以及准确率、准确率和召回率的提高上。这是因为在模型训练中加入了大量真实的软件漏洞数据,提供了丰富的漏洞样本,使得模型可以用于漏洞特征进行更全面的学习。
实用文章:【php 带cookie采集某页面】的更多相关文章
采集交流 • 优采云 发表了文章 • 0 个评论 • 93 次浏览 • 2022-10-11 21:20
如果在基于 vue 的 webpack 基架开发中使用代理转发,结果浏览器在没有 cookie 的情况下发出请求,导致登录始终使会话失败,该怎么办?
环境:有2个业务接口需要转发到82台服务器:/用户/getCode.do.do./user/doLogin.do现象:使用以上两个接口实现用户登录功能,首先显示登录页面,调用:/user/getCode.do获取验证码,然后在用户界面中输入用户名。点击登录后调用密码和验证码: /用户/do登录接口实现登录.结果: /用户/do登录后台始终找不到验证码,因为浏览器没有将 JSE 放入 cookie 中...
教程:python爬虫之 requests实战之网页采集器
今天继续我们的爬虫学习,采集器学习一个请求实用的网页:以搜狗主页为例
代码的设计步骤:
我们遵循以下设计过程来开发Web采集器:
(1) UA伪装:将相应的用户代理封装到字典中
在这里,添加了一些知识:
UA:用户代理(请求运营商的身份)
)。
UA检测:服务器网站门户检测到相应请求载体的身份,如果是浏览器,则为正常请求,否则很可能拒绝请求
UA伪装:使爬虫的请求向量身份伪装成某个浏览器
(2) 发起请求,get 模式返回响应对象
(3)获取响应数据,文本以字符串的形式返回响应数据
(4) 数据的持久存储
下面,附加“我的代码”部分:
import requests
'''
网页采集器
UA:User-Agent(请求载体的身份标识)
UA检测:门户网站的服务器会检测对应请求载体的身份标识,如果是浏览器则说明是一个正常请求,否则很有可能拒绝该请求
UA伪装:让爬虫对应的请求载体身份标识伪装成某一个浏览器
'''
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典内
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.sogou.com/web'
# 2.发起请求,get方式会返回一个响应对象
#处理url携带的参数:封装到字典内
kw = input('enter a word:')
param = {
'query':kw
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
# 3.获取响应数据,text返回的是字符串形式的响应数据
page_text = response.text
fileName = kw+'.html'
# 4.持久化存储
<p>
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,"保存成功!!!")</p>
运行python代码,我输入“华庄品”,然后生成华庄品.html文件
华庄品文件.html详细代码为:
化妆品生产许可信息管理系统服务平台
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部许可证】【业务办理】
许可证编号
企业名称
社会信用代码
所属省份
生产类别
<p>
发证日期
企业名称
许可证编号
发证机关 有效期至
本站由国家药品监督管理局主办
版权所有 未经许可禁止转载或建立镜像 Copyright © NMPA All Rights Reserved
</p> 查看全部
实用文章:【php 带cookie采集某页面】的更多相关文章

如果在基于 vue 的 webpack 基架开发中使用代理转发,结果浏览器在没有 cookie 的情况下发出请求,导致登录始终使会话失败,该怎么办?

环境:有2个业务接口需要转发到82台服务器:/用户/getCode.do.do./user/doLogin.do现象:使用以上两个接口实现用户登录功能,首先显示登录页面,调用:/user/getCode.do获取验证码,然后在用户界面中输入用户名。点击登录后调用密码和验证码: /用户/do登录接口实现登录.结果: /用户/do登录后台始终找不到验证码,因为浏览器没有将 JSE 放入 cookie 中...
教程:python爬虫之 requests实战之网页采集器
今天继续我们的爬虫学习,采集器学习一个请求实用的网页:以搜狗主页为例
代码的设计步骤:
我们遵循以下设计过程来开发Web采集器:
(1) UA伪装:将相应的用户代理封装到字典中
在这里,添加了一些知识:
UA:用户代理(请求运营商的身份)
)。
UA检测:服务器网站门户检测到相应请求载体的身份,如果是浏览器,则为正常请求,否则很可能拒绝请求
UA伪装:使爬虫的请求向量身份伪装成某个浏览器
(2) 发起请求,get 模式返回响应对象
(3)获取响应数据,文本以字符串的形式返回响应数据
(4) 数据的持久存储
下面,附加“我的代码”部分:
import requests
'''
网页采集器
UA:User-Agent(请求载体的身份标识)
UA检测:门户网站的服务器会检测对应请求载体的身份标识,如果是浏览器则说明是一个正常请求,否则很有可能拒绝该请求
UA伪装:让爬虫对应的请求载体身份标识伪装成某一个浏览器
'''
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典内
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = 'https://www.sogou.com/web'
# 2.发起请求,get方式会返回一个响应对象
#处理url携带的参数:封装到字典内
kw = input('enter a word:')
param = {
'query':kw
}
#对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
# 3.获取响应数据,text返回的是字符串形式的响应数据
page_text = response.text
fileName = kw+'.html'
# 4.持久化存储
<p>

with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,"保存成功!!!")</p>
运行python代码,我输入“华庄品”,然后生成华庄品.html文件
华庄品文件.html详细代码为:
化妆品生产许可信息管理系统服务平台
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部许可证】【业务办理】
许可证编号
企业名称
社会信用代码
所属省份
生产类别
<p>

发证日期
企业名称
许可证编号
发证机关 有效期至
本站由国家药品监督管理局主办
版权所有 未经许可禁止转载或建立镜像 Copyright © NMPA All Rights Reserved
</p>
干货:wordpress子比主题免费文章批量翻译工具
采集交流 • 优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-10-10 18:23
wordpress子主题文章翻译可以让我们批量对需要翻译的文章进行中英文翻译,一键自动发布到我们对应的栏目。翻译不仅支持中英文,还支持日文、泰文、阿拉伯文、德文等多种语言。翻译插件对接百度翻译、有道翻译、谷歌翻译等API。
wordpress子主题文章翻译插件对接多家大厂翻译接口,自带翻译接口。无论是文章批量翻译还是语言之间的来回翻译,都可以一键点击,批量操作。WordPress子主题文章翻译插件支持各类cms,不仅WordPress、zblog、易友cms等各类cms都可以轻松对接。
WordPress子主题文章翻译插件支持全网内容采集、批量翻译、文章伪原创发布。想象一下使用一个wordpress子主题文章翻译插件,导入一个关键词列表,然后让AI翻译写出我们网站需要的原创文章。
搜索引擎正在识别由人工智能翻译编写的内容。这包括由人工智能或机器学习生成的内容。搜索引擎政策更新是为了打击那些使用人工智能以欺骗搜索引擎算法的方式翻译书面内容的人。这种类型的内容通常被设计为在搜索结果中排名靠前,但与手工翻译的内容质量不同。
搜索引擎表示,在确定内容是合成的还是操纵的时,它会考虑许多因素。这包括使用“旋转”技术生成相同内容的多个版本,以及使用人工智能生成旨在欺骗搜索引擎算法的文本。可能会对发现发布此类内容的 网站 采取行动,包括从搜索结果中删除。这是打击那些使用人工智能玩系统的人的重要一步。
毫无疑问,人工智能 (AI) 正在彻底改变内容写作领域。然而,人工智能书面内容的使用增加也可能产生潜在的问题。一个潜在的问题是,由 AI 翻译人员编写的内容可能会变得过于公式化和重复。随着人工智能算法变得越来越复杂,它们将能够更有效地识别数据中的模式。随着算法识别和复制成功的模式,这可能导致由人工智能翻译编写的内容变得越来越公式化。另一个潜在问题是 AI 翻译人员编写的内容可能是非个人的。
随着 AI 越来越多地参与到内容翻译写作过程中,WordPress 字幕可能会失去人类翻译写作的温暖和个性。最后,人工智能翻译的内容有可能被用来操纵公众舆论。随着人工智能在理解和复制人类情感方面变得更好,它可以用来翻译为引发某种情感反应而编写的内容。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,WordPress 子主题越来越多地使用人工智能来翻译可能会产生潜在问题的内容。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。
技术文章:谷歌seo特点技巧(网站google搜索优化)
如何优化谷歌排名?谷歌排名优化有哪些网站要求?
中国是外贸出口大国。最近有很多出口企业问我们对谷歌排名优化有什么要求?什么是谷歌排名优化?哪个品牌最适合谷歌排名优化?下面小编将为您解答这个问题:
疫情影响下,外贸企业迎难而上,求创新求变,数千家传统外贸企业伸出援手,提质增效。在客户开发和营销方面,外贸企业利用大数据精准营销工具、B2B平台、线上展会等方式,开发、推广、引流客户,加速数字化转型。
优易华拥有超过15年的互联网营销经验,让优易华拥有丰富的海外数字营销经验,积累了大量的营销资源。该公司是谷歌认证的合作伙伴,谷歌搜索引擎优化是主要项目之一。
谷歌排名优化说明及详情:
1、谷歌排名优化的最大优势是没有各个引擎的独立性。即使你只要求优化百度,结果在百度、谷歌等各大搜索引擎中都会有不错的排名,而SEO只能在一个搜索引擎中使用。好的排名显示在网站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都会有好的排名,从而减少投入和投入。
2. 对于每个类别,列出相关的 文章。下面我们用问答的方式来说明什么是谷歌排名优化?如何学习谷歌排名优化?如何进行谷歌排名优化?将每一页的相关问题归纳为两类:问题大师关键词的集合列表,以及类似问题的列表。从根本上说,它清理了所有相关的关键词,让页面有更好的用户体验,让谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方显示类似的文章,有利于谷歌排名优化和推广,可以打开。另外,文章发布后,相关的关键词也可以补充评论功能。与谷歌不同,百度的排名规则以PR值作为明确的标准。但是百度也有一套算法对每个网站进行加权,因为没有标准,就没有排名的依据。这个事实是非常真实的。因此,在SEO实践中,网站获得更高的PR值,是每个SEO人追求的目标。但是要获得高PR值,需要一些高质量的反向链接或者足够多的反向链接。
4、提高网站的曝光度。如果一个网站做SEO,你在搜索引擎中的排名就会上升,更多的人会点击你的网站。而且你会受益于不止一个搜索引擎,百度、谷歌、雅虎、搜狗等各种搜索引擎一般都有数据展示。作为一名员工,编写观众喜欢的内容并不难。加入谷歌也是考虑这些因素的时候。一开始可能会很麻烦,但有了这些 SEO 技巧,你很快就会得到意想不到的结果。
如何优化谷歌排名
一:隐藏文字/隐藏链接
一般指网页专为搜索引擎设计,但普通访问者看不到的文字内容或链接。在各种隐藏技术中,最常见的是将文本或链接文本的字体颜色设置为与背景颜色相同或非常接近。
不可见/隐藏文本
目的是在不影响网站美观的情况下,增加收录大量关键词的页面的关键词相关性分数,从而提高搜索引擎排名。
不可见/隐藏链接
它旨在通过在不影响 网站 的美观性的情况下在其他页面上添加指向目标优化页面的不可见链接来提高链接分数,从而提高搜索引擎排名。
大多数搜索引擎现在检测到隐藏的技术并认为它们作弊。结果,收录隐藏文本的网页面临被搜索引擎降级甚至从列表中删除的惩罚。虽然不乏 网站 Google 员工利用隐形技术侥幸成功,但大多数人仍然认为不值得冒险。实际上,通过添加可视化文本内容并保证一定的关键词密度,也可以达到同样的优化效果。
2:页面与谷歌描述不符
通常发生在一个网站被提交给搜索引擎,而网站在网站为收录之后被另一个页面替换。“诱饵-&-切换”就属于这种作弊——创建优化页面和普通页面,然后将优化页面提交给搜索引擎,当优化页面被搜索引擎收录替换它与普通页面。
三:误导或重复关键词
误导关键词(误导性词语)
在与页面无关的页面中使用误导性的 关键词 来吸引访问者网站 访问该主题。显然,这些所谓的 关键词 与这个页面无关。这种做法严重影响了搜索引擎提供的结果的相关性和客观性,被搜索引擎所憎恶。
重复 关键词(重复的单词)
这种作弊技术也称为“关键词Keyword Stuffing”,利用搜索引擎对关键词出现在网页正文和标题中的高度关注,进行关键词不合理(过度)重复。其他类似的做法包括在 HTML 元标记中填充关键字或使用多个关键字元标记来增加 关键词 的相关性。这种技术很容易被搜索引擎检测到并受到相应的惩罚。
四:隐形页面
对实际访问者或搜索引擎的任何一方隐藏真实的 网站 内容,以便向搜索引擎提供非真实的 SEO 友好内容以提高排名。
五:欺骗性重定向
指快速将用户访问的第一页(着陆页)重定向到内容完全不同的页面。
《影子领域》
这是最常见的欺骗性重定向技术,欺骗性地将用户重定向到另一个 网站 或页面。一般是通过使用HTML刷新标记(Meta Refresh)来实现的。大多数搜索引擎不会索引使用此徽标的页面。如果您使用刷新标志来检测浏览器或分辨率,则使用 Javascript 并最大化重定向时间。如果必须使用重定向功能,请确保刷新周期不少于 10 秒。
另一种情况是当用户打开一个网站时,网站声称自己的网站已经移到了一个新的域名,并要求用户点击新的域名链接输入 网站。但是当用户进去的时候,他发现这个链接是一个“附属”链接。这也是一个欺骗性的重定向。
六:门口页
也称为“桥接/门户/跳转/入口页面”。它是针对某些关键字的特制页面,专门为搜索引擎设计的,目的是提高特定关键词在搜索引擎中的排名。目的丰富的关键词域名被重定向到另一个域名的真实网站。搜索引擎蜘蛛倾向于忽略自动重定向到其他页面的页面。
七:复制的网站或网页
最常见的是镜像站点(Mirror Sites)。通过复制 网站 或页面的内容并分配不同的域名和服务器,它可以欺骗搜索引擎多次索引同一站点或同一页面。大多数搜索引擎现在提供能够检测镜像站点的适当过滤系统。找到镜像站点后,源站点和镜像站点都会从索引数据库中删除。
八:作弊链接技术/恶意链接(Link Spamming)
典型的作弊链接技术包括:
链接农场
批量链接交换程序
交叉链接
“链接工厂”(也称为“海量链接机制”)是指由大量交叉链接的网页组成的网络系统。这些网页可能来自同一个域或多个不同的域,甚至来自不同的服务器。站点加入这样的“链接工厂”后,一方面可以从系统中的所有网页获取链接,同时还需要“捐赠”自己的链接作为交换,从而提高通过这种方法进行链接评分,从而达到干预链接评分。的目标。它们现在很容易被搜索引擎发现。一经发现,无论有意还是无意,“链接工厂”中的所有网站都是千丝万缕的链接。
九:其他
日志作弊
具有较高页面排名的网站通过对其进行大量虚假点击来获取其传入链接,以便在这些网站的顶级引荐来源日志中列出。Google 知道这种行为,并将对使用此路由获取传入链接的网站采取适当的措施。
门口域
目标丰富的关键词 域旨在提高特定关键词 在搜索引擎中的排名,然后重定向到其他域的主页。由于搜索引擎通常会忽略自动重定向到其他页面的页面检索,因此不鼓励使用这种技术。 查看全部
干货:wordpress子比主题免费文章批量翻译工具
wordpress子主题文章翻译可以让我们批量对需要翻译的文章进行中英文翻译,一键自动发布到我们对应的栏目。翻译不仅支持中英文,还支持日文、泰文、阿拉伯文、德文等多种语言。翻译插件对接百度翻译、有道翻译、谷歌翻译等API。
wordpress子主题文章翻译插件对接多家大厂翻译接口,自带翻译接口。无论是文章批量翻译还是语言之间的来回翻译,都可以一键点击,批量操作。WordPress子主题文章翻译插件支持各类cms,不仅WordPress、zblog、易友cms等各类cms都可以轻松对接。
WordPress子主题文章翻译插件支持全网内容采集、批量翻译、文章伪原创发布。想象一下使用一个wordpress子主题文章翻译插件,导入一个关键词列表,然后让AI翻译写出我们网站需要的原创文章。

搜索引擎正在识别由人工智能翻译编写的内容。这包括由人工智能或机器学习生成的内容。搜索引擎政策更新是为了打击那些使用人工智能以欺骗搜索引擎算法的方式翻译书面内容的人。这种类型的内容通常被设计为在搜索结果中排名靠前,但与手工翻译的内容质量不同。
搜索引擎表示,在确定内容是合成的还是操纵的时,它会考虑许多因素。这包括使用“旋转”技术生成相同内容的多个版本,以及使用人工智能生成旨在欺骗搜索引擎算法的文本。可能会对发现发布此类内容的 网站 采取行动,包括从搜索结果中删除。这是打击那些使用人工智能玩系统的人的重要一步。
毫无疑问,人工智能 (AI) 正在彻底改变内容写作领域。然而,人工智能书面内容的使用增加也可能产生潜在的问题。一个潜在的问题是,由 AI 翻译人员编写的内容可能会变得过于公式化和重复。随着人工智能算法变得越来越复杂,它们将能够更有效地识别数据中的模式。随着算法识别和复制成功的模式,这可能导致由人工智能翻译编写的内容变得越来越公式化。另一个潜在问题是 AI 翻译人员编写的内容可能是非个人的。

随着 AI 越来越多地参与到内容翻译写作过程中,WordPress 字幕可能会失去人类翻译写作的温暖和个性。最后,人工智能翻译的内容有可能被用来操纵公众舆论。随着人工智能在理解和复制人类情感方面变得更好,它可以用来翻译为引发某种情感反应而编写的内容。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。
总体而言,WordPress 子主题越来越多地使用人工智能来翻译可能会产生潜在问题的内容。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。这可能被用来大规模操纵公众舆论,并带来潜在的危险后果。总体而言,越来越多地使用人工智能来翻译书面内容可能会产生潜在的问题。然而,同样重要的是要记住,人工智能有可能彻底改变内容写作领域,而且好处可能大于风险。
技术文章:谷歌seo特点技巧(网站google搜索优化)
如何优化谷歌排名?谷歌排名优化有哪些网站要求?
中国是外贸出口大国。最近有很多出口企业问我们对谷歌排名优化有什么要求?什么是谷歌排名优化?哪个品牌最适合谷歌排名优化?下面小编将为您解答这个问题:
疫情影响下,外贸企业迎难而上,求创新求变,数千家传统外贸企业伸出援手,提质增效。在客户开发和营销方面,外贸企业利用大数据精准营销工具、B2B平台、线上展会等方式,开发、推广、引流客户,加速数字化转型。
优易华拥有超过15年的互联网营销经验,让优易华拥有丰富的海外数字营销经验,积累了大量的营销资源。该公司是谷歌认证的合作伙伴,谷歌搜索引擎优化是主要项目之一。
谷歌排名优化说明及详情:
1、谷歌排名优化的最大优势是没有各个引擎的独立性。即使你只要求优化百度,结果在百度、谷歌等各大搜索引擎中都会有不错的排名,而SEO只能在一个搜索引擎中使用。好的排名显示在网站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都会有好的排名,从而减少投入和投入。
2. 对于每个类别,列出相关的 文章。下面我们用问答的方式来说明什么是谷歌排名优化?如何学习谷歌排名优化?如何进行谷歌排名优化?将每一页的相关问题归纳为两类:问题大师关键词的集合列表,以及类似问题的列表。从根本上说,它清理了所有相关的关键词,让页面有更好的用户体验,让谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方显示类似的文章,有利于谷歌排名优化和推广,可以打开。另外,文章发布后,相关的关键词也可以补充评论功能。与谷歌不同,百度的排名规则以PR值作为明确的标准。但是百度也有一套算法对每个网站进行加权,因为没有标准,就没有排名的依据。这个事实是非常真实的。因此,在SEO实践中,网站获得更高的PR值,是每个SEO人追求的目标。但是要获得高PR值,需要一些高质量的反向链接或者足够多的反向链接。
4、提高网站的曝光度。如果一个网站做SEO,你在搜索引擎中的排名就会上升,更多的人会点击你的网站。而且你会受益于不止一个搜索引擎,百度、谷歌、雅虎、搜狗等各种搜索引擎一般都有数据展示。作为一名员工,编写观众喜欢的内容并不难。加入谷歌也是考虑这些因素的时候。一开始可能会很麻烦,但有了这些 SEO 技巧,你很快就会得到意想不到的结果。
如何优化谷歌排名
一:隐藏文字/隐藏链接
一般指网页专为搜索引擎设计,但普通访问者看不到的文字内容或链接。在各种隐藏技术中,最常见的是将文本或链接文本的字体颜色设置为与背景颜色相同或非常接近。
不可见/隐藏文本
目的是在不影响网站美观的情况下,增加收录大量关键词的页面的关键词相关性分数,从而提高搜索引擎排名。

不可见/隐藏链接
它旨在通过在不影响 网站 的美观性的情况下在其他页面上添加指向目标优化页面的不可见链接来提高链接分数,从而提高搜索引擎排名。
大多数搜索引擎现在检测到隐藏的技术并认为它们作弊。结果,收录隐藏文本的网页面临被搜索引擎降级甚至从列表中删除的惩罚。虽然不乏 网站 Google 员工利用隐形技术侥幸成功,但大多数人仍然认为不值得冒险。实际上,通过添加可视化文本内容并保证一定的关键词密度,也可以达到同样的优化效果。
2:页面与谷歌描述不符
通常发生在一个网站被提交给搜索引擎,而网站在网站为收录之后被另一个页面替换。“诱饵-&-切换”就属于这种作弊——创建优化页面和普通页面,然后将优化页面提交给搜索引擎,当优化页面被搜索引擎收录替换它与普通页面。
三:误导或重复关键词
误导关键词(误导性词语)
在与页面无关的页面中使用误导性的 关键词 来吸引访问者网站 访问该主题。显然,这些所谓的 关键词 与这个页面无关。这种做法严重影响了搜索引擎提供的结果的相关性和客观性,被搜索引擎所憎恶。
重复 关键词(重复的单词)
这种作弊技术也称为“关键词Keyword Stuffing”,利用搜索引擎对关键词出现在网页正文和标题中的高度关注,进行关键词不合理(过度)重复。其他类似的做法包括在 HTML 元标记中填充关键字或使用多个关键字元标记来增加 关键词 的相关性。这种技术很容易被搜索引擎检测到并受到相应的惩罚。
四:隐形页面
对实际访问者或搜索引擎的任何一方隐藏真实的 网站 内容,以便向搜索引擎提供非真实的 SEO 友好内容以提高排名。
五:欺骗性重定向
指快速将用户访问的第一页(着陆页)重定向到内容完全不同的页面。
《影子领域》
这是最常见的欺骗性重定向技术,欺骗性地将用户重定向到另一个 网站 或页面。一般是通过使用HTML刷新标记(Meta Refresh)来实现的。大多数搜索引擎不会索引使用此徽标的页面。如果您使用刷新标志来检测浏览器或分辨率,则使用 Javascript 并最大化重定向时间。如果必须使用重定向功能,请确保刷新周期不少于 10 秒。

另一种情况是当用户打开一个网站时,网站声称自己的网站已经移到了一个新的域名,并要求用户点击新的域名链接输入 网站。但是当用户进去的时候,他发现这个链接是一个“附属”链接。这也是一个欺骗性的重定向。
六:门口页
也称为“桥接/门户/跳转/入口页面”。它是针对某些关键字的特制页面,专门为搜索引擎设计的,目的是提高特定关键词在搜索引擎中的排名。目的丰富的关键词域名被重定向到另一个域名的真实网站。搜索引擎蜘蛛倾向于忽略自动重定向到其他页面的页面。
七:复制的网站或网页
最常见的是镜像站点(Mirror Sites)。通过复制 网站 或页面的内容并分配不同的域名和服务器,它可以欺骗搜索引擎多次索引同一站点或同一页面。大多数搜索引擎现在提供能够检测镜像站点的适当过滤系统。找到镜像站点后,源站点和镜像站点都会从索引数据库中删除。
八:作弊链接技术/恶意链接(Link Spamming)
典型的作弊链接技术包括:
链接农场
批量链接交换程序
交叉链接
“链接工厂”(也称为“海量链接机制”)是指由大量交叉链接的网页组成的网络系统。这些网页可能来自同一个域或多个不同的域,甚至来自不同的服务器。站点加入这样的“链接工厂”后,一方面可以从系统中的所有网页获取链接,同时还需要“捐赠”自己的链接作为交换,从而提高通过这种方法进行链接评分,从而达到干预链接评分。的目标。它们现在很容易被搜索引擎发现。一经发现,无论有意还是无意,“链接工厂”中的所有网站都是千丝万缕的链接。
九:其他
日志作弊
具有较高页面排名的网站通过对其进行大量虚假点击来获取其传入链接,以便在这些网站的顶级引荐来源日志中列出。Google 知道这种行为,并将对使用此路由获取传入链接的网站采取适当的措施。
门口域
目标丰富的关键词 域旨在提高特定关键词 在搜索引擎中的排名,然后重定向到其他域的主页。由于搜索引擎通常会忽略自动重定向到其他页面的页面检索,因此不鼓励使用这种技术。
解决方案:资源网采集api接口_cochrane library检索
采集交流 • 优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2022-10-03 23:08
资源网采集api接口_cochrane库检索记录Bintray网站Publishing LibraryBintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray上网站 开启。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。目前的androidstudio默认依赖jcenter库,但是老版本的androidstudio依赖mavenC...
大家好,我是建筑师,一个会写代码,会背诗的建筑师。今天讲资源网采集api接口_cochrane库检索,希望能帮助大家提高!!!
Recording Bintray网站发布库
Bintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray网站上。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。
目前的android studio默认依赖jcenter库,但是老版本的android studio依赖mavenCentral库(因为上传库到mavenCentral对大部分开发者来说有点困难,改成jcenter了)。
我们可以在项目的 build.gradle 文件中看到
默认依赖库.png
好了,废话不多说,我们开始吧。
向 Bintray 注册一个帐户
我这里使用github账号直接登录,但是需要邮箱验证。注意这里不能使用qq邮箱。网易邮箱注册可以使用谷歌邮箱。个人使用的是foxmail(qq邮箱的别称)。
注册成功后是这样的:
Paste_Image.png
然后我们要创建我们的存储库,类似于 github 的存储库。
创建仓库.png
然后填写相应的信息就OK了。注意类型要选择maven,如果想让不在你组织的人使用,需要选择public。
Paste_Image.png
然后将包添加到存储库。用来存放我们要发布的jar包。
Paste_Image.png
然后填写相关信息,如图:
Paste_Image.png
一旦完成,我们的准备工作就完成了。~
编译并发布项目
首先,我们肯定需要一个已经编写好的库。项目结构如下:
Paste_Image.png
如果没有,没关系,我们可以新建一个库,全面调试(如果你只是想知道怎么发布到bintry,在库里写个测试方法就行了),把它作为要发布的jar包。
Paste_Image.png
好了,重头戏来了,我们要在android stduio中搭建我们的上传环境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只听到建筑师办公室传来建筑师的声音:
此水何时止,此恨何时止?谁将向上或向下匹配?
文件中的位置如图: 注意这里可能存在版本问题。如果版本错误,请尝试使用最新版本。
Paste_Image.png
此代码由Java架构师必看网-架构君整理
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
version = "1.0.1"//这里是你的版本,当你需要上传新的版本到bintry上时,只需要修改这里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 项目的主页
def gitUrl = 'https://git.oschina.net/crazycodeboy/ScanProj.git' // Git仓库的url
group = "reoger.hut.com.mylibrary" // Maven Group ID for the artifact,一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'multi-format 1D/2D barcode image processing use zxing.'
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'you id' //填写的一些基本信息(也可以不填)
name 'your name'
email 'your email'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
<p>
}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
userOrg ="hut"//这个地方一定要填,一定要填 !!(这里需要修改你申请账号是的组织id)
repo = "Maven"//发布到bintray上的仓库名
name = "CheckEditText" //发布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
这里需要说明一下:
所需的更改是:
Paste_Image.png
userOrg 填写你的组织ID,可以在如图所示界面找到可信信息。
Paste_Image.png
repo 填写你的仓库名称,name 填写你的包名,可以找到对应的信息如图。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我们需要在项目的local.properties中填写我们的身份信息。将以下两句话添加到我们的目录中:
此代码由Java架构师必看网-架构君整理
bintray.user=用户名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用户名可以在这里找到
Paste_Image.png
在这里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我们离成功也不远了。
接下来在终端输入命令:
gradlew install
如果没有报错,会提示BUILD SUCCESSEUL,然后我们输入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去网站看看~:
Paste_Image.png
将依赖项添加到项目中
发布后,我们可以将其引入到我们的项目中。
在要导入项目的build.gradle目录下,添加依赖:
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我们的组织地址。
Paste_Image.png
然后,在我们要依赖的模块下,添加我们需要的依赖,例如:
Paste_Image.png
这可以在这里找到:
Paste_Image.png
然后就可以使用我们之前写的函数了~!!.
简单的发布写作
将以下内容添加到 -root build.gradle 中的依赖项块中:
classpath 'com.novoda:bintray-release:0.5.0'//修改此处版本号为 0.5.0---修改之前是0.3.4
将以下内容添加到 -root build.gradle 中的所有项目中:
repositories {
jcenter()
mavenCentral()
}
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
options.addStringOption('Xdoclint:none', '-quiet')
}
Paste_Image.png
添加到要发布的lib模块的build.gradle
apply plugin: 'com.novoda.bintray-release'
-如果是项目的要注意下,要将apply plugin: 'com.android.application'
改成apply plugin: 'com.android.library'
Paste_Image.png
添加到库的build.gradle
//添加
publish {
userOrg = 'xxx' //bintray 如果有组织就是组织名,反之用户名
repoName = 'maven' //仓库名
uploadName = 'GameSDK' //项目名
groupId = 'com.test' //compile引用时的第1部分groupId
artifactId = 'game-sdk' //compile引用时的第2部分项目名
publishVersion = '1.0.0' //compile引用时的第3部分版本号
desc = 'This is a game sdk extend library'
website = '网站网址或者github地址'
licences = ['Apache-2.0']
}
生成后的依赖地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:发布成功后:
* 1、在要引入项目的 build.gradle目录下,添加依赖:
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路径{https://xxxx.bintray.com/maven},在未将library加入的jcenter中前,这是必须的
//userOrg 如果有组织就是组织名,反之用户名
* }
*
* 2、在dependencies中添加依赖:
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包发布后,仍然可以这样写:
gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=apiKey -PdryRun=false
我想你会喜欢:
解决方案:关键词提取软件下载(关键词提取器)
优采云采集器是网站采集大家最喜欢的工具,但是优采云采集器在免费版中并没有很多功能,除了支持关键词采集中文文章和自动发布功能,不能提供批量采集伪原创发布等完整的采集流程,不能同时一个-点击批量自动百度、神马、360、搜狗等搜索引擎推送。
无论你有成百上千个不同的免费采集器网站还是其他网站都可以实现统一管理。一个人使用免费的采集器做网站优化维护上百个网站文章更新不是问题,有哪些细节需要注意。
一、域名
域名就像一个人的名字。简单好记的名字容易让人记住,复杂的名字难记。域名也是如此,所以针对网站优化了一个简单易记的域名,好在用户想访问你的网站时,不需要去百度搜索,他们可以通过输入域名直接访问你的网站。免费采集器可以批量监控管理不同的cms网站数据(无论你的网站是Empire, Yiyou, ZBLOG, 织梦, WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同时批处理工具来管理 采集伪原创 并发布推送)。
二、空间
空间是存储网站 程序文件的地方。空间打开越快,空间越稳定,网站用户浏览体验自然会更好。更快的速度和更稳定的空间对于网站来说很重要,优化排名极其重要。免费采集器可以设置批量发布次数(可以设置发布间隔/单日发布总数)。
三、网页上的三大标签
1)标题标签
网页有标题标签。搜索蜘蛛在抓取网页内容时,首先抓取的是网页标题标签的内容,而网页标题标签的内容可以参与搜索结果的排名。我们通常所说的关键词排名指的是标题标签排名,而不是关键词标签排名,所以页面标题标签的内容很重要。免费 采集器 使内容与标题一致(使内容与标题相关性一致)。根据关键词采集文章,通过免费的采集器采集填充内容。(免费的 采集器采集 插件还配置了 关键词采集 功能和无关的词块功能)。注意不要出错,否则会被搜索引擎惩罚。
2)关键词标签
免费采集器可以提高关键词密度和页面原创度,增加用户体验,实现优质内容。
关键词标签的内容不参与排名,部分站长朋友认为不需要写。免费采集器插入内容的能力关键词(合理增加关键词密度)。虽然这个标签不涉及排名,但我们仍然需要维护这个标签内容的完整性。百度搜索在相关算法中也有提及。建议你写下这个标签的内容,以免被百度搜索命中。
3)描述标签
描述标签写入当前网页的一般内容。简而言之,就是对当前网页内容的介绍。一个好的网页描述也可以吸引用户点击该网页的网页,描述标签的内容也可以参与排名。
4)alt 标签
alt标签是图片的专属标签,因为搜索蜘蛛不能直接识别图片,所以只能通过alt标签的内容来识别图片。alt标签的内容只需要简单的告诉搜索蜘蛛图片的内容,不要在alt标签>里面堆关键词,否则会影响搜索蜘蛛对网页的评分。
5)机器人,txt 文件
网站机器人,txt文件是网站和搜索引擎之间的协议文件,用来告诉搜索蜘蛛网站可以抓取哪些页面。免费采集器随机图片插入(文章如果没有图片可以随机插入相关图片)。哪些页面不能被爬取,可以有效保护网站隐私页面,提高网站的安全性。
6)nofollow 标签
免费采集器可以支持多个采集来源采集(涵盖所有行业新闻来源,内容库海量每天都有新内容,采集新内容)。nofollow 标签通常应用于出站链接。站内链接很少用于告诉蜘蛛该链接是非信任链接并且不传递权重。
7)网站网站地图
免费的采集器可以推送到搜索引擎(文章发布成功后主动推送文章到搜索引擎,保证新链接及时被搜索引擎搜索到收录 )。网站sitemap地图有利于提高搜索蜘蛛的网站页面的爬取率,所有网站页面的链接都集中在这个文件中,可以帮助搜索蜘蛛快速爬取整个网站页面。免费的采集器可以定时发布(定时发布网站内容可以让搜索引擎养成定时抓取网页的习惯,从而提高网站的收录)。
搜索蜘蛛爬行网站,第一个访问的文件是robots文件,我们可以在robots文件中写网站站点地图地图,搜索蜘蛛会沿着网站地图文件爬行网站 页面。每日蜘蛛、收录、网站权重可以通过免费的采集器直接查看。
8)链接
免费的采集器可以发布也可以配置很多SEO功能,不仅可以通过免费的采集器发布实现采集伪原创的发布和主动推送到搜索引擎,还可以有很多搜索引擎优化功能。与相关行业的高权重网站交换友情链接,可以增加网站的PR值,给网站带来一定的流量,提高搜索引擎对你的兴趣网站页面的收录速率。免费采集器自动批量挂机采集伪原创自动发布推送到搜索引擎。
9)外部链接
免费采集器可以直接监控已发布、待发布、伪原创、发布状态、URL、程序、发布时间等。外部链接是给别人留下自己的网站链接网站。外链对于新站优化初期非常重要,外链的好坏直接影响搜索引擎中的网站。的评分。免费的采集器可以自动内链(在执行发布任务时自动在文章内容中生成内链,有利于引导页面蜘蛛抓取,提高页面权限)。
10)404 错误页面
免费的采集器提供伪原创保留字(文章原创时伪原创不设置核心字)。网站修改、破解代码或其他原因导致网站中出现大量死链接。这时候,404错误页面就派上用场了。404错误页面向搜索引擎返回一个404状态码,可以帮助搜索引擎快速去除死链接页面。
今天关于免费采集器的解释就到这里了。下期我会分享更多的SEO相关知识。希望你能通过我的文章得到你想要的,下期再见。 查看全部
解决方案:资源网采集api接口_cochrane library检索
资源网采集api接口_cochrane库检索记录Bintray网站Publishing LibraryBintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray上网站 开启。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。目前的androidstudio默认依赖jcenter库,但是老版本的androidstudio依赖mavenC...
大家好,我是建筑师,一个会写代码,会背诗的建筑师。今天讲资源网采集api接口_cochrane库检索,希望能帮助大家提高!!!
Recording Bintray网站发布库
Bintray其实只是一个网站,他们负责维护JCenter库,也就是说JCenter库托管在BIntray网站上。但 Bintray 不仅仅是 JCenter 库。我们还可以在上面创建自己的帐户并生成我们自己的 Maven 存储库。
目前的android studio默认依赖jcenter库,但是老版本的android studio依赖mavenCentral库(因为上传库到mavenCentral对大部分开发者来说有点困难,改成jcenter了)。
我们可以在项目的 build.gradle 文件中看到
默认依赖库.png
好了,废话不多说,我们开始吧。
向 Bintray 注册一个帐户
我这里使用github账号直接登录,但是需要邮箱验证。注意这里不能使用qq邮箱。网易邮箱注册可以使用谷歌邮箱。个人使用的是foxmail(qq邮箱的别称)。
注册成功后是这样的:
Paste_Image.png
然后我们要创建我们的存储库,类似于 github 的存储库。
创建仓库.png
然后填写相应的信息就OK了。注意类型要选择maven,如果想让不在你组织的人使用,需要选择public。
Paste_Image.png
然后将包添加到存储库。用来存放我们要发布的jar包。
Paste_Image.png
然后填写相关信息,如图:
Paste_Image.png
一旦完成,我们的准备工作就完成了。~
编译并发布项目
首先,我们肯定需要一个已经编写好的库。项目结构如下:
Paste_Image.png
如果没有,没关系,我们可以新建一个库,全面调试(如果你只是想知道怎么发布到bintry,在库里写个测试方法就行了),把它作为要发布的jar包。
Paste_Image.png
好了,重头戏来了,我们要在android stduio中搭建我们的上传环境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只听到建筑师办公室传来建筑师的声音:
此水何时止,此恨何时止?谁将向上或向下匹配?
文件中的位置如图: 注意这里可能存在版本问题。如果版本错误,请尝试使用最新版本。
Paste_Image.png
此代码由Java架构师必看网-架构君整理
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
// This is the library version used when deploying the artifact
version = "1.0.1"//这里是你的版本,当你需要上传新的版本到bintry上时,只需要修改这里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 项目的主页
def gitUrl = 'https://git.oschina.net/crazycodeboy/ScanProj.git' // Git仓库的url
group = "reoger.hut.com.mylibrary" // Maven Group ID for the artifact,一般填你唯一的包名
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
// Add your description here
name 'multi-format 1D/2D barcode image processing use zxing.'
url siteUrl
// Set your license
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'you id' //填写的一些基本信息(也可以不填)
name 'your name'
email 'your email'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
<p>

}
}
}
}
}
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
userOrg ="hut"//这个地方一定要填,一定要填 !!(这里需要修改你申请账号是的组织id)
repo = "Maven"//发布到bintray上的仓库名
name = "CheckEditText" //发布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
这里需要说明一下:
所需的更改是:
Paste_Image.png
userOrg 填写你的组织ID,可以在如图所示界面找到可信信息。
Paste_Image.png
repo 填写你的仓库名称,name 填写你的包名,可以找到对应的信息如图。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我们需要在项目的local.properties中填写我们的身份信息。将以下两句话添加到我们的目录中:
此代码由Java架构师必看网-架构君整理
bintray.user=用户名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用户名可以在这里找到
Paste_Image.png
在这里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我们离成功也不远了。
接下来在终端输入命令:
gradlew install
如果没有报错,会提示BUILD SUCCESSEUL,然后我们输入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去网站看看~:
Paste_Image.png

将依赖项添加到项目中
发布后,我们可以将其引入到我们的项目中。
在要导入项目的build.gradle目录下,添加依赖:
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我们的组织地址。
Paste_Image.png
然后,在我们要依赖的模块下,添加我们需要的依赖,例如:
Paste_Image.png
这可以在这里找到:
Paste_Image.png
然后就可以使用我们之前写的函数了~!!.
简单的发布写作
将以下内容添加到 -root build.gradle 中的依赖项块中:
classpath 'com.novoda:bintray-release:0.5.0'//修改此处版本号为 0.5.0---修改之前是0.3.4
将以下内容添加到 -root build.gradle 中的所有项目中:
repositories {
jcenter()
mavenCentral()
}
tasks.withType(Javadoc) {
options {
encoding "UTF-8"
charSet 'UTF-8'
links "http://docs.oracle.com/javase/7/docs/api"
}
options.addStringOption('Xdoclint:none', '-quiet')
}
Paste_Image.png
添加到要发布的lib模块的build.gradle
apply plugin: 'com.novoda.bintray-release'
-如果是项目的要注意下,要将apply plugin: 'com.android.application'
改成apply plugin: 'com.android.library'
Paste_Image.png
添加到库的build.gradle
//添加
publish {
userOrg = 'xxx' //bintray 如果有组织就是组织名,反之用户名
repoName = 'maven' //仓库名
uploadName = 'GameSDK' //项目名
groupId = 'com.test' //compile引用时的第1部分groupId
artifactId = 'game-sdk' //compile引用时的第2部分项目名
publishVersion = '1.0.0' //compile引用时的第3部分版本号
desc = 'This is a game sdk extend library'
website = '网站网址或者github地址'
licences = ['Apache-2.0']
}
生成后的依赖地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:发布成功后:
* 1、在要引入项目的 build.gradle目录下,添加依赖:
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路径{https://xxxx.bintray.com/maven},在未将library加入的jcenter中前,这是必须的
//userOrg 如果有组织就是组织名,反之用户名
* }
*
* 2、在dependencies中添加依赖:
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包发布后,仍然可以这样写:
gradlew clean build bintrayUpload -PbintrayUser=用户名 -PbintrayKey=apiKey -PdryRun=false
我想你会喜欢:
解决方案:关键词提取软件下载(关键词提取器)
优采云采集器是网站采集大家最喜欢的工具,但是优采云采集器在免费版中并没有很多功能,除了支持关键词采集中文文章和自动发布功能,不能提供批量采集伪原创发布等完整的采集流程,不能同时一个-点击批量自动百度、神马、360、搜狗等搜索引擎推送。
无论你有成百上千个不同的免费采集器网站还是其他网站都可以实现统一管理。一个人使用免费的采集器做网站优化维护上百个网站文章更新不是问题,有哪些细节需要注意。
一、域名
域名就像一个人的名字。简单好记的名字容易让人记住,复杂的名字难记。域名也是如此,所以针对网站优化了一个简单易记的域名,好在用户想访问你的网站时,不需要去百度搜索,他们可以通过输入域名直接访问你的网站。免费采集器可以批量监控管理不同的cms网站数据(无论你的网站是Empire, Yiyou, ZBLOG, 织梦, WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同时批处理工具来管理 采集伪原创 并发布推送)。
二、空间
空间是存储网站 程序文件的地方。空间打开越快,空间越稳定,网站用户浏览体验自然会更好。更快的速度和更稳定的空间对于网站来说很重要,优化排名极其重要。免费采集器可以设置批量发布次数(可以设置发布间隔/单日发布总数)。
三、网页上的三大标签
1)标题标签
网页有标题标签。搜索蜘蛛在抓取网页内容时,首先抓取的是网页标题标签的内容,而网页标题标签的内容可以参与搜索结果的排名。我们通常所说的关键词排名指的是标题标签排名,而不是关键词标签排名,所以页面标题标签的内容很重要。免费 采集器 使内容与标题一致(使内容与标题相关性一致)。根据关键词采集文章,通过免费的采集器采集填充内容。(免费的 采集器采集 插件还配置了 关键词采集 功能和无关的词块功能)。注意不要出错,否则会被搜索引擎惩罚。

2)关键词标签
免费采集器可以提高关键词密度和页面原创度,增加用户体验,实现优质内容。
关键词标签的内容不参与排名,部分站长朋友认为不需要写。免费采集器插入内容的能力关键词(合理增加关键词密度)。虽然这个标签不涉及排名,但我们仍然需要维护这个标签内容的完整性。百度搜索在相关算法中也有提及。建议你写下这个标签的内容,以免被百度搜索命中。
3)描述标签
描述标签写入当前网页的一般内容。简而言之,就是对当前网页内容的介绍。一个好的网页描述也可以吸引用户点击该网页的网页,描述标签的内容也可以参与排名。
4)alt 标签
alt标签是图片的专属标签,因为搜索蜘蛛不能直接识别图片,所以只能通过alt标签的内容来识别图片。alt标签的内容只需要简单的告诉搜索蜘蛛图片的内容,不要在alt标签>里面堆关键词,否则会影响搜索蜘蛛对网页的评分。
5)机器人,txt 文件
网站机器人,txt文件是网站和搜索引擎之间的协议文件,用来告诉搜索蜘蛛网站可以抓取哪些页面。免费采集器随机图片插入(文章如果没有图片可以随机插入相关图片)。哪些页面不能被爬取,可以有效保护网站隐私页面,提高网站的安全性。
6)nofollow 标签
免费采集器可以支持多个采集来源采集(涵盖所有行业新闻来源,内容库海量每天都有新内容,采集新内容)。nofollow 标签通常应用于出站链接。站内链接很少用于告诉蜘蛛该链接是非信任链接并且不传递权重。
7)网站网站地图

免费的采集器可以推送到搜索引擎(文章发布成功后主动推送文章到搜索引擎,保证新链接及时被搜索引擎搜索到收录 )。网站sitemap地图有利于提高搜索蜘蛛的网站页面的爬取率,所有网站页面的链接都集中在这个文件中,可以帮助搜索蜘蛛快速爬取整个网站页面。免费的采集器可以定时发布(定时发布网站内容可以让搜索引擎养成定时抓取网页的习惯,从而提高网站的收录)。
搜索蜘蛛爬行网站,第一个访问的文件是robots文件,我们可以在robots文件中写网站站点地图地图,搜索蜘蛛会沿着网站地图文件爬行网站 页面。每日蜘蛛、收录、网站权重可以通过免费的采集器直接查看。
8)链接
免费的采集器可以发布也可以配置很多SEO功能,不仅可以通过免费的采集器发布实现采集伪原创的发布和主动推送到搜索引擎,还可以有很多搜索引擎优化功能。与相关行业的高权重网站交换友情链接,可以增加网站的PR值,给网站带来一定的流量,提高搜索引擎对你的兴趣网站页面的收录速率。免费采集器自动批量挂机采集伪原创自动发布推送到搜索引擎。
9)外部链接
免费采集器可以直接监控已发布、待发布、伪原创、发布状态、URL、程序、发布时间等。外部链接是给别人留下自己的网站链接网站。外链对于新站优化初期非常重要,外链的好坏直接影响搜索引擎中的网站。的评分。免费的采集器可以自动内链(在执行发布任务时自动在文章内容中生成内链,有利于引导页面蜘蛛抓取,提高页面权限)。
10)404 错误页面
免费的采集器提供伪原创保留字(文章原创时伪原创不设置核心字)。网站修改、破解代码或其他原因导致网站中出现大量死链接。这时候,404错误页面就派上用场了。404错误页面向搜索引擎返回一个404状态码,可以帮助搜索引擎快速去除死链接页面。
今天关于免费采集器的解释就到这里了。下期我会分享更多的SEO相关知识。希望你能通过我的文章得到你想要的,下期再见。
完整解决方案:支持推荐应用的PaaS平台4A能力组件
采集交流 • 优采云 发表了文章 • 0 个评论 • 167 次浏览 • 2022-10-03 04:46
平台即服务(PaaS,platform as a service)作为云计算的一种应用形式,为应用开发者提供高效、安全的应用托管能力[]。随着PaaS云平台的不断发展,平台能力的丰富性和多样化已经成为PaaS平台的核心竞争点和关键指标[]。所谓平台的“能力组件”,主要是指PaaS平台提供的、可供平台上其他应用调用的软件能力。4A是Authentication(认证)。)、Authorization(认证)、Accounting(计费)和Audit(审计)的缩写,4A为用户提供统一的用户身份认证管理,应用访问(access)权限控制,记账和账户管理,以及基于操作的日志审计等功能。通过分析PaaS平台上的应用[-]可以发现,很多应用都需要基本的4A能力,比如用户信息管理、账户管理等。因此,4A能力组件正是在PaaS云平台中。可重用的重要组件之一,可有效减少应用程序开发量,增加软件资产的重用性。同时,丰富强大的平台能力也可以让平台上的应用拥有更丰富、更强大的功能,提高应用竞争力。. 4A能力组件在提供4A能力的同时,还为用户提供单点登录(SSO,single sign on)功能,方便用户在各种应用之间无缝切换,一站式满足用户和应用的需求。提供统一认证、认证管理、账号管理、审计管理、SSO等功能需求。
1 4A能力组件需求分析
4A能力组件为用户提供用户注册、密码找回、信息管理、计费管理等账户管理相关功能,提供统一的认证服务,为不同的应用提供认证管理,提供用户行为信息的审计管理,支持单点登录和其他功能。
4A能力组件的应用对象是PaaS云中的应用开发者、应用用户和管理员。4A能力组件为应用开发者提供了一个简单、安全、高效的接口,方便开发者使用。为保证一站式服务用户体验,4A能力组件为应用用户和管理员提供用户入口和管理员入口,完成对用户信息和应用信息的管理。
4A组件的功能主要包括账户管理、认证管理、认证管理、审计管理和SSO。
1) 账户管理:账户管理分为三个部分。一是基本账户管理,包括用户注册、找回密码、修改密码等;二是用户信息管理,包括基本用户信息(基本用户信息、用户分机信息和用户权限信息)和好友信息(好友信息、朋友关系和朋友组)。最后是账单信息,包括用户余额和交易详情。
2) 统一认证:统一认证用于判断用户是否合法。认证过程通过 OAuth2.0 协议实现。应用开发者在使用能力组件提供的开放接口之前,需要获取用户的授权凭证access_token。. access_token 是第三方访问用户资源的凭证。只有通过这个凭证,第三方应用程序才能访问 4A 能力组件中的数据。
3) 应用认证:只有经过系统授权的应用才能获取用户信息。当应用通过4A能力组件获取用户信息时,会对第三方应用进行授权检查,未经授权的应用不会获取任何用户信息。
4)系统审计:4A能力组件通过日志系统记录用户行为和系统操作信息,完成相关日志的采集、存储和分析。
5) SSO:SSO 是一种流行的系统集成解决方案。SSO可以保证在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
2 4A 能力组件设计2.1 系统架构
系统架构图如图所示。该系统分为三个部分。最上层是Web服务层,即接口服务器(API Server)和与开发者、用户和管理员交互的Web接口。Web服务层主要负责管理员门户,特别是4A能力组件将用户门户作为能力组件的第三方应用,不与管理员门户在同一层。. 这是因为管理员门户需要更高的权限,开放API不提供相关功能,调用开放API也会造成效率下降。中间是逻辑功能层,主要完成系统中所有逻辑功能的实现,包括账户管理、统一认证[]、应用认证、系统审计和SSO[]等。系统的底层是基础组件层,包括基础组件和支撑组件。基础组件是系统运行的必备组件,主要包括MySQL、NFS和邮件服务等。支持组件是支持系统运行的可选组件,主要包括日志系统等。下面将重点介绍日志系统和接口服务器。
图1
图1
图1 4A能力组件系统架构图
2.2 日志系统
日志系统是4A能力组件的支撑组件,负责在4A能力组件中记录用户的行为信息,并与4A能力组件中的审计模块相关联。其系统架构如下图所示。
图 2
图 2
图2 日志系统架构图
日志系统支持采集,海量日志数据的存储和分析。系统提供高性能的日志读写,包括实时读取最新日志和批量读取历史数据。日志系统由Kafka分布式消息队列、HBase分布式数据库、生产者程序和消费者程序[]组成。生产者程序是4A能力组件中的一个审计模块,可以为用户提供用户行为数据。消费者程序是一个基于HTTP协议的API服务器,日志系统通过API向4A能力组件提供各种日志信息。
2.3 API 服务器
4A能力组件提供的开放API由4A能力组件中Web服务层的API Server提供。
2.3.1 API 设计
根据4A能力组件的开发者需求,开放API定义为两类:
1)用户级API:OAuth2.0登录的用户,必须携带access_token参数。用户级 API 主要用于访问个人用户信息。
2)应用级API:用于不使用OAuth2.0登录并已授权的第三方应用。应用程序级 API 将具有参数 source 而不是参数 access_token。参数 source 是 4A 能力的一个组成部分 管理员分配给应用的唯一 ID。
根据系统功能,API分为以下7类:
1) 身份验证 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用户关系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 组 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用户信息 API:/api/users/" target="_blank">/api/users/。
5) 帐户 API:/api/account/" target="_blank">/api/account/。
6) 计费 API:/api/billing/" target="_blank">/api/billing/。
7) 日志 API:/api/log/" target="_blank">/api/log/。
2.3.2 API安全解决方案
为了保证用户信息的安全可靠,用户级API和应用级API采用不同的安全方案。
1) 用户级 API
用户级 API 使用 access_token 是否过期或有效来判断用户的真实性,并返回相应的数据。用户的access_token仅在用户登录期间有效,有效期为24小时。
对于OAuth2.0相关的API,还增加了以下安全措施:
① OAuth2.0 获取参数代码时,可以添加参数状态,维护请求和回调的状态。当4A能力组件重定向到应用程序时,将返回该参数。开发者可以通过该参数验证请求的有效性,从而防止跨站请求伪造攻击。
② OAuth2.0通过参数code获取参数access_token时,尽量选择HTTP协议的POST方式传输请求。
2) 应用程序级 API
应用级API只传递参数源作为应用身份的认证是不安全的,所以4A能力组件使用参数签名来保护用户信息。构造参数签名的过程如下:
①分类参数:API中携带的参数分为系统参数和非系统参数。系统参数包括应用ID(参数来源)和应用密钥(与参数来源唯一匹配)。非系统参数是除系统参数外的所有参数。范围。
② 构造源字符串:将所有非系统参数和参数源按名称值升序排列,并用“&”连接,如k1=v1 & k2=v2 & ...,然后执行第一个MD5加密。
③ 构造密钥:在应用密钥末尾添加字符“&”。
④ 生成签名值签名:将源字符串和密钥以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一个新的字符串,再用MD5加密该值。注意连接的顺序会影响最终的签名值。
4A能力组件的API Server获取API中的各种参数,按照上述算法进行相同的加密过程。如果得到的签名值与参数签名一致,则证明API是安全的。
3 基于4A能力组件的推荐应用3.1 4A能力组件与推荐应用的关系
传统的4A组件只提供4A功能,如用户信息、好友信息等,而4A数据的特性让这些数据可以在更广泛的应用中使用。基于4A能力组件的推荐应用是PaaS云平台4A能力组件的一个应用示例。本应用分析4A能力组件中采集的用户行为信息,为用户推荐PaaS云平台现有的第三方应用。用户可以通过个性化服务快速定位到自己的采集夹。应用程序来解决人们在访问互联网时面临的“信息过载”问题。
4A能力组件记录用户使用4A能力组件时的所有用户行为,并提供日志API。根据4A能力组件的特点,用户行为包括用户注册、用户登录、首次登录、登录时长等。此外,在4A能力组件的用户门户中,用户还可以填写个人兴趣信息以进行为个性化推荐提供直接的数据支持。
推荐的应用程序首先需要连接到 4A 能力组件。访问工作主要由 4A 能力组件的管理员执行,对应用进行审核,并为应用分配唯一的应用 ID 和应用密钥对。然后,被推荐的应用程序可以通过日志API采集4A组件提供的用户行为数据,并基于这些数据进行数据处理、用户兴趣建模和算法推荐。
3.2 推荐应用系统架构
用户访问应用程序,通常具有某些偏好。推荐应用根据用户注册的个人信息定制用户描述文件。该文件可以由用户主动修改或由应用程序自动修改。当文件被应用修改时,应用需要采集用户行为数据,学习用户兴趣,从而调整用户兴趣模型,完成推荐算法。推荐应用的系统架构如图所示。推荐过程分三个阶段完成:数据采集、用户建模和个性化推荐。
图 3
图 3
图3 推荐应用系统架构图
1) 数据采集阶段:该阶段根据4A能力组件提供的用户信息和用户行为信息,完成用户行为采集和数据处理。用户数据的采集方法包括显式反馈和隐式反馈。类型。明确的反馈需要用户主动给出反馈和评价。隐式反馈由应用程序自动完成,不会给用户增加额外的负担。应用程序使用显式反馈和隐式反馈共同实现数据采集的过程。显式反馈使用填写用户信息的方法,隐式反馈调用4A能力组件的日志接口获取用户行为数据。4A能力组件的审计模块详细记录用户访问站点的数据,站点上的页面每被访问一次,web服务器在日志中添加一条日志记录,包括用户IP、请求页面的用户名、应用程序名称、请求时间和 URL。此外,审计模块还将完成基本的数据处理。
2) 用户兴趣建模阶段:该阶段根据用户兴趣建立评价矩阵模型。user-item评估矩阵使用一个Rm×n矩阵来表示用户模型,其中m是用户数,n是项目数。矩阵 R=[rij] 中的每个元素 rij 代表用户 i 对项目 j 的评价结果,一般为一定实数范围内的整数值(如 1~10)。通常越高价值越高,用户对项目的兴趣程度越高。这种表示简单、直观,可以直接从显式反馈采集的信息中生成。
(1)
在本应用中,rij 是用户 i 在一段时间内对应用 j 的兴趣程度。兴趣度的值由用户i对应用j的访问次数、访问时长、SSO流程中第一次登录是否进入应用以及是否在此注册等方面加权应用。
3) 个性化推荐阶段:在这个阶段,根据用户相似度得到一组用户邻居。然后根据邻居用户,对目标用户没有评分的物品进行预测和评分,返回评分最高的N(Top-N)个物品。
4。结论
针对现有PaaS平台开放能力的局限性,以及现有应用功能列表4A体系不规范,提出了PaaS云中的4A能力组件。该组件分为账户管理、统一认证、应用授权。、系统审计和 SSO 5 模块,并通过开放的 API、用户门户和管理员门户为开发人员、用户和管理员提供丰富和安全的 Web 服务。根据4A数据的特点和4A能力组件提供的能力,创新设计并实现了基于4A能力组件的推荐应用。该应用使用用户兴趣模型和协同过滤算法来实现对PaaS云平台现有应用的推荐,同时也验证了4A能力组件的可用性及其应用范围的广泛性。.
设计并实现的4A能力组件已应用于北京邮电大学“云海”PaaS平台,并被平台上多个第三方应用使用,如:面向群体的在线知识管理应用及其管理员门户(、)等。第三方应用开发者通过使用4A能力组件,简化应用开发流程,节省应用开发时间。PaaS云中的4A能力组件增加了软件资产的复用,更好地规范了用户信息的管理流程,开创了用户信息管理服务的新模式。
经验:数据采集技术包括哪几方面(优缺点分别是什么)
很多人不知道data采集技术包括哪些,优缺点,一起来看看吧!
1、通过各软件厂商开放的数据接口,可以实现不同软件数据的互联互通。这是目前最常见的数据连接方式。
2、优点:接口连接方式数据可靠性和价值高,一般不会出现数据重复;通过该接口可以实时传输数据,满足实时数据应用的要求。
3、缺点:接口开发成本高;(2)需要与多个软件厂商协调,工作量大,容易破解;扩展性低。比如由于新业务需要开发每个软件系统对于一个新的业务模块,它和它之间的数据接口大数据平台也需要做相应的修改和改变,甚至之前的数据接口代码都要全部翻过来,工作量大,时间长。
4、机器人是目前比较前沿的软件数据对接技术,即可以采集客户端软件数据和网站软件数据。
5、俗称博是小帮手软件机器人,产品设计原则是“所见即所得”,即无需软件厂商合作,采集上的数据软件界面将被输出。结果是结构化的数据库或 Excel 表。
6、如果只需要界面上的业务数据,或者软件厂商不配合/崩溃,数据库分析困难,最好使用软件机器人采集数据,尤其是详情页的data采集功能比较有特色。
7、技术特点是:无需原软件厂商的配合;兼容性强,可以采集和汇总Windows平台上各种软件系统的数据;输出结构化数据;即用型,实现周期短,简单高效;配置简单,无需编程,人人都可以DIY一个软件机器人;价格远低于手动和界面。
8、缺点:采集软件数据的实时性有限。
9、网络爬虫是模拟客户端的网络请求并接收请求响应,并按照一定的规则自动从万维网上爬取信息的程序或脚本。
10、爬虫数据采集缺点:输出数据多为非结构化数据;只能采集网站数据,易受网站反爬机制影响;用户脸窄,需要专业的编程知识才能玩。
11、开放式数据库是采集和整合数据最直接的方式。
12、优点:开放数据库方式可以直接从目标数据库中获取需要的数据,准确率高,实时性有保证。这是最直接、最方便的方法。
13、缺点:开放数据库模式还需要协调各个软件厂商的数据库开放,这取决于对方的意愿。一般出于安全原因不会开放;如果一个平台同时连接多个软件厂商的数据库,并且实时获取数据,对平台的性能也是一个很大的挑战。 查看全部
完整解决方案:支持推荐应用的PaaS平台4A能力组件
平台即服务(PaaS,platform as a service)作为云计算的一种应用形式,为应用开发者提供高效、安全的应用托管能力[]。随着PaaS云平台的不断发展,平台能力的丰富性和多样化已经成为PaaS平台的核心竞争点和关键指标[]。所谓平台的“能力组件”,主要是指PaaS平台提供的、可供平台上其他应用调用的软件能力。4A是Authentication(认证)。)、Authorization(认证)、Accounting(计费)和Audit(审计)的缩写,4A为用户提供统一的用户身份认证管理,应用访问(access)权限控制,记账和账户管理,以及基于操作的日志审计等功能。通过分析PaaS平台上的应用[-]可以发现,很多应用都需要基本的4A能力,比如用户信息管理、账户管理等。因此,4A能力组件正是在PaaS云平台中。可重用的重要组件之一,可有效减少应用程序开发量,增加软件资产的重用性。同时,丰富强大的平台能力也可以让平台上的应用拥有更丰富、更强大的功能,提高应用竞争力。. 4A能力组件在提供4A能力的同时,还为用户提供单点登录(SSO,single sign on)功能,方便用户在各种应用之间无缝切换,一站式满足用户和应用的需求。提供统一认证、认证管理、账号管理、审计管理、SSO等功能需求。
1 4A能力组件需求分析
4A能力组件为用户提供用户注册、密码找回、信息管理、计费管理等账户管理相关功能,提供统一的认证服务,为不同的应用提供认证管理,提供用户行为信息的审计管理,支持单点登录和其他功能。
4A能力组件的应用对象是PaaS云中的应用开发者、应用用户和管理员。4A能力组件为应用开发者提供了一个简单、安全、高效的接口,方便开发者使用。为保证一站式服务用户体验,4A能力组件为应用用户和管理员提供用户入口和管理员入口,完成对用户信息和应用信息的管理。
4A组件的功能主要包括账户管理、认证管理、认证管理、审计管理和SSO。
1) 账户管理:账户管理分为三个部分。一是基本账户管理,包括用户注册、找回密码、修改密码等;二是用户信息管理,包括基本用户信息(基本用户信息、用户分机信息和用户权限信息)和好友信息(好友信息、朋友关系和朋友组)。最后是账单信息,包括用户余额和交易详情。
2) 统一认证:统一认证用于判断用户是否合法。认证过程通过 OAuth2.0 协议实现。应用开发者在使用能力组件提供的开放接口之前,需要获取用户的授权凭证access_token。. access_token 是第三方访问用户资源的凭证。只有通过这个凭证,第三方应用程序才能访问 4A 能力组件中的数据。
3) 应用认证:只有经过系统授权的应用才能获取用户信息。当应用通过4A能力组件获取用户信息时,会对第三方应用进行授权检查,未经授权的应用不会获取任何用户信息。
4)系统审计:4A能力组件通过日志系统记录用户行为和系统操作信息,完成相关日志的采集、存储和分析。
5) SSO:SSO 是一种流行的系统集成解决方案。SSO可以保证在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
2 4A 能力组件设计2.1 系统架构
系统架构图如图所示。该系统分为三个部分。最上层是Web服务层,即接口服务器(API Server)和与开发者、用户和管理员交互的Web接口。Web服务层主要负责管理员门户,特别是4A能力组件将用户门户作为能力组件的第三方应用,不与管理员门户在同一层。. 这是因为管理员门户需要更高的权限,开放API不提供相关功能,调用开放API也会造成效率下降。中间是逻辑功能层,主要完成系统中所有逻辑功能的实现,包括账户管理、统一认证[]、应用认证、系统审计和SSO[]等。系统的底层是基础组件层,包括基础组件和支撑组件。基础组件是系统运行的必备组件,主要包括MySQL、NFS和邮件服务等。支持组件是支持系统运行的可选组件,主要包括日志系统等。下面将重点介绍日志系统和接口服务器。
图1
图1
图1 4A能力组件系统架构图
2.2 日志系统
日志系统是4A能力组件的支撑组件,负责在4A能力组件中记录用户的行为信息,并与4A能力组件中的审计模块相关联。其系统架构如下图所示。
图 2
图 2
图2 日志系统架构图
日志系统支持采集,海量日志数据的存储和分析。系统提供高性能的日志读写,包括实时读取最新日志和批量读取历史数据。日志系统由Kafka分布式消息队列、HBase分布式数据库、生产者程序和消费者程序[]组成。生产者程序是4A能力组件中的一个审计模块,可以为用户提供用户行为数据。消费者程序是一个基于HTTP协议的API服务器,日志系统通过API向4A能力组件提供各种日志信息。

2.3 API 服务器
4A能力组件提供的开放API由4A能力组件中Web服务层的API Server提供。
2.3.1 API 设计
根据4A能力组件的开发者需求,开放API定义为两类:
1)用户级API:OAuth2.0登录的用户,必须携带access_token参数。用户级 API 主要用于访问个人用户信息。
2)应用级API:用于不使用OAuth2.0登录并已授权的第三方应用。应用程序级 API 将具有参数 source 而不是参数 access_token。参数 source 是 4A 能力的一个组成部分 管理员分配给应用的唯一 ID。
根据系统功能,API分为以下7类:
1) 身份验证 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用户关系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 组 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用户信息 API:/api/users/" target="_blank">/api/users/。
5) 帐户 API:/api/account/" target="_blank">/api/account/。
6) 计费 API:/api/billing/" target="_blank">/api/billing/。
7) 日志 API:/api/log/" target="_blank">/api/log/。
2.3.2 API安全解决方案
为了保证用户信息的安全可靠,用户级API和应用级API采用不同的安全方案。
1) 用户级 API
用户级 API 使用 access_token 是否过期或有效来判断用户的真实性,并返回相应的数据。用户的access_token仅在用户登录期间有效,有效期为24小时。
对于OAuth2.0相关的API,还增加了以下安全措施:
① OAuth2.0 获取参数代码时,可以添加参数状态,维护请求和回调的状态。当4A能力组件重定向到应用程序时,将返回该参数。开发者可以通过该参数验证请求的有效性,从而防止跨站请求伪造攻击。
② OAuth2.0通过参数code获取参数access_token时,尽量选择HTTP协议的POST方式传输请求。
2) 应用程序级 API
应用级API只传递参数源作为应用身份的认证是不安全的,所以4A能力组件使用参数签名来保护用户信息。构造参数签名的过程如下:
①分类参数:API中携带的参数分为系统参数和非系统参数。系统参数包括应用ID(参数来源)和应用密钥(与参数来源唯一匹配)。非系统参数是除系统参数外的所有参数。范围。

② 构造源字符串:将所有非系统参数和参数源按名称值升序排列,并用“&”连接,如k1=v1 & k2=v2 & ...,然后执行第一个MD5加密。
③ 构造密钥:在应用密钥末尾添加字符“&”。
④ 生成签名值签名:将源字符串和密钥以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一个新的字符串,再用MD5加密该值。注意连接的顺序会影响最终的签名值。
4A能力组件的API Server获取API中的各种参数,按照上述算法进行相同的加密过程。如果得到的签名值与参数签名一致,则证明API是安全的。
3 基于4A能力组件的推荐应用3.1 4A能力组件与推荐应用的关系
传统的4A组件只提供4A功能,如用户信息、好友信息等,而4A数据的特性让这些数据可以在更广泛的应用中使用。基于4A能力组件的推荐应用是PaaS云平台4A能力组件的一个应用示例。本应用分析4A能力组件中采集的用户行为信息,为用户推荐PaaS云平台现有的第三方应用。用户可以通过个性化服务快速定位到自己的采集夹。应用程序来解决人们在访问互联网时面临的“信息过载”问题。
4A能力组件记录用户使用4A能力组件时的所有用户行为,并提供日志API。根据4A能力组件的特点,用户行为包括用户注册、用户登录、首次登录、登录时长等。此外,在4A能力组件的用户门户中,用户还可以填写个人兴趣信息以进行为个性化推荐提供直接的数据支持。
推荐的应用程序首先需要连接到 4A 能力组件。访问工作主要由 4A 能力组件的管理员执行,对应用进行审核,并为应用分配唯一的应用 ID 和应用密钥对。然后,被推荐的应用程序可以通过日志API采集4A组件提供的用户行为数据,并基于这些数据进行数据处理、用户兴趣建模和算法推荐。
3.2 推荐应用系统架构
用户访问应用程序,通常具有某些偏好。推荐应用根据用户注册的个人信息定制用户描述文件。该文件可以由用户主动修改或由应用程序自动修改。当文件被应用修改时,应用需要采集用户行为数据,学习用户兴趣,从而调整用户兴趣模型,完成推荐算法。推荐应用的系统架构如图所示。推荐过程分三个阶段完成:数据采集、用户建模和个性化推荐。
图 3
图 3
图3 推荐应用系统架构图
1) 数据采集阶段:该阶段根据4A能力组件提供的用户信息和用户行为信息,完成用户行为采集和数据处理。用户数据的采集方法包括显式反馈和隐式反馈。类型。明确的反馈需要用户主动给出反馈和评价。隐式反馈由应用程序自动完成,不会给用户增加额外的负担。应用程序使用显式反馈和隐式反馈共同实现数据采集的过程。显式反馈使用填写用户信息的方法,隐式反馈调用4A能力组件的日志接口获取用户行为数据。4A能力组件的审计模块详细记录用户访问站点的数据,站点上的页面每被访问一次,web服务器在日志中添加一条日志记录,包括用户IP、请求页面的用户名、应用程序名称、请求时间和 URL。此外,审计模块还将完成基本的数据处理。
2) 用户兴趣建模阶段:该阶段根据用户兴趣建立评价矩阵模型。user-item评估矩阵使用一个Rm×n矩阵来表示用户模型,其中m是用户数,n是项目数。矩阵 R=[rij] 中的每个元素 rij 代表用户 i 对项目 j 的评价结果,一般为一定实数范围内的整数值(如 1~10)。通常越高价值越高,用户对项目的兴趣程度越高。这种表示简单、直观,可以直接从显式反馈采集的信息中生成。
(1)
在本应用中,rij 是用户 i 在一段时间内对应用 j 的兴趣程度。兴趣度的值由用户i对应用j的访问次数、访问时长、SSO流程中第一次登录是否进入应用以及是否在此注册等方面加权应用。
3) 个性化推荐阶段:在这个阶段,根据用户相似度得到一组用户邻居。然后根据邻居用户,对目标用户没有评分的物品进行预测和评分,返回评分最高的N(Top-N)个物品。
4。结论
针对现有PaaS平台开放能力的局限性,以及现有应用功能列表4A体系不规范,提出了PaaS云中的4A能力组件。该组件分为账户管理、统一认证、应用授权。、系统审计和 SSO 5 模块,并通过开放的 API、用户门户和管理员门户为开发人员、用户和管理员提供丰富和安全的 Web 服务。根据4A数据的特点和4A能力组件提供的能力,创新设计并实现了基于4A能力组件的推荐应用。该应用使用用户兴趣模型和协同过滤算法来实现对PaaS云平台现有应用的推荐,同时也验证了4A能力组件的可用性及其应用范围的广泛性。.
设计并实现的4A能力组件已应用于北京邮电大学“云海”PaaS平台,并被平台上多个第三方应用使用,如:面向群体的在线知识管理应用及其管理员门户(、)等。第三方应用开发者通过使用4A能力组件,简化应用开发流程,节省应用开发时间。PaaS云中的4A能力组件增加了软件资产的复用,更好地规范了用户信息的管理流程,开创了用户信息管理服务的新模式。
经验:数据采集技术包括哪几方面(优缺点分别是什么)
很多人不知道data采集技术包括哪些,优缺点,一起来看看吧!
1、通过各软件厂商开放的数据接口,可以实现不同软件数据的互联互通。这是目前最常见的数据连接方式。
2、优点:接口连接方式数据可靠性和价值高,一般不会出现数据重复;通过该接口可以实时传输数据,满足实时数据应用的要求。
3、缺点:接口开发成本高;(2)需要与多个软件厂商协调,工作量大,容易破解;扩展性低。比如由于新业务需要开发每个软件系统对于一个新的业务模块,它和它之间的数据接口大数据平台也需要做相应的修改和改变,甚至之前的数据接口代码都要全部翻过来,工作量大,时间长。

4、机器人是目前比较前沿的软件数据对接技术,即可以采集客户端软件数据和网站软件数据。
5、俗称博是小帮手软件机器人,产品设计原则是“所见即所得”,即无需软件厂商合作,采集上的数据软件界面将被输出。结果是结构化的数据库或 Excel 表。
6、如果只需要界面上的业务数据,或者软件厂商不配合/崩溃,数据库分析困难,最好使用软件机器人采集数据,尤其是详情页的data采集功能比较有特色。
7、技术特点是:无需原软件厂商的配合;兼容性强,可以采集和汇总Windows平台上各种软件系统的数据;输出结构化数据;即用型,实现周期短,简单高效;配置简单,无需编程,人人都可以DIY一个软件机器人;价格远低于手动和界面。
8、缺点:采集软件数据的实时性有限。

9、网络爬虫是模拟客户端的网络请求并接收请求响应,并按照一定的规则自动从万维网上爬取信息的程序或脚本。
10、爬虫数据采集缺点:输出数据多为非结构化数据;只能采集网站数据,易受网站反爬机制影响;用户脸窄,需要专业的编程知识才能玩。
11、开放式数据库是采集和整合数据最直接的方式。
12、优点:开放数据库方式可以直接从目标数据库中获取需要的数据,准确率高,实时性有保证。这是最直接、最方便的方法。
13、缺点:开放数据库模式还需要协调各个软件厂商的数据库开放,这取决于对方的意愿。一般出于安全原因不会开放;如果一个平台同时连接多个软件厂商的数据库,并且实时获取数据,对平台的性能也是一个很大的挑战。
总结:连载|浅谈红队中的外网信息收集(一)
采集交流 • 优采云 发表了文章 • 0 个评论 • 135 次浏览 • 2022-09-28 00:06
文章首次发表于:
火线区社区()
前言
最近一直在整理总结以往学过的关于红队的知识点。这里我主要指的是ATT&CK矩阵模型,不过做了简化,增加了一些国内独有的情况。
一般会按照外网信息采集、管理、权限维护、权限升级、内网信息采集、横向移动、痕迹清理的顺序进行。
因为是总结文章,所以文章的重点是在“面”上而不是在具体的“点”上,所以文中的具体技术细节不再赘述,否则内容会有很多。
想了解具体细节的读者可以去我个人公众号TeamsSix的历史文章,里面会有一些点的描述文章。
限于个人水平,文中难免有错误或不恰当的描述,希望在评论中指出,希望理解。
确定目标
在开始信息采集之前,您必须首先确定目标。在红队项目或HW项目中,一般目标是公司名称,然后通过公司名称获取各种信息,进而进行外网管理、内网穿透等。
知道了目标公司的名称后,我们就可以开始采集信息的工作了。
外网信息采集
在这里我整理了以下信息采集的方法。当然,它肯定是不完整的。欢迎大家在评论区一起补充讨论:
1、组织所有权结构
拿到公司名称后,先别急着查记录找域名,而是先看公司的股权结构,因为一般一家公司的子公司也可以瞄准,但有时需要50%的股份。股份或100%持股,视实际情况而定。
比较常见的网站查询公司组织股权结构的有天眼查、七叉叉、爱七叉、小蓝本、钉钉七点等。
如果标的控股公司不多,可以直接看股权渗透图,比较直观;如果控股公司多,看股权渗透图就比较费劲了。
除了股权渗透,还可以看到它的外资信息
在这两个地方都可以找到目标持股的公司。
目标少一点没关系,一个一个的,但是目标太多了,效率就会很低。幸运的是,现在有现成的工具。
ENScanGo
ENScanGo 是现有开源项目 ENScan 的升级版。工具地址为:
这是沃尔夫集团安全团队Keac先生为解决企业信息采集难的问题而编写的工具。一键采集标的及其控股公司的ICP备案、APP、小程序、微信公众号等信息。然后聚合导出。
比如这里我采集的信息是“北京百度网通科技有限公司”。以及他持有50%股份的公司。
enscan -n 北京百度网讯科技有限公司 -invest-num 50
采集到的结果如下:
这样就直接省略了采集ICP备案的步骤,可以一键获取目标公司及其子公司的公司名称、APP、微信公众号、ICP备案等信息。
2、主域名查询
主域名查询可分为注册域名查询和未注册域名查询。
记录域名查询
除了上述企业信息查询网站获得的备案信息外,最完整、最准确的方法是去国家备案信息查询网站查询,地址为:。
除了官方渠道,还有一些第三方注册域名查询网站,比如站长之家等。
未注册域名查询
一些公司会将他们的其他业务站点放在 网站 的末尾,其中可能收录未记录的站点。
3、子域获取
比较常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目标,也可以提前采集一波子域,然后在项目即将启动的时候再采集一波子域,比较两次采集的结果,优先新的子域。
4、端口扫描
一般来说,最常见的是nmap和masscan。这是一个 nmap 快速扫描所有端口的命令。
nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p 1-65535 -iL ip.txt -oX output.xml
不过除了这些方法,fscan其实还可以用于外网的端口扫描,而且速度更快。
例如,使用 fscan 只扫描端口,而不是扫描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默认线程是600,因为外网扫描600的线程比较大,所以这里设置为100。如果扫描结果不理想,可以将线程设置得更小。
端口扫描可以与空间搜索引擎的结果相结合。如果空间搜索引擎发现目标中有很多高级端口,那么在进行端口扫描时记得添加这些高级端口。
5、指纹识别
指纹识别对我来说是很重要的一点,因为指纹识别的结果对管理很有帮助,可以让管理更有针对性,同时也可以节省很多时间。
比较常见的在线指纹查询网站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空间搜索引擎
通过使用空间搜索引擎,您有时可以在首次识别目标时发现目标弱点。
目前比较常见的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鹰、智创宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer为图形界面,使用友好。
下载链接:
FofaX 是一个命令行界面。FofaX 可以与其他工具结合使用。除了这两个工具调用Fofa接口外,上面提到的Ehole还可以调用Fofa查询。
坤宇调用ZoomEye的接口,工具下载地址:
7、api接口
获取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果发现一些未经授权的接口,可能会获得一些高价值的信息,例如大量敏感信息泄露。
另外,在翻转js文件的时候,可以注意是否有以runtime命名的js文件,因为这个js文件会收录其他js文件的名字(包括当前页面没有加载的js文件),所以使用运行时js文件我发现了更多的js文件,这使得找到api接口的概率更高。
8、目录访问
比较常用的目录扫描工具有dirsearch、ffuf
ffuf 更侧重于 FFUZ,但无论是目录扫描还是 FFUZ,扫描的结果都是字典,Github 上超过 4k 个star 的字典:
9、邮箱地址获取
邮件地址比较常用的方法是通过搜索引擎直接找到网上公开的邮件信息,往往指向目标的网站,例如目标的某个网页的附件中收录email和其他信息。
此外,您还可以使用Github在代码中搜索目标公司的开发人员评论的邮箱信息。其实我不明白为什么开发者喜欢在代码中评论自己的邮箱。
也可以通过LinkedIn找到目标公司的员工姓名,通过“拼音+@公司域名”的方式构建员工邮箱。
还有一些网站可以查询邮箱,比较方便,比如下面的网站:
另外,如果采集到目标Outlook站点,也可以尝试爆破邮箱用户名。
10、网盘信息
有时候可以在网盘资料中找到很多好东西,这样的网站还有很多。在爱达杂货店导航站可以找到很多网盘搜索网站。
11、附加信息
其他信息,如app、小程序、供应商、外包合作伙伴、公众号等,都可以从上面的组织股权结构类网站中或多或少的查询到,也可以使用ENScan。
其中,供应商和外包合作伙伴值得注意。如果拿下供应商,或许可以直接进入目标内网。如果赢得外包合作伙伴,可以利用这一层关系进行社会工作或尝试进入目标内网。
后记
当然,红队中采集的信息远不止上面所说的。其他常用的还有资产监控平台、社会工程库、自动化信息采集工具(如水泽)、各种内部红队平台等,篇幅有限。再次展开。
美好的过去文章
技巧:下载自媒体内容素材,帮你快速创造内容
下载自媒体内容材料,帮助您快速创建内容。在这个自媒体飞速发展的时代,大家都在这方面发展,但是对于一些新手来说,如何进行内容创作就成了一个难题,因为大家的知识储备都不是很丰富,经常会遇到没有灵感的情况。
对于这种情况,我们有一个很好的解决办法,就是找内容素材。内容素材的采集可以参考以下方法,一起来看看吧。
第一个:使用工具采集材料
当大家想到工具采集材质的时候,首先想到的就是一转,因为一转已经是家喻户晓的材质采集工具,它可以用于采集视频和文章素材,没有灵感的时候可以去一转搜索相关关键词,可以找到相关素材,还可以选择时间和平台材料发布。
二:搜索引擎找素材
这种找素材的方法也是比较常用的方法,很多人习惯直接去百度找素材。对于需要少量素材的自媒体的人来说也比较方便。选择您自己的主题。
第三:微博热搜榜
一般来说,关注微博热搜榜自媒体的人往往更多地在娱乐和社交领域。微博有实时列表。如果根据热点进行创作,你的流量肯定会增加。会很大,其他领域的作者也可以试试。
第四:知乎
知乎也是不错的素材采集,知乎素材很多,是一个问答平台,里面的答案也很精彩,你可以直接搜索相关知识,相信你会有所收获。大家素材采集完成后,可以直接使用易小儿一键发视频或者文章,省心省力。 查看全部
总结:连载|浅谈红队中的外网信息收集(一)
文章首次发表于:
火线区社区()
前言
最近一直在整理总结以往学过的关于红队的知识点。这里我主要指的是ATT&CK矩阵模型,不过做了简化,增加了一些国内独有的情况。
一般会按照外网信息采集、管理、权限维护、权限升级、内网信息采集、横向移动、痕迹清理的顺序进行。
因为是总结文章,所以文章的重点是在“面”上而不是在具体的“点”上,所以文中的具体技术细节不再赘述,否则内容会有很多。
想了解具体细节的读者可以去我个人公众号TeamsSix的历史文章,里面会有一些点的描述文章。
限于个人水平,文中难免有错误或不恰当的描述,希望在评论中指出,希望理解。
确定目标
在开始信息采集之前,您必须首先确定目标。在红队项目或HW项目中,一般目标是公司名称,然后通过公司名称获取各种信息,进而进行外网管理、内网穿透等。
知道了目标公司的名称后,我们就可以开始采集信息的工作了。
外网信息采集
在这里我整理了以下信息采集的方法。当然,它肯定是不完整的。欢迎大家在评论区一起补充讨论:
1、组织所有权结构
拿到公司名称后,先别急着查记录找域名,而是先看公司的股权结构,因为一般一家公司的子公司也可以瞄准,但有时需要50%的股份。股份或100%持股,视实际情况而定。
比较常见的网站查询公司组织股权结构的有天眼查、七叉叉、爱七叉、小蓝本、钉钉七点等。
如果标的控股公司不多,可以直接看股权渗透图,比较直观;如果控股公司多,看股权渗透图就比较费劲了。
除了股权渗透,还可以看到它的外资信息
在这两个地方都可以找到目标持股的公司。
目标少一点没关系,一个一个的,但是目标太多了,效率就会很低。幸运的是,现在有现成的工具。
ENScanGo
ENScanGo 是现有开源项目 ENScan 的升级版。工具地址为:
这是沃尔夫集团安全团队Keac先生为解决企业信息采集难的问题而编写的工具。一键采集标的及其控股公司的ICP备案、APP、小程序、微信公众号等信息。然后聚合导出。
比如这里我采集的信息是“北京百度网通科技有限公司”。以及他持有50%股份的公司。

enscan -n 北京百度网讯科技有限公司 -invest-num 50
采集到的结果如下:
这样就直接省略了采集ICP备案的步骤,可以一键获取目标公司及其子公司的公司名称、APP、微信公众号、ICP备案等信息。
2、主域名查询
主域名查询可分为注册域名查询和未注册域名查询。
记录域名查询
除了上述企业信息查询网站获得的备案信息外,最完整、最准确的方法是去国家备案信息查询网站查询,地址为:。
除了官方渠道,还有一些第三方注册域名查询网站,比如站长之家等。
未注册域名查询
一些公司会将他们的其他业务站点放在 网站 的末尾,其中可能收录未记录的站点。
3、子域获取
比较常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目标,也可以提前采集一波子域,然后在项目即将启动的时候再采集一波子域,比较两次采集的结果,优先新的子域。
4、端口扫描
一般来说,最常见的是nmap和masscan。这是一个 nmap 快速扫描所有端口的命令。
nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p 1-65535 -iL ip.txt -oX output.xml
不过除了这些方法,fscan其实还可以用于外网的端口扫描,而且速度更快。
例如,使用 fscan 只扫描端口,而不是扫描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默认线程是600,因为外网扫描600的线程比较大,所以这里设置为100。如果扫描结果不理想,可以将线程设置得更小。
端口扫描可以与空间搜索引擎的结果相结合。如果空间搜索引擎发现目标中有很多高级端口,那么在进行端口扫描时记得添加这些高级端口。
5、指纹识别
指纹识别对我来说是很重要的一点,因为指纹识别的结果对管理很有帮助,可以让管理更有针对性,同时也可以节省很多时间。
比较常见的在线指纹查询网站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空间搜索引擎
通过使用空间搜索引擎,您有时可以在首次识别目标时发现目标弱点。

目前比较常见的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鹰、智创宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer为图形界面,使用友好。
下载链接:
FofaX 是一个命令行界面。FofaX 可以与其他工具结合使用。除了这两个工具调用Fofa接口外,上面提到的Ehole还可以调用Fofa查询。
坤宇调用ZoomEye的接口,工具下载地址:
7、api接口
获取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果发现一些未经授权的接口,可能会获得一些高价值的信息,例如大量敏感信息泄露。
另外,在翻转js文件的时候,可以注意是否有以runtime命名的js文件,因为这个js文件会收录其他js文件的名字(包括当前页面没有加载的js文件),所以使用运行时js文件我发现了更多的js文件,这使得找到api接口的概率更高。
8、目录访问
比较常用的目录扫描工具有dirsearch、ffuf
ffuf 更侧重于 FFUZ,但无论是目录扫描还是 FFUZ,扫描的结果都是字典,Github 上超过 4k 个star 的字典:
9、邮箱地址获取
邮件地址比较常用的方法是通过搜索引擎直接找到网上公开的邮件信息,往往指向目标的网站,例如目标的某个网页的附件中收录email和其他信息。
此外,您还可以使用Github在代码中搜索目标公司的开发人员评论的邮箱信息。其实我不明白为什么开发者喜欢在代码中评论自己的邮箱。
也可以通过LinkedIn找到目标公司的员工姓名,通过“拼音+@公司域名”的方式构建员工邮箱。
还有一些网站可以查询邮箱,比较方便,比如下面的网站:
另外,如果采集到目标Outlook站点,也可以尝试爆破邮箱用户名。
10、网盘信息
有时候可以在网盘资料中找到很多好东西,这样的网站还有很多。在爱达杂货店导航站可以找到很多网盘搜索网站。
11、附加信息
其他信息,如app、小程序、供应商、外包合作伙伴、公众号等,都可以从上面的组织股权结构类网站中或多或少的查询到,也可以使用ENScan。
其中,供应商和外包合作伙伴值得注意。如果拿下供应商,或许可以直接进入目标内网。如果赢得外包合作伙伴,可以利用这一层关系进行社会工作或尝试进入目标内网。
后记
当然,红队中采集的信息远不止上面所说的。其他常用的还有资产监控平台、社会工程库、自动化信息采集工具(如水泽)、各种内部红队平台等,篇幅有限。再次展开。
美好的过去文章
技巧:下载自媒体内容素材,帮你快速创造内容
下载自媒体内容材料,帮助您快速创建内容。在这个自媒体飞速发展的时代,大家都在这方面发展,但是对于一些新手来说,如何进行内容创作就成了一个难题,因为大家的知识储备都不是很丰富,经常会遇到没有灵感的情况。
对于这种情况,我们有一个很好的解决办法,就是找内容素材。内容素材的采集可以参考以下方法,一起来看看吧。
第一个:使用工具采集材料

当大家想到工具采集材质的时候,首先想到的就是一转,因为一转已经是家喻户晓的材质采集工具,它可以用于采集视频和文章素材,没有灵感的时候可以去一转搜索相关关键词,可以找到相关素材,还可以选择时间和平台材料发布。
二:搜索引擎找素材
这种找素材的方法也是比较常用的方法,很多人习惯直接去百度找素材。对于需要少量素材的自媒体的人来说也比较方便。选择您自己的主题。
第三:微博热搜榜

一般来说,关注微博热搜榜自媒体的人往往更多地在娱乐和社交领域。微博有实时列表。如果根据热点进行创作,你的流量肯定会增加。会很大,其他领域的作者也可以试试。
第四:知乎
知乎也是不错的素材采集,知乎素材很多,是一个问答平台,里面的答案也很精彩,你可以直接搜索相关知识,相信你会有所收获。大家素材采集完成后,可以直接使用易小儿一键发视频或者文章,省心省力。
秘密:如何对专属SRC进行信息收集
采集交流 • 优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-09-27 23:15
前言
一直觉得自己的资料采集不太好,最近才在挖独家。顺便总结一下公司的信息采集方式
以xxx公司为例
根域名:
涉及本公司的部分已经编码,补充部分使用一定的安心和一定的度数
一、子域集合1.Oneforall
尽量把API凑齐,如果fofa可以请大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一个在网页的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
运行后会生成两个txt文本,JSurl.txt是URL,里面会有一些接口,
JSdomain.txt 是一个子域
3.图层
4.subDomainsBrute
<p style="outline: 0px;">python subDomainsBrute.py -t 10 xxx.cn -o xxx.cn.txt
python subDomainsBrute.py -t 10 --full xxx.cn -o xxx.cn.txt //全扫描</p>
5.子列表3r
此工具可以安装在 Kali 和 Windows 环境中
卡利:
<p style="outline: 0px;">git clone https://github.com/aboul3la/Sublist3r</p>
下载后
<p style="outline: 0px;">python sublist3r.py -d 6pian.cn -o xxx.cn-sublist3r.txt</p>
6.DNSdumpster
非常好用的域名搜索网站,还会自动汇总同一个IP的多个域名
7.在线域名爆炸
8. 小蓝图
9.谷歌语法
谷歌/必应:网站:
<p style="outline: 0px;">site:xxx.cn</p>
如果你发现很多检索到的结果都是www,那是众所周知的,主站点一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
结果会自动删除www
然后一一减去网站
二、公众号采集1.搜狗搜索引擎
2.企业叉叉
三、微信小程序七叉戟
爱奇茶之类的都可以用,但是我发现爱奇茶找到的奇茶并不多,不过大家都可以试试
四、 应用程序1.小蓝图
2.企业叉叉
3.浸
4.七麦
七麦也可以在这里切换苹果和安卓
然后获取下载链接下载apk并扔进模拟器
五、 指纹识别1. BugScaner
主站不识别,其他分站可以扔进去看看
2.潮汐指纹
3.Kscan
此工具需要go环境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github
github敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区。安全意识薄弱的同事经常将公司代码、各种服务账号等极其敏感的信息“开源”到github。
这里可以使用github找到带有这个关键字的代码,这样可以采集到更广泛的方面
2.网盘搜索
很多磁盘:
磁盘搜搜:
磁盘搜索:
凌云峰搜索:
直接输入厂家名称,然后搜索看看源代码是否泄露,或者什么账号密码之类的
3.路径扫描
404,403页,并不是真的什么都没有,需要一层一层的fuzz,一层一层的往下扫
工具:
1.目录搜索
2.剑
3.7kbscan
当每个工具扫描同一个站点时,会显示不同的路径。建议扫描所有三个工具。
找到一些其他的东西,比如背景、登录系统等。你可以使用 Google Hacking
<p style="outline: 0px;">site:xxx.com admin
site:xxx.com login
site:xxx.com system
site:xxx.com 管理
site:xxx.com 登录
site:xxx.com 内部
site:xxx.com 系统</p>
4.基于证书
5. 查找 网站
这个图标基于 shodan
Shodan搜索中有一个网站icon图标的搜索语法,http.favicon.hash,我们可以用这个语法搜索网站
使用相同图标的图标
因为哈希是一个未知的随机数
所以通过输入某个hash值来搜索指定图标的网站是不可能的
只有查看一个已经被Shodan收录使用过的网站的hash值,才能进一步得到所有带有某个图标的网站。
那么这里的用法就很有限了,你只能尝试找到你需要找到的网站,因为Shodan不一定收录你要搜索的网站。
那么如果Shodan收录有某个ip,并且这个服务器有某个图标,我可以搜索所有有这个图标的服务器ip吗?答案是肯定的。
以百度为例,这里是一个ip为180.97.34.35的服务器,截图如下
如果我想搜索所有带有这个图标的ip地址,我可以先在Shodan中搜索这个ip
在此之前我没有注意到的一件事是 Shodan 的原创数据(Raw Data)函数
点击详情中的查看原创数据,打开原创数据,可以看到Shodan存储的这个ip的所有信息。因为东西太多,就不一一截图了
这里我们需要用到这个关于图标hash的字段,data。0.http.favicon.hash,
如图
可以看到结果是-1507567067,
知识和经验:信息采集
这个功能是第一个数据采集功能,我也做了一个用于第二个整理:存档
如果你有更好的想法和使用方法,欢迎交流
---
以obsidian作为数据处理中心,支持日常工作采集和一键生成tick list to-do
支持的采集方式:
1、选择文字快速采集
2、OCR识别与采集
3、截图集
4、快速文件采集
操作方法:复制文件或文件夹,可以快速将文件分类成黑曜石。如果是文件夹,会自动删除文件夹,按文件采集
5、数学公式快速采集(使用默认界面,每次识别花费Q豆)
6、生成待办事项并设置提醒时间
一键生成文本待办,并在tick list中回写黑曜石链接
一键生成文件待办,在tick列表中回写黑曜石链接
7、结合手机日历功能,可实现手机自动提醒,华为手机可一次性播放日历内容,使用更方便!
使用前需要下载tick list、obsidian、需要设置的日历文件夹、附件存放文件夹 查看全部
秘密:如何对专属SRC进行信息收集
前言
一直觉得自己的资料采集不太好,最近才在挖独家。顺便总结一下公司的信息采集方式
以xxx公司为例
根域名:
涉及本公司的部分已经编码,补充部分使用一定的安心和一定的度数
一、子域集合1.Oneforall
尽量把API凑齐,如果fofa可以请大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一个在网页的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
运行后会生成两个txt文本,JSurl.txt是URL,里面会有一些接口,
JSdomain.txt 是一个子域
3.图层
4.subDomainsBrute
<p style="outline: 0px;">python subDomainsBrute.py -t 10 xxx.cn -o xxx.cn.txt
python subDomainsBrute.py -t 10 --full xxx.cn -o xxx.cn.txt //全扫描</p>
5.子列表3r
此工具可以安装在 Kali 和 Windows 环境中
卡利:
<p style="outline: 0px;">git clone https://github.com/aboul3la/Sublist3r</p>
下载后
<p style="outline: 0px;">python sublist3r.py -d 6pian.cn -o xxx.cn-sublist3r.txt</p>
6.DNSdumpster
非常好用的域名搜索网站,还会自动汇总同一个IP的多个域名
7.在线域名爆炸
8. 小蓝图
9.谷歌语法
谷歌/必应:网站:

<p style="outline: 0px;">site:xxx.cn</p>
如果你发现很多检索到的结果都是www,那是众所周知的,主站点一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
结果会自动删除www
然后一一减去网站
二、公众号采集1.搜狗搜索引擎
2.企业叉叉
三、微信小程序七叉戟
爱奇茶之类的都可以用,但是我发现爱奇茶找到的奇茶并不多,不过大家都可以试试
四、 应用程序1.小蓝图
2.企业叉叉
3.浸
4.七麦
七麦也可以在这里切换苹果和安卓
然后获取下载链接下载apk并扔进模拟器
五、 指纹识别1. BugScaner
主站不识别,其他分站可以扔进去看看
2.潮汐指纹
3.Kscan
此工具需要go环境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github

github敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区。安全意识薄弱的同事经常将公司代码、各种服务账号等极其敏感的信息“开源”到github。
这里可以使用github找到带有这个关键字的代码,这样可以采集到更广泛的方面
2.网盘搜索
很多磁盘:
磁盘搜搜:
磁盘搜索:
凌云峰搜索:
直接输入厂家名称,然后搜索看看源代码是否泄露,或者什么账号密码之类的
3.路径扫描
404,403页,并不是真的什么都没有,需要一层一层的fuzz,一层一层的往下扫
工具:
1.目录搜索
2.剑
3.7kbscan
当每个工具扫描同一个站点时,会显示不同的路径。建议扫描所有三个工具。
找到一些其他的东西,比如背景、登录系统等。你可以使用 Google Hacking
<p style="outline: 0px;">site:xxx.com admin
site:xxx.com login
site:xxx.com system
site:xxx.com 管理
site:xxx.com 登录
site:xxx.com 内部
site:xxx.com 系统</p>
4.基于证书
5. 查找 网站
这个图标基于 shodan
Shodan搜索中有一个网站icon图标的搜索语法,http.favicon.hash,我们可以用这个语法搜索网站
使用相同图标的图标
因为哈希是一个未知的随机数
所以通过输入某个hash值来搜索指定图标的网站是不可能的
只有查看一个已经被Shodan收录使用过的网站的hash值,才能进一步得到所有带有某个图标的网站。
那么这里的用法就很有限了,你只能尝试找到你需要找到的网站,因为Shodan不一定收录你要搜索的网站。
那么如果Shodan收录有某个ip,并且这个服务器有某个图标,我可以搜索所有有这个图标的服务器ip吗?答案是肯定的。
以百度为例,这里是一个ip为180.97.34.35的服务器,截图如下
如果我想搜索所有带有这个图标的ip地址,我可以先在Shodan中搜索这个ip
在此之前我没有注意到的一件事是 Shodan 的原创数据(Raw Data)函数
点击详情中的查看原创数据,打开原创数据,可以看到Shodan存储的这个ip的所有信息。因为东西太多,就不一一截图了
这里我们需要用到这个关于图标hash的字段,data。0.http.favicon.hash,
如图
可以看到结果是-1507567067,
知识和经验:信息采集
这个功能是第一个数据采集功能,我也做了一个用于第二个整理:存档
如果你有更好的想法和使用方法,欢迎交流
---
以obsidian作为数据处理中心,支持日常工作采集和一键生成tick list to-do
支持的采集方式:
1、选择文字快速采集

2、OCR识别与采集
3、截图集
4、快速文件采集
操作方法:复制文件或文件夹,可以快速将文件分类成黑曜石。如果是文件夹,会自动删除文件夹,按文件采集
5、数学公式快速采集(使用默认界面,每次识别花费Q豆)
6、生成待办事项并设置提醒时间
一键生成文本待办,并在tick list中回写黑曜石链接

一键生成文件待办,在tick列表中回写黑曜石链接
7、结合手机日历功能,可实现手机自动提醒,华为手机可一次性播放日历内容,使用更方便!
使用前需要下载tick list、obsidian、需要设置的日历文件夹、附件存放文件夹
官方数据:爬虫数据采集
采集交流 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-09-26 07:16
经常有小伙伴需要将互联网上的数据保存在本地,但又不想一一复制。我们首先想到的就是爬虫,可以说是组成了我们精彩的互联网世界。
网络搜索引擎和其他一些网站使用网络爬虫或蜘蛛软件来更新他们的网络内容或其他网站网络内容索引。网络爬虫复制页面以供搜索引擎处理,搜索引擎将下载的页面编入索引,以便用户更有效地搜索。
这一切都归功于爬虫数据采集。在这篇文章我总结了爬虫数据采集的过程,从最简单的基础爬虫开始,到爬虫获取到的数据采集如何存储,我们如何规避它。采取一些反爬措施,获取我们需要的数据,进行爬虫的数据采集:
通过以上18篇文章,详细介绍了整个爬虫采集流程,几乎涉及到爬虫的方方面面采集。
解决方案:任意网页文章内容提取(采集)算法
任意网页文章内容提取(采集)算法
标签:采集程序开发 2014-04-09 19:10 星期三
做过采集的人都知道,要采集一个网站,需要按照网站的结构写一个正则模式。这是最传统的方法。这种方法的好处是采集精度可以很精细,采集任意结构网站,但是这种方法也很有限,一套规则只能用于一个网站 ,如果结构发生变化,需要重新分析和调整规则,非常被动。
我一直在想,如果程序能达到人类的识别水平,那么它就可以采集any网站文本的内容。网上搜索了一下,已经有很多类似的算法了。有以下几种:
1、基于Dom树
1),使用开源包HTML Tidy处理HTML,纠正错误或不规范;
2),按照更标准的HTML构建Dom树,然后递归遍历Dom树,比较识别各种非文本信息,包括广告、链接组和非重要节点信息;广告信息清除:需要建立广告服务器频繁更新列表;链接组去除:计算网页中收录的链接数与非链接词数的比值;
3),去掉非文本信息后,Dom树中剩下的内容就是文本信息,直接从剩余的树节
从点中提取。
有一个问题:Dom树的建立对HTML是否良构有很高的要求,树的建立和遍历是时空的
复杂度高,遍历树的方式会因HTML标签的不同而有所差异。
2、根据网页切分查找文本块
1),网页正确切分后,文本提取工作简化为对文本块的判断;
2),分割是在HTML标签和一些视觉信息(如文本颜色、字体大小、文本信息等)中使用分隔线。
存在问题:不同网站的HTML样式差异很大,没有统一的切分方法,通用性难以保证。
3、基于标记窗口
1),先取出文章标题;
2),这两个标签和它们一起收录的文本称为标签窗口(例如text in text就是标签窗口中的文本),将标签窗口中的文本全部取出;
3),每个标记窗口内的文章标题和文本的分词;
4),计算标题序列与每个标签窗口文本序列之间的单词距离L,如果L小于某个阈值,则认为该标签窗口中的文本为正文。
有一个问题:标注窗口的制定很好,但是每个标注窗口的文本都要先切分,还要计算词序距离,效率?
4、基于数据挖掘或机器学习
使用了文本分类、聚类、隐马模型、数据挖掘等。
有问题:简单的问题复杂化。
5、基于逻辑行数和最大接受距离的网页文本提取
1),在人们写网页的时候考虑一些启发式规则,考虑到文字的物理位置会很接近;
2),做出以下推论:
HTML的每一行代表一个完整的语义;
身体代码将在物理上靠近;
一行正文代码主要是文本;
一行正文代码中的非HTML标签数量较多;
一行正文代码中超链接长度的比例不会很大;
3),任何符合上述推论的代码行都被认为是正文行;
有一个问题:文字确实会在物理上接近,但是长标题和长文章评论的链接组也满足上述条件。还是靠html标签来做判断的。
6、基于行块分布函数的通用网页文本提取:线性时间,不建DOM树,独立于HTML标签
首次将网页文本提取问题转化为页面的行块分布函数。这种方法不需要构建Dom树,也没有病态HTML的包袱(其实和HTML标签无关)。通过线性时间建立的线块分布函数图,可以直接准确定位网页正文。同时采用统计与规则相结合的方法来处理一般性问题。作者认为,简单的事情总是应该用最简单的方法来解决。整个算法实现代码不到一百行。但数额并不多,这是在法律规定的。
项目网址:,/p/cx-extractor/
以上算法均来自第六种算法的分析论文。
第 6 种算法在我看来是最好的算法,它快速且易于实现。但也有缺点。该算法主要针对采集文章,即文本内容较多的网页,因为原理是对网页进行去标签,然后分块,哪个块有更多的文字。认为是文字,在使用过程中发现如下问题:
1、不能采集图像;
2、误区采集链接聚合块作为正文,如:相关文章、文章导读,这些地方的标题文字有时可能会超出正文文本;
3、没有标题识别。
对代码的简单修复解决了上述问题:
1、保存图片标签,改用[img=x];
2、保存链接文本,使用[a=x]代替链接块;
3、标题识别比较容易,可以从标题中获取,然后做简单的过滤。
修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者也在论文中解释了这一点。
目前方案还没有完全准确,个别类型网站还是不适用的,比如相册(纯图片)、电影(线路链接)。
应用:,/
网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度找到类似的网站,但那些网站可能不是这样的,也可能是简单的关键词积累。
相信经过重新设计,我们可以实现更精准的匹配,效果会越来越好!
修复完美,到时候分享代码。请关注我的博客Slipper Station(,/),希望和大家一起学习。 查看全部
官方数据:爬虫数据采集
经常有小伙伴需要将互联网上的数据保存在本地,但又不想一一复制。我们首先想到的就是爬虫,可以说是组成了我们精彩的互联网世界。

网络搜索引擎和其他一些网站使用网络爬虫或蜘蛛软件来更新他们的网络内容或其他网站网络内容索引。网络爬虫复制页面以供搜索引擎处理,搜索引擎将下载的页面编入索引,以便用户更有效地搜索。
这一切都归功于爬虫数据采集。在这篇文章我总结了爬虫数据采集的过程,从最简单的基础爬虫开始,到爬虫获取到的数据采集如何存储,我们如何规避它。采取一些反爬措施,获取我们需要的数据,进行爬虫的数据采集:

通过以上18篇文章,详细介绍了整个爬虫采集流程,几乎涉及到爬虫的方方面面采集。
解决方案:任意网页文章内容提取(采集)算法
任意网页文章内容提取(采集)算法
标签:采集程序开发 2014-04-09 19:10 星期三
做过采集的人都知道,要采集一个网站,需要按照网站的结构写一个正则模式。这是最传统的方法。这种方法的好处是采集精度可以很精细,采集任意结构网站,但是这种方法也很有限,一套规则只能用于一个网站 ,如果结构发生变化,需要重新分析和调整规则,非常被动。
我一直在想,如果程序能达到人类的识别水平,那么它就可以采集any网站文本的内容。网上搜索了一下,已经有很多类似的算法了。有以下几种:
1、基于Dom树
1),使用开源包HTML Tidy处理HTML,纠正错误或不规范;
2),按照更标准的HTML构建Dom树,然后递归遍历Dom树,比较识别各种非文本信息,包括广告、链接组和非重要节点信息;广告信息清除:需要建立广告服务器频繁更新列表;链接组去除:计算网页中收录的链接数与非链接词数的比值;
3),去掉非文本信息后,Dom树中剩下的内容就是文本信息,直接从剩余的树节
从点中提取。
有一个问题:Dom树的建立对HTML是否良构有很高的要求,树的建立和遍历是时空的
复杂度高,遍历树的方式会因HTML标签的不同而有所差异。
2、根据网页切分查找文本块
1),网页正确切分后,文本提取工作简化为对文本块的判断;
2),分割是在HTML标签和一些视觉信息(如文本颜色、字体大小、文本信息等)中使用分隔线。
存在问题:不同网站的HTML样式差异很大,没有统一的切分方法,通用性难以保证。
3、基于标记窗口
1),先取出文章标题;

2),这两个标签和它们一起收录的文本称为标签窗口(例如text in text就是标签窗口中的文本),将标签窗口中的文本全部取出;
3),每个标记窗口内的文章标题和文本的分词;
4),计算标题序列与每个标签窗口文本序列之间的单词距离L,如果L小于某个阈值,则认为该标签窗口中的文本为正文。
有一个问题:标注窗口的制定很好,但是每个标注窗口的文本都要先切分,还要计算词序距离,效率?
4、基于数据挖掘或机器学习
使用了文本分类、聚类、隐马模型、数据挖掘等。
有问题:简单的问题复杂化。
5、基于逻辑行数和最大接受距离的网页文本提取
1),在人们写网页的时候考虑一些启发式规则,考虑到文字的物理位置会很接近;
2),做出以下推论:
HTML的每一行代表一个完整的语义;
身体代码将在物理上靠近;
一行正文代码主要是文本;
一行正文代码中的非HTML标签数量较多;
一行正文代码中超链接长度的比例不会很大;
3),任何符合上述推论的代码行都被认为是正文行;
有一个问题:文字确实会在物理上接近,但是长标题和长文章评论的链接组也满足上述条件。还是靠html标签来做判断的。
6、基于行块分布函数的通用网页文本提取:线性时间,不建DOM树,独立于HTML标签

首次将网页文本提取问题转化为页面的行块分布函数。这种方法不需要构建Dom树,也没有病态HTML的包袱(其实和HTML标签无关)。通过线性时间建立的线块分布函数图,可以直接准确定位网页正文。同时采用统计与规则相结合的方法来处理一般性问题。作者认为,简单的事情总是应该用最简单的方法来解决。整个算法实现代码不到一百行。但数额并不多,这是在法律规定的。
项目网址:,/p/cx-extractor/
以上算法均来自第六种算法的分析论文。
第 6 种算法在我看来是最好的算法,它快速且易于实现。但也有缺点。该算法主要针对采集文章,即文本内容较多的网页,因为原理是对网页进行去标签,然后分块,哪个块有更多的文字。认为是文字,在使用过程中发现如下问题:
1、不能采集图像;
2、误区采集链接聚合块作为正文,如:相关文章、文章导读,这些地方的标题文字有时可能会超出正文文本;
3、没有标题识别。
对代码的简单修复解决了上述问题:
1、保存图片标签,改用[img=x];
2、保存链接文本,使用[a=x]代替链接块;
3、标题识别比较容易,可以从标题中获取,然后做简单的过滤。
修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者也在论文中解释了这一点。
目前方案还没有完全准确,个别类型网站还是不适用的,比如相册(纯图片)、电影(线路链接)。
应用:,/
网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度找到类似的网站,但那些网站可能不是这样的,也可能是简单的关键词积累。
相信经过重新设计,我们可以实现更精准的匹配,效果会越来越好!
修复完美,到时候分享代码。请关注我的博客Slipper Station(,/),希望和大家一起学习。
测评:前端监控系列3 | 如何衡量一个站点的性能好坏
采集交流 • 优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-09-21 13:16
注意干货,不要迷路
1. 背景
你知道有多少用户没有等待第一个屏幕出现就离开了吗?性能不佳会对业务目标产生负面影响。例如,BBC 发现,他们的 网站 加载时间每增加一秒,他们就会失去 10% 的用户。高绩效网站比低绩效网站更能吸引和留住用户,而用户留存对于提高用户转化率至关重要。
本篇文章就是以此为背景,介绍Byte如何内部衡量网站性能,以及如何依靠性能监控来定位在线网站性能问题。
2. 如何衡量网站性能
网站性能有多种表现形式。并不是简单的以页面加载速度和页面渲染速度来衡量,而是需要关注用户从页面加载开始到关闭过程的性能感知。一个页面,即使渲染得很快,如果对用户交互反应慢,那么网站在用户心目中的表现还是很差的。
站点性能一般可以分为两类,一类是首屏性能,一类是运行时性能。前者衡量页面从加载到稳定交互的性能,后者衡量页面稳定后直到页面关闭的性能。
3. 首屏表现
早在 2012 年,Web 性能工作组 [1] 就针对页面加载场景开发了一个加载过程模型,用于衡量页面加载各个阶段的耗时,从而衡量页面加载的性能。具体加载过程模型如图:
该模型定义了从开始页面加载到完成整个页面加载过程的时间点。除了正常的初始化和拉到主文档之外,还包括解析和渲染的详细时间点。例如:
虽然开发者可以根据这些时间点来衡量页面加载的性能,但在线用户却无法真正感知到这些时间点之间的差异。对于用户来说,只有页面什么时候开始渲染,主要内容什么时候渲染,什么时候可以交互,交互是否有延迟。
那么有没有什么指标可以用来衡量用户感知的四个阶段呢?
3.1 何时开始渲染:FP && FCP
这两个指标来源于Paint Timing [2]标准,主要记录页面加载过程中的一些关键时间点。使用这两个指标,您可以衡量页面何时开始呈现内容。
3.2 主要内容什么时候渲染:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时呈现其主要内容。但是,业内一些测试表明,LCP与FMP的时间点非常相似。同时,FMP对性能的消耗很大,会因为一些微小的变化而造成数值的巨大波动。因此,建议使用 LCP。但由于计算复杂、指标解读困难,SI一般只用于实验室环境。
3.3 我们什么时候可以互动:TTI && TBT
虽然 TTI 可以测量页面可以交互的时间点,但它无法感知此期间浏览器的繁忙状态。结合 TBT,它有助于了解页面在加载期间无法响应用户输入的时间。
3.4 交互时是否有延迟:FID && MPFID
MPFID是虚拟可能的延迟时间,FID是用户真正的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户对整个应用建立良好的印象。同时,在页面加载阶段,资源处理任务最重,最容易出现输入延迟。
至此,通过以上各阶段的指标,基本可以全面衡量首屏的表现。那么如何衡量运行时性能呢?
4. 运行时性能
运行时性能通常可以通过 Long 任务来感知。长任务主要衡量主线程的繁忙程度。
4.1 长任务
如果一个任务在主线程上运行的时间超过 50 毫秒,它就是一个 Long 任务。如果你能在运行时采集所有的 Long 任务,你就可以知道运行时的性能。在具体实践中,可以将注意力集中在耗时较长的长任务上,并将其与用户行为相关联,可以有效帮助定位网卡原因。
5. 绩效指标的计算原理
有与页面性能相关的指标,那么如何采集这些数据呢?
5.1 采集页面加载过程的耗时阶段
页面加载过程中的时间点主要取决于 Navigation Timing [4] 标准。该标准后来升级为 2.0 版本,对应于 Navigation Timing 2 [5] 标准。两者虽然不同,但可以计算出来。指标基本一致。在浏览器中,可以通过以下方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
根据这些数据,不仅可以计算出 DNS/TCP/Request 的耗时,还可以计算出 DOMReady/DOMParse/Load 的耗时。
5.2 采集 FP && FCP
FP和FCP可以直接通过浏览器提供的API获取,所以采集的原理并不复杂。如果页面已经完成了第一次绘制和第一次内容绘制,可以使用下面的方法直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有第一次开始绘制,则需要通过监听来获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
5.3 采集 LCP
LCP主要依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});
浏览器会多次上报 LCP,一般来说真正的 LCP 是用户交互前最近一次上报的 LCP。因为交互往往会改变用户所看到的,所以用户交互后新上报的 LCP 不再符合 LCP 指标定义。
5.4 采集 与FP/FCP/LCP相比,FMP的采集比较复杂,需要通过算法计算,业界没有统一的算法。但是,比较公认的计算FMP的方法是“确定在加载和渲染过程中页面最大布局变化后的绘制时间为当前页面的FMP”。
由于在页面渲染过程中,“DOM结构变化的时间点”和对应的“渲染时间点”大致相同,所以内部以字节为单位计算FMP的方式是计算DOM结构发生变化的时间点大多数,那就是FMP。
具体步骤如下:
通过 MutationObserver 监控整个页面的每一个 DOM 变化,并触发 MutationObserver 的回调。当回调计算当前DOM树的score并结算时,score对比变化最大的时刻是FMP5.5 采集 TTI && TBT
与FMP类似,浏览器并没有提供直接获取TTI的API,但是有详细的说明如何计算TTI,通过实现相应的说明就可以得到TTI的时间点。
具体描述是:先找到FCP的时间点,然后再找一个安静的窗口向前。一个安静的窗口需要满足三个条件: 1) No Long 任务。2)窗口中处理的 GET 请求不超过两个。3) 窗口时间窗口读取至少应为 5 秒。
窗口前最后一个长任务的结束时间是 TTI。
TBT 可以通过将 FCP 和 TTI 之间的长任务的阻塞时间相加得到。
阻塞时间是Long任务中超过50ms后的任务时间。
5.6 采集 FID && MPFID
FID也依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务时间。可以监控 FCP 后的 Long 任务,比较最长的 long 任务是 MPFID。
虽然浏览器提供了足够的 API 来帮助采集单个性能指标,但在 JS 中计算特定指标更加复杂。原因有二:一是API上报的内容与指标本身的定义存在一些差异,所以在计算时需要处理这些差异;二是在某些场景下,浏览器不会上报相应的内容,需要在这些场景下进行仿真测量。
6. 如何评估网站的整体性能
尽管有许多绩效指标,但每个绩效指标评估一个方面。如何看网站的整体表现是好是坏?对于每一个单独的指标,是否有一个标准来定义指标值被认为是好的特定范围?在线网站性能应考虑哪些性能指标?每个绩效指标的适当权重是多少?
6.1 绩效指标基线
谷歌提供了各种性能指标的基准,具有一定的参考意义。
为什么仅供参考?首先,基线本身正在发生变化。随着指标计算的逐步更新和软硬件的更新,基线也会有一定程度的调整。其次,用户的使用场景也会对性能指标产生很大影响。例如,iOS 用户报告的性能指标普遍优于 Android 用户报告的性能指标。
下面是字节目前内部使用的一些性能指标的基准,基本与谷歌推荐的基准一致。通过这些数据,可以分析网站的绩效达标率。
指标名称Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500
超过 2500
FCP
0-1800
1800-3000
超过 3000
液晶面板
0-2500
2500-4000
超过 4000
TTI
0-3800
3800-7300
超过 7300
FID
0-100
100-300
超过 300
6.2 测量网站满意度
除了常规的性能指标外,网站满意度的衡量还应考虑基于体验的指标,例如专门衡量视觉稳定性的 CLS。
在线站点满意度测量一般会根据灯塔的满意度计算规则,去除一些推荐在实验室环境中测量的指标的权重。
以下是Bytes目前使用的在线站点性能满意度权重计算公式,去掉了SI和TBT这两个不推荐用于在线环境测量的指标。
然后有了一个站点的满意度,我们终于可以知道一个站点的性能好坏了。那么假设性能不好,我们应该如何优化呢?
7. 如何优化网站性能
通常,我们可以从性能指标入手,进行有针对性的优化。虽然指标不同,但优化思路是一样的。了解指标的依赖关系后,可以通过优化指标的相关依赖关系,快速优化性能指标,从而提升站点性能。
听起来很抽象,举个例子:比如我们要优化TTI的时候,根据刚才提到的TTI的计算方法,可以得出TTI的依赖主要有FCP、request和Long任务,然后尽快渲染尽可能快的请求,尽快结束请求,避免长时间的任务是优化的关键。指标的具体优化措施有很多,后续文章会介绍。
了解全面的优化措施很重要,但每一项都不一定能有效解决您网站面临的关键性能问题。如何做到立即有针对性的去优化?通过恢复用户加载时的外观来帮助定位性能问题是一个想法。
8. 使用在线监控定位性能问题
一般来说,前端监控除了监控性能指标外,还会监控请求、资源加载、Long任务等数据。这些数据可以帮助还原用户的加载场景,帮助寻找线索。
例如,在下面的例子中,很多性能指标都很差。通过监控平台还原的资源加载瀑布图可以看出,大部分时间都花在了拉取资源上。然后就可以得到一个初步的性能优化方案,把优化措施集中在资源优化上,比如减小JS文件大小,延迟加载未使用的JS代码等等。
在线监控的例子很多,可以帮助定位性能问题,这里就不一一介绍了。截图中使用了Byte内部的前端监控平台。目前该方案已经在火山引擎上同步,可以实时监控web端的真实数据,接入即可解决告警归属、聚类分析、详细定位等问题。白屏、性能瓶颈、查询慢等关键问题欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
最近发布:WordPress自动采集发布插件专业版WP AutoPost Pro [更新至
目录
亲测完美运行于的 WordPress 各个版本,请放心使用。WP-AutoPost-Pro 是一款优秀的 WordPress 文章采集器,是您操作站群,让网站自动更新内容的利器!采集插件适用对象1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容;2、热点内容自动采集并自动发布;3、定时采集,手动采集发布或保存到草稿;4、css样式规则,能更精确的采集需要的内容。5、伪原创与翻译、代理IP进行采集、保存Cookie记录;6、可采集内容到自定义栏目
WP-AutoPost 插件可以采集来自于任何网站的内容并全自动更新你的WordPress站点。它使用非常简单,无需复杂设置,并且足够强大和稳定,支持wordpress所有特性。可采集任何网站的内容全自动任务采集定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容基本设置功能齐全,完美支持Wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章可下载远程图片及其他任意格式附件到本地服务器,并支持给图片自动添加水印
如果是新手,请查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的wordpress站点。不像其他大部分wordpress采集插件,只能根据Feed进行采集,使用Feed采集有很大的弊端,首先必须找到全文Feed,而现在网上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要点击链接才能查看原文,相当于给别的网站做外链。做英文垃圾站用的比较多的WP-Robot也只有20几个采集来源,文章来源比较单一有限。而WP-AutoPost就没有上面这些劣势,真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签过滤、关键词替换、自动链接、自动标签、自动下载远程图片到本地服务器、自动添加文章前缀后缀、并且可以使用微软翻译引擎将采集的文章自动翻译为各种语言进行发布。
1.可采集任何网站的内容,采集信息一目了然。
通过简单设置可采集来自于任何网站的内容,并可设置多个采集任务同时进行,可设置任务为自动运行或手动运行,主任务列表显示每个采集任务的状况:上次检测采集时间,预计下次检测采集时间,最近采集文章,已采集更新的文章数等信息,方便查看管理。
文章管理功能方便查询、搜索、删除已采集文章,改进算法已从根本上杜绝了重复采集相同文章,日志功能记录采集过程中出现的异常和抓取错误,方便检查设置错误以便进行修复。
2.启用任务后,全自动采集更新,无需人工干预。
启用任务后,定时检测是否有新文章可更新,检测文章是否重复,导入更新文章,这一切操作程序都是全自动完成,无需人工干预。
有两种触发采集更新方式,一种是在页面内添加代码由用户访问触发采集更新(后台异步进行,不影响用户体验,也不影响网站效率),另外可以用Cron计划任务定时触发采集更新任务
3.定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容。
定向采集只需要提供文章列表URL即可智能采集来自于任何网站或栏目内容。
不仅支持“通配符匹配”来采集网页内容,更完美支持各种CSS选择器,只需填写简单的形如#title h1的CSS选择器,便可精确采集网页任何内容。(如何设置CSS选择器)
支持设置关键词,如果标题中包含关键词才允许采集(或过滤掉不允许采集)。
支持设置多个匹配规则采集网页上的不同内容,甚至支持采集任何内容添加到“wordpress自定义栏目”,方便扩展。
4.基本设置功能齐全,完美支持wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息
每个采集任务均可选择发布到的分类目录,发布作者,发布状态,检测更新时间间隔,采集目标网站的字符集,选择是否下载图片或附件。
支持自定义文章类型,自定义文章分类、文章形式。
完美支持wordpress各种特色功能,自动添加标签,自动生成摘要,自动设置特色图片,支持自定义栏目等。
5.可采集微信公众号、头条号等自媒体内容,因百度不收录公众号,头条文章等,可轻松获取优质“原创”文章,增加百度收录量及网站权重
支持采集微信公众号(订阅号)文章,无需复杂配置,只需填入“公众号名称”和“微信号”后即可开始采集。
支持采集今日头条文章,也无需复杂配置
微信公众号及今日头条由于目标限制,为半自动方式采集
6.支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章
支持Google神经网络翻译,翻译质量显著提高,已接近人工翻译效果,将文章标题和内容翻译成其他语言,共支持多种语言之间相互翻译,轻松获取原创文章。使用Google翻译API无需翻墙,只需翻墙获取API相关设置信息设置好后即可正常使用,后续调用API翻译无需翻墙
支持有道神经网络翻译,接近人工翻译效果,有道翻译更懂中文,采集英文文章翻译成中文文章,轻松获取原创文章。
同时支持百度翻译,百度翻译每月翻译字符数低于200万,享免费服务
7.支持中英文各种伪原创方式
支持使用翻译引擎获取伪原创文章,不仅仅只是替换了同义词,更是语义的重新表述,唯一性、伪原创效果更好,支持各种语言。同时集成国外最优秀伪原创工具WordAi等,制作英文站可以获取可读性、唯一性都更好的伪原创文章。
8.支持市面上所有主流对象存储服务,包括七牛云、阿里云OSS、腾讯云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可将文章中图片及附件自动上传到云对象存储服务,节省带宽及空间,提高网站访问速度
七牛云存储,每月享10GB的免费存储空间,10GB免费带宽流量
只需简单配置好相关信息,即可自动上传,通过wordpress后台也能直接查看或管理已上传到云对象存储的图片及文件。
9.支持seo优化,内容过滤,HTML标签过滤,关键词替换,自动添加链接,添加自定义内容,自定义采集后样式、自定义模板等常用功能
自动删除采集内容中的HTML注释,可设置删除标签中的id,class,style属性内容,消除采集的痕迹;自动给图片添加上alt属性,过滤链接,关键词替换,自动添加自定义链接,这些都有利于SEO。
支持内容过滤,过滤采集内容中不希望发布的内容(如广告代码,文章来源,版权等信息),甚至可以在文章任意位置添加上自定义内容,增强文章独特性;也可是设置采集后添加自定义样式功能
也支持HTML标签过滤功能,可过滤掉采集文章中的超链接,script和style标签下的不必要的代码。
付费高速下载:
资源下载此资源下载价格为10元,请先登录
服务条款:
购买即代表你对本站的无偿捐助,非购买本站资源。部分资源禁止在中国大陆下载使用,违者后果自负。同意本条款你方可购买下载本站资源,不同意请离开。
所有资源均需登陆后下载,即使是免费的。 查看全部
测评:前端监控系列3 | 如何衡量一个站点的性能好坏
注意干货,不要迷路
1. 背景
你知道有多少用户没有等待第一个屏幕出现就离开了吗?性能不佳会对业务目标产生负面影响。例如,BBC 发现,他们的 网站 加载时间每增加一秒,他们就会失去 10% 的用户。高绩效网站比低绩效网站更能吸引和留住用户,而用户留存对于提高用户转化率至关重要。
本篇文章就是以此为背景,介绍Byte如何内部衡量网站性能,以及如何依靠性能监控来定位在线网站性能问题。
2. 如何衡量网站性能
网站性能有多种表现形式。并不是简单的以页面加载速度和页面渲染速度来衡量,而是需要关注用户从页面加载开始到关闭过程的性能感知。一个页面,即使渲染得很快,如果对用户交互反应慢,那么网站在用户心目中的表现还是很差的。
站点性能一般可以分为两类,一类是首屏性能,一类是运行时性能。前者衡量页面从加载到稳定交互的性能,后者衡量页面稳定后直到页面关闭的性能。
3. 首屏表现
早在 2012 年,Web 性能工作组 [1] 就针对页面加载场景开发了一个加载过程模型,用于衡量页面加载各个阶段的耗时,从而衡量页面加载的性能。具体加载过程模型如图:
该模型定义了从开始页面加载到完成整个页面加载过程的时间点。除了正常的初始化和拉到主文档之外,还包括解析和渲染的详细时间点。例如:
虽然开发者可以根据这些时间点来衡量页面加载的性能,但在线用户却无法真正感知到这些时间点之间的差异。对于用户来说,只有页面什么时候开始渲染,主要内容什么时候渲染,什么时候可以交互,交互是否有延迟。
那么有没有什么指标可以用来衡量用户感知的四个阶段呢?
3.1 何时开始渲染:FP && FCP
这两个指标来源于Paint Timing [2]标准,主要记录页面加载过程中的一些关键时间点。使用这两个指标,您可以衡量页面何时开始呈现内容。
3.2 主要内容什么时候渲染:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时呈现其主要内容。但是,业内一些测试表明,LCP与FMP的时间点非常相似。同时,FMP对性能的消耗很大,会因为一些微小的变化而造成数值的巨大波动。因此,建议使用 LCP。但由于计算复杂、指标解读困难,SI一般只用于实验室环境。
3.3 我们什么时候可以互动:TTI && TBT
虽然 TTI 可以测量页面可以交互的时间点,但它无法感知此期间浏览器的繁忙状态。结合 TBT,它有助于了解页面在加载期间无法响应用户输入的时间。
3.4 交互时是否有延迟:FID && MPFID
MPFID是虚拟可能的延迟时间,FID是用户真正的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户对整个应用建立良好的印象。同时,在页面加载阶段,资源处理任务最重,最容易出现输入延迟。
至此,通过以上各阶段的指标,基本可以全面衡量首屏的表现。那么如何衡量运行时性能呢?
4. 运行时性能
运行时性能通常可以通过 Long 任务来感知。长任务主要衡量主线程的繁忙程度。
4.1 长任务
如果一个任务在主线程上运行的时间超过 50 毫秒,它就是一个 Long 任务。如果你能在运行时采集所有的 Long 任务,你就可以知道运行时的性能。在具体实践中,可以将注意力集中在耗时较长的长任务上,并将其与用户行为相关联,可以有效帮助定位网卡原因。
5. 绩效指标的计算原理
有与页面性能相关的指标,那么如何采集这些数据呢?
5.1 采集页面加载过程的耗时阶段
页面加载过程中的时间点主要取决于 Navigation Timing [4] 标准。该标准后来升级为 2.0 版本,对应于 Navigation Timing 2 [5] 标准。两者虽然不同,但可以计算出来。指标基本一致。在浏览器中,可以通过以下方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
根据这些数据,不仅可以计算出 DNS/TCP/Request 的耗时,还可以计算出 DOMReady/DOMParse/Load 的耗时。

5.2 采集 FP && FCP
FP和FCP可以直接通过浏览器提供的API获取,所以采集的原理并不复杂。如果页面已经完成了第一次绘制和第一次内容绘制,可以使用下面的方法直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有第一次开始绘制,则需要通过监听来获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
5.3 采集 LCP
LCP主要依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});
浏览器会多次上报 LCP,一般来说真正的 LCP 是用户交互前最近一次上报的 LCP。因为交互往往会改变用户所看到的,所以用户交互后新上报的 LCP 不再符合 LCP 指标定义。
5.4 采集 与FP/FCP/LCP相比,FMP的采集比较复杂,需要通过算法计算,业界没有统一的算法。但是,比较公认的计算FMP的方法是“确定在加载和渲染过程中页面最大布局变化后的绘制时间为当前页面的FMP”。
由于在页面渲染过程中,“DOM结构变化的时间点”和对应的“渲染时间点”大致相同,所以内部以字节为单位计算FMP的方式是计算DOM结构发生变化的时间点大多数,那就是FMP。
具体步骤如下:
通过 MutationObserver 监控整个页面的每一个 DOM 变化,并触发 MutationObserver 的回调。当回调计算当前DOM树的score并结算时,score对比变化最大的时刻是FMP5.5 采集 TTI && TBT
与FMP类似,浏览器并没有提供直接获取TTI的API,但是有详细的说明如何计算TTI,通过实现相应的说明就可以得到TTI的时间点。
具体描述是:先找到FCP的时间点,然后再找一个安静的窗口向前。一个安静的窗口需要满足三个条件: 1) No Long 任务。2)窗口中处理的 GET 请求不超过两个。3) 窗口时间窗口读取至少应为 5 秒。
窗口前最后一个长任务的结束时间是 TTI。
TBT 可以通过将 FCP 和 TTI 之间的长任务的阻塞时间相加得到。
阻塞时间是Long任务中超过50ms后的任务时间。
5.6 采集 FID && MPFID
FID也依赖PerformanceObserver,具体监控方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务时间。可以监控 FCP 后的 Long 任务,比较最长的 long 任务是 MPFID。
虽然浏览器提供了足够的 API 来帮助采集单个性能指标,但在 JS 中计算特定指标更加复杂。原因有二:一是API上报的内容与指标本身的定义存在一些差异,所以在计算时需要处理这些差异;二是在某些场景下,浏览器不会上报相应的内容,需要在这些场景下进行仿真测量。
6. 如何评估网站的整体性能
尽管有许多绩效指标,但每个绩效指标评估一个方面。如何看网站的整体表现是好是坏?对于每一个单独的指标,是否有一个标准来定义指标值被认为是好的特定范围?在线网站性能应考虑哪些性能指标?每个绩效指标的适当权重是多少?
6.1 绩效指标基线
谷歌提供了各种性能指标的基准,具有一定的参考意义。
为什么仅供参考?首先,基线本身正在发生变化。随着指标计算的逐步更新和软硬件的更新,基线也会有一定程度的调整。其次,用户的使用场景也会对性能指标产生很大影响。例如,iOS 用户报告的性能指标普遍优于 Android 用户报告的性能指标。
下面是字节目前内部使用的一些性能指标的基准,基本与谷歌推荐的基准一致。通过这些数据,可以分析网站的绩效达标率。
指标名称Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500

超过 2500
FCP
0-1800
1800-3000
超过 3000
液晶面板
0-2500
2500-4000
超过 4000
TTI
0-3800
3800-7300
超过 7300
FID
0-100
100-300
超过 300
6.2 测量网站满意度
除了常规的性能指标外,网站满意度的衡量还应考虑基于体验的指标,例如专门衡量视觉稳定性的 CLS。
在线站点满意度测量一般会根据灯塔的满意度计算规则,去除一些推荐在实验室环境中测量的指标的权重。
以下是Bytes目前使用的在线站点性能满意度权重计算公式,去掉了SI和TBT这两个不推荐用于在线环境测量的指标。
然后有了一个站点的满意度,我们终于可以知道一个站点的性能好坏了。那么假设性能不好,我们应该如何优化呢?
7. 如何优化网站性能
通常,我们可以从性能指标入手,进行有针对性的优化。虽然指标不同,但优化思路是一样的。了解指标的依赖关系后,可以通过优化指标的相关依赖关系,快速优化性能指标,从而提升站点性能。
听起来很抽象,举个例子:比如我们要优化TTI的时候,根据刚才提到的TTI的计算方法,可以得出TTI的依赖主要有FCP、request和Long任务,然后尽快渲染尽可能快的请求,尽快结束请求,避免长时间的任务是优化的关键。指标的具体优化措施有很多,后续文章会介绍。
了解全面的优化措施很重要,但每一项都不一定能有效解决您网站面临的关键性能问题。如何做到立即有针对性的去优化?通过恢复用户加载时的外观来帮助定位性能问题是一个想法。
8. 使用在线监控定位性能问题
一般来说,前端监控除了监控性能指标外,还会监控请求、资源加载、Long任务等数据。这些数据可以帮助还原用户的加载场景,帮助寻找线索。
例如,在下面的例子中,很多性能指标都很差。通过监控平台还原的资源加载瀑布图可以看出,大部分时间都花在了拉取资源上。然后就可以得到一个初步的性能优化方案,把优化措施集中在资源优化上,比如减小JS文件大小,延迟加载未使用的JS代码等等。
在线监控的例子很多,可以帮助定位性能问题,这里就不一一介绍了。截图中使用了Byte内部的前端监控平台。目前该方案已经在火山引擎上同步,可以实时监控web端的真实数据,接入即可解决告警归属、聚类分析、详细定位等问题。白屏、性能瓶颈、查询慢等关键问题欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
最近发布:WordPress自动采集发布插件专业版WP AutoPost Pro [更新至
目录
亲测完美运行于的 WordPress 各个版本,请放心使用。WP-AutoPost-Pro 是一款优秀的 WordPress 文章采集器,是您操作站群,让网站自动更新内容的利器!采集插件适用对象1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容;2、热点内容自动采集并自动发布;3、定时采集,手动采集发布或保存到草稿;4、css样式规则,能更精确的采集需要的内容。5、伪原创与翻译、代理IP进行采集、保存Cookie记录;6、可采集内容到自定义栏目
WP-AutoPost 插件可以采集来自于任何网站的内容并全自动更新你的WordPress站点。它使用非常简单,无需复杂设置,并且足够强大和稳定,支持wordpress所有特性。可采集任何网站的内容全自动任务采集定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容基本设置功能齐全,完美支持Wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章可下载远程图片及其他任意格式附件到本地服务器,并支持给图片自动添加水印
如果是新手,请查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自动采集发布插件,最大的特点是可以采集来自于任何网站的内容并自动发布到你的wordpress站点。不像其他大部分wordpress采集插件,只能根据Feed进行采集,使用Feed采集有很大的弊端,首先必须找到全文Feed,而现在网上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要点击链接才能查看原文,相当于给别的网站做外链。做英文垃圾站用的比较多的WP-Robot也只有20几个采集来源,文章来源比较单一有限。而WP-AutoPost就没有上面这些劣势,真正做到可以采集任何网站的内容并自动发布,采集过程完全自动进行无需人工干预,并提供内容过滤、HTML标签过滤、关键词替换、自动链接、自动标签、自动下载远程图片到本地服务器、自动添加文章前缀后缀、并且可以使用微软翻译引擎将采集的文章自动翻译为各种语言进行发布。
1.可采集任何网站的内容,采集信息一目了然。
通过简单设置可采集来自于任何网站的内容,并可设置多个采集任务同时进行,可设置任务为自动运行或手动运行,主任务列表显示每个采集任务的状况:上次检测采集时间,预计下次检测采集时间,最近采集文章,已采集更新的文章数等信息,方便查看管理。
文章管理功能方便查询、搜索、删除已采集文章,改进算法已从根本上杜绝了重复采集相同文章,日志功能记录采集过程中出现的异常和抓取错误,方便检查设置错误以便进行修复。
2.启用任务后,全自动采集更新,无需人工干预。
启用任务后,定时检测是否有新文章可更新,检测文章是否重复,导入更新文章,这一切操作程序都是全自动完成,无需人工干预。
有两种触发采集更新方式,一种是在页面内添加代码由用户访问触发采集更新(后台异步进行,不影响用户体验,也不影响网站效率),另外可以用Cron计划任务定时触发采集更新任务
3.定向采集,支持通配符匹配、或CSS选择器精确采集任何内容,支持采集多层级文章列表、支持采集正文分页内容、支持采集多层级正文内容。
定向采集只需要提供文章列表URL即可智能采集来自于任何网站或栏目内容。
不仅支持“通配符匹配”来采集网页内容,更完美支持各种CSS选择器,只需填写简单的形如#title h1的CSS选择器,便可精确采集网页任何内容。(如何设置CSS选择器)

支持设置关键词,如果标题中包含关键词才允许采集(或过滤掉不允许采集)。
支持设置多个匹配规则采集网页上的不同内容,甚至支持采集任何内容添加到“wordpress自定义栏目”,方便扩展。
4.基本设置功能齐全,完美支持wordpress各种功能,可自动设置分类目录、标签、摘要、特色图片、自定义栏目等;也可采集目标网站的分类目录、标签等信息后,可自动生成并添加相应分类目录、标签等信息
每个采集任务均可选择发布到的分类目录,发布作者,发布状态,检测更新时间间隔,采集目标网站的字符集,选择是否下载图片或附件。
支持自定义文章类型,自定义文章分类、文章形式。
完美支持wordpress各种特色功能,自动添加标签,自动生成摘要,自动设置特色图片,支持自定义栏目等。
5.可采集微信公众号、头条号等自媒体内容,因百度不收录公众号,头条文章等,可轻松获取优质“原创”文章,增加百度收录量及网站权重
支持采集微信公众号(订阅号)文章,无需复杂配置,只需填入“公众号名称”和“微信号”后即可开始采集。
支持采集今日头条文章,也无需复杂配置
微信公众号及今日头条由于目标限制,为半自动方式采集
6.支持Google神经网络翻译、有道神经网络翻译、百度翻译,将文章翻译成其他语言,轻松获取原创文章
支持Google神经网络翻译,翻译质量显著提高,已接近人工翻译效果,将文章标题和内容翻译成其他语言,共支持多种语言之间相互翻译,轻松获取原创文章。使用Google翻译API无需翻墙,只需翻墙获取API相关设置信息设置好后即可正常使用,后续调用API翻译无需翻墙
支持有道神经网络翻译,接近人工翻译效果,有道翻译更懂中文,采集英文文章翻译成中文文章,轻松获取原创文章。
同时支持百度翻译,百度翻译每月翻译字符数低于200万,享免费服务

7.支持中英文各种伪原创方式
支持使用翻译引擎获取伪原创文章,不仅仅只是替换了同义词,更是语义的重新表述,唯一性、伪原创效果更好,支持各种语言。同时集成国外最优秀伪原创工具WordAi等,制作英文站可以获取可读性、唯一性都更好的伪原创文章。
8.支持市面上所有主流对象存储服务,包括七牛云、阿里云OSS、腾讯云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可将文章中图片及附件自动上传到云对象存储服务,节省带宽及空间,提高网站访问速度
七牛云存储,每月享10GB的免费存储空间,10GB免费带宽流量
只需简单配置好相关信息,即可自动上传,通过wordpress后台也能直接查看或管理已上传到云对象存储的图片及文件。
9.支持seo优化,内容过滤,HTML标签过滤,关键词替换,自动添加链接,添加自定义内容,自定义采集后样式、自定义模板等常用功能
自动删除采集内容中的HTML注释,可设置删除标签中的id,class,style属性内容,消除采集的痕迹;自动给图片添加上alt属性,过滤链接,关键词替换,自动添加自定义链接,这些都有利于SEO。
支持内容过滤,过滤采集内容中不希望发布的内容(如广告代码,文章来源,版权等信息),甚至可以在文章任意位置添加上自定义内容,增强文章独特性;也可是设置采集后添加自定义样式功能
也支持HTML标签过滤功能,可过滤掉采集文章中的超链接,script和style标签下的不必要的代码。
付费高速下载:
资源下载此资源下载价格为10元,请先登录
服务条款:
购买即代表你对本站的无偿捐助,非购买本站资源。部分资源禁止在中国大陆下载使用,违者后果自负。同意本条款你方可购买下载本站资源,不同意请离开。
所有资源均需登陆后下载,即使是免费的。
SRC漏洞挖掘与最重要的环节——信息收集
采集交流 • 优采云 发表了文章 • 0 个评论 • 658 次浏览 • 2022-09-19 20:23
SRC挖掘有很多平台,比如EDUSRC,比如公益SRC:补天、漏洞盒子等,还有就是一些企业SRC。对于挖掘src的小伙伴来说第一步都是对资产进行收集,所以本篇文章首先介绍一下SRC的上分思路,然后会具体讲解一下信息收集的思路。
公益SRC对于公益SRC来说,会存在各种各样的漏洞,SQL注入、反射XSS、存储XSS、任意注册、cms通杀、弱口令还有逻辑漏洞,公益SRC主要比拼的无非就是手速,手速决定一切,提交的最多的一般还是sql注入、弱口令、和cms通杀。公益SRC想要冲榜的话可以选择一些有大的安全活动的时间,大佬们去参加安全活动,这个时候可以取巧,上榜会稍微轻松一点。对于公益SRC来说,想要冲榜就不能在一个站上浪费大量时间,公益SRC对洞的质量要求不高,所以只要 花时间,还是可以上榜的。谷歌镜像站:
SQL注入SQL注入的话主要通过google语法或者fofa进行搜索查找,使用inurl关键字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa进行特定网站搜索,还是进行信息收集,只使用一种关键字对站点去进行查找是绝对无法找全的,关键字有很多,思路也有很多,思维不能局限住,要不断地去变换。可以尝试这么去构造Google语句:地区inurl:"type_id=1"、行业inurl:"ptherinfo.asp?id=1"地区和行业可以任意替换,在提交漏洞的地方通常会有一个选项,选择漏洞所属地区和所属行业,可以以此为准一个一个找,之后还可以将php替换为asp、aspx、jsp等站点。在对某站点进行测试SQL注入的时候,先通过一些方式测试是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工测试,然后提交漏洞。
XSS对于XSS来说可能并不好找,所以我认为没必要太刻意的去挖XSS,不管是反射型还是存储型,所以我认为在测试sql注入的时候顺带对XSS进行测试就好了。但是如果想要专门挖xss,在实战中学习,也可以通过和sql注入一样的语法,改变几个关键字就好了,比如:地区inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注册如果你想要挖任意注册漏洞,那么你首先需要了解什么是任意注册,任意注册是一种程序设计的缺陷,顾名思义就是随便注册,不需要什么条件,注册处无任何验证。Google语法关键词:地区/行业inurl:"register"、地区/行业inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注册算是低危漏洞,不过也有两分。任意注册没多少人挖,可以尝试挖掘。去漏洞盒子提交漏洞的时候,可以看下漏洞类型,可以挑一些你认为漏洞比较冷门没人挖并且普遍存在的去下手。
CMS通杀普通人找通杀的思路无法就是百度谷歌搜索cms通杀,但是其实这样的效率并不高,通杀也找不到几个,这里建议可以去一些漏洞文库,建议多进行漏洞复现,多实战,多积累实战经验,复现漏洞也是一种积累。
弱口令尝试弱口令的过程比较繁琐,但是最好老老实实的手工上分,百度或者谷歌语法搜索后台站点。如:山西inurl:"后台"可以尝试:账号:admin/test/cs/ceshi/test01等 密码:admin/123456/a123456/admin123/admin123456等。也可以借助fofa对后台站点进行搜索:title="后台管理" && country="CN"
EDUSRCfofa语句(查找edu里的管理系统):"管理系统" && org="China Education and Research Network Center"对于EDUSRC来说,想上分的同学主要有两种方式:1.挖通用性漏洞。找一些站点或者系统,被广大学校所使用,覆盖率很高,再去对这个站点或者系统进行漏洞挖掘,挖掘到之后就可以批量刷分。2.定点打击。对一个学校埋头苦干,通过一些信息泄露或者一些学生的微博、朋友圈等,获取一些学生的相关信息,比如学号、身份信息号码、电话等等,尝试登入校园内网或者登录校园统一身份认证系统,对内网进行漏洞挖掘,直接日穿。使用Google语法进行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本内容:site:域名 intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号|admin|login|sys|managetem|password|username查找可注入点:site:域名 inurl:aspx|jsp|php|asp查找上传漏洞:site:域名 inurl:file|load|editor|Files找eweb编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的数据库:site:域名 filetype:mdb|asp|#查看脚本类型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集渗透测试的本质就是信息收集,信息搜集的广度决定了攻击的广度,知识面的广度决定了攻击的深度。不管是进行SRC漏洞挖掘,还是做项目进行渗透测试,又或者是打红蓝对抗,一定要做好信息收集。信息收集很重要,如确定资产,比如他有哪些域名、子域名、C段、旁站、系统、微信小程序或者公众号,确定好站点或者目标系统之后,就是常规的指纹识别,像中间件、网站,扫目录,后台,确定功能然后分析每个功能点上会有哪些漏洞,就比如一个登录页面,我们可以考虑的是爆破账号密码,社工账号密码,SQL注入,XSS漏洞,逻辑漏洞绕过等。如果大家挖掘SRC的水平都是一样的或者说我们对于各种操作都是同样了解的,那么如果超越别人,如果你挖的比别人慢,那么你后期提交的漏洞会撞洞,然后忽略处理。在短时间内你无法去提升你的技术或者是挖掘一个新的思路,这个时候就体现了资产搜集的能力,信息搜集是最难的,也是最麻烦耽误时间的,且必须要实时去关注的一件事情。一些常用网站:ICP备案查询:权重查询:多地ping:whois查询:IP反查:以xxx公司为例,根域名:信息收集可以从多个领域来看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC软件等等可以重点关注备案网站,APP,小程序,微信公众号,甚至是微博。这里说一点小思路,首先可以找到官网,用cmd ping他的官网,可以看到IP地址,然后可以定位whois,whois中包含了用户、邮箱,以及购买的网段。有了网段就可以进行一些主动信息收集,可以使用一些强大的资产测绘工具,goby的资产测绘还是很不错的,会有一些web服务,不用担心没有banner,往往这些没有banner的才有问题。注意观察一下网站底部是否有技术支持:xxxx|网站建设:xxxx之类的标注,一些建站企业会出于知识产权保护或者是对外宣传自己的公司,会在自家搭建的网站上挂上技术支持等之类的标注,很多建站企业往往某种类型的网站都是套用的同一套源码,换汤不换药,运气不错的话,那我们的事件就秒变通用。
子域名收集Oneforall尽量多凑一点API,fofa可以找人借一些api,越多越好。执行命令:常用的获取子域名有2种选择,一种使用--target指定单个域名,一种使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤舆)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一个在网页的JS文件中寻找URL和子域名的工具,在网站的JS文件中,会存在各种对测试有帮助的内容,JSFinder可以帮我们获取到JS中的url和子域名的信息,扩展我们的渗透范围。爬取分为普通爬取和深度爬取,深度爬取会深入下一层页面爬取的JS,时间会消耗的相对较长。执行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt运行结束后会生成两个txt文本,Jsurl.txt为URL里面会有一些接口什么的,Jsdomain.txt为子域名基于TamperMonkey的版本:Layer、子域名收割机 进行挖掘通过这些域名收集工具(layer子域名挖掘机、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)进行挖掘。
在线网站查询为了避免IP被封掉,直接使用在线的子域名爆破网站。subDomainBrute执行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全扫描。Sublist3rKali和Windows环境下都可以装这个工具,Sublist3r是一个python版工具,其原理是基于通过使用搜索引擎,从而对站点子域名进行列举。Kali:git clone 执行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一个域名搜索网站,还会自动归纳同一个IP的多个域名。在线域名爆破小蓝本通过小蓝本进行查询:爱企查、企查查、天眼查之前爱企查活动送了会员,可以更好的进行查询。谷歌语法迅速查找信息泄露、管理后台暴露等漏洞语法,例如:filetype:txt 登录filetype:xls 登录filetype:doc 登录intitle:后台管理intitle:loginintitle:后台管理 inurl:adminintitle:index of /查找指定网站,再加上site:,例如:site: filetype:txt 登录site: intitle:后台管理site: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统谷歌/必应:site:site:如果发现检索出来的很多结果都是www,众所周知主站一般防御很严,如果我们不想看到主站可以直接 -wwwsite: -www这样出来的结果会自动删去wwwShodan、fofa、zoomeye、360quake等忘了资产搜索引擎fofa语法FOFA作为一个搜索引擎,我们要熟悉它的查询语法,类似google语法,FOFA的语法主要分为检索字段以及运算符,所有的查询语句都是由这两种元素组成的。
目前支持的检索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的逻辑运算符包括:=,==,!=,&&,||。如果搜索title字段中存在后台的网站,我们只需要在输入栏中输入title=“后台”,输出的结果即为全网title中存在后台两个字的网站,可以利用得到的信息继续进行渗透攻击,对于网站的后台进行密码暴力破解,密码找回等等攻击行为,这样就可以轻松愉快的开始一次简单渗透攻击之旅,而企业用户也可以利用得到的信息进行内部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host内所有带有的域名:host=“”例:搜索某个IP上的相关信息:ip=“58.63.236.248”ip=“111.1.1.1/8”ip="111.1.1.1/16"ip="111.1.1.1/24"例:搜索title包含有“漏洞”的IP:title=“漏洞”例:Apache出来了一个高危漏洞,我们需要去统计全球的Apache:server=“Apache”例:搜索前段时间非常火的海康威视:header=“Hikvsion”例:假如我想搜索微博的后台,域名为: 并且网页内body包含“后台”:body=“后台”&& domain=“”&&:与body=“后台”&& domain=“”提取域名为:并且网页内body包含“后台”的网站,需要同时满足两个条件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不为80端口的服务搜索证书(https或者imaps等)例:百度公司为了检查自己的域名是否还有心脏出血漏洞可以使用语法:cert=“baidu”搜索指定国家(编码)的资产例:搜索中国的服务器 country=“CN”注:country=“CN” country后面的规则为各国家的缩写,全球国家缩写如下连接:搜索指定城市的资产例:搜索上海的服务器 city=“Shanghai”注:搜索城市时填写城市的全程,首字母必须大写例:搜索centos所有主机 os=“centos”了解了基础查询我们再来说说高级查询,就是多个基础查询语句用逻辑连接符拼成的语句,例如我们要搜索上海的Discus组件,搜索语句时 (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:逻辑与||:逻辑或上面的语句意思为 (title="Disuz" ||body="content="Discuz") 与city="Shanghai" 这两个条件必须同时满足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“与body=”content=\”Discuz“ 满足一个即可
FOFA可以从不同维度搜索网络组件,例如地区,端口号,网络服务,操作系统,网络协议等等。目前FOFA支持了多个网络组件的指纹识别,包括建站模块、分享模块、各种开发框架、安全检测平台、项目管理系统、企业管理系统、视频监控系统、站长平台、电商系统、广告联盟、前端库、路由器、SSL证书、服务器管理系统、CDN、Web服务器、WAF、CMS等等尤其现在支持icon图标、logo搜索,非常方便,fofa搜索语法与shodan类似title="abc" 从标题中搜索abc。例:标题中有北京的网站header="abc" 从http头中搜索abc。例:jboss服务器body="abc" 从html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名带有的网站。例:根域名是的网站host="." 从url中搜索.,注意搜索要用host作为名称。例:政府网站, 教育网站port="443" 查找对应443端口的资产。例:查找对应443端口的资产可以安装shodan chrome插件,方便进行查看和使用。微步在线微步在线的反向IP查找域名十分好用整数透明度公开日志枚举其他途径旁站查询旁站就是在同一台服务器上搭建的多个网站,使用同一个IP地址。在目标网站无法攻击成功时,若他的旁站可以成功攻击并获取相应的系统权限,这势必会影响到目标网站的安全性,因为已经获取到同一台服务器的权限了。公众号、服务号收集搜狗搜索引擎企查查微信小程序从微信小程序入手,进行测试APP小蓝本企查查爱企查点点七麦七麦还可以切换苹果和安卓,获取下载链接apk丢进模拟器指纹识别Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需带上协议,每行一个./Ehole-darwin -f 192.168.1.1/24 //支持单IP或IP段,fofa识别需要配置fofa密钥和邮箱./Ehole-darwin -l url.txt -json export.json //结果输出至export.json文件
Glass使用方法:python3 Glass.py -u 单url测试python3 Glass.py -w domain.txt -o 1.txt // url文件内
BugScanner主站没识别出来,但是其他子站可以丢进来看看潮汐指纹Kscan此工具需要go环境云悉云悉可以在线搜索子域名、IP段、CMS指纹等信息大禹CMS识别程序对于查询到的CMS可以利用网站用于查询其他finger 或者棱镜也可以绕过CDN如果目标没有使用CDN,可以通过ping获取IP地址。或者利用在线网站 使用了CDN就绕过CDN来获取真实的IP地址:因为有些网站设置CDN时,可能没把国外的访问包含进去,所以可以尝试国外绕过验证ip地址因为通过各种方法得到的ip地址很多,有的是伪ip,无法访问,这就需要逐个验证,方法简单但是i西南西量比较大,利用ip地址对web站点进行访问查询域名解析记录内部邮箱源,收集到内部邮箱服务器IP地址网站phpinfo文件phpinfo.php分站IP地址,查询子域名,CDN很贵,很可能分站就不再使用CDN国外访问敏感信息收集githubgithub敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区,安全意识薄弱的同事经常会将公司的代码、各种服务的账号等极度敏感的信息【开源】到github中这里可以利用github找存在这个关键字的代码,这样可以收集到的方面更广
GSIL项目:通过配置关键词,实时监控GitHub敏感信息泄露情况,并发送至指定邮箱常见自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)从流量中分析提取流量代理:通过WebProxy代理电脑所有流量,再分析流量中出现的子域名域名跳转记录中的子域名Response中存在的子域名网络请求资源中的子域名DNS解析SSL证书查询暴力枚举网盘搜索盘多多:盘搜搜:盘搜:凌云风搜索:直接输入厂商名字然后搜索,看看是否泄露了源码,或者账号密码之类的路径扫描404,403页面,不是真的没有东西,要一层一层fuzz,一层一层的扫下去工具:具体使用方法可以查看github介绍,这里我一般是使用如下命令(因为担心线程太高所以通过-t参数设置为2)。python3 dirsearch.py -u * -t 2关键的地方是大家都可以下载这款工具,获取它自带的字典,那么路径的话,便是大家都能够搜得到的了,所以这里我推荐是可以适当整合一些师傅们发出来的路径字典到/dirsearch-0.4.2/db/dicc.txt中。推荐一些字典:GitHub - ybdt/dict-hub: 红队字典:弱用户名、弱口令、默认口令、泄露密钥dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每个工具扫出来同一个站点都会爆出不同的路径,建议把三个工具都拿来扫一遍,另外找一些像后台、登录系统之类的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统御剑7kbscandirsearch基于证书基于shodan找到带有该icon的网站在shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法搜索出使用了同一icon图标的网站。
由于hash为一个未知的随机数,所以是无法通过输入一个确定的hash值来搜索带有指定图标的网站的,只能通过查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。那么这里的用法就非常具有局限性,你只能是碰运气来找到你所需要查找的网站,因为shodan不一定收录了你想要搜索的网站。那么如果shodan收录了某个IP,这个服务器带有某个icon图标,也可以搜索所有带有此icon的服务器IP如果我像搜索带有这个icon的所有IP地址的话,可以先在shodan搜索这个IP。注意:shodan中有一个功能,shodan的原始数据(Raw Data)功能。点击详情里的View Raw Data,打开可以看到shodan所存储的关于这个IP的所有信息的原始数据。关于icon hash的字段是:data.0.http.favicon.hash这个数值就是http.favicon.hash:中所需要的搜索值。根据上述得到的hash值,成功得到了所有待用这个icon的网站。域传送漏洞DNS区域传送(DNZ zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。
这位运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误的配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送(zone transfer)操作是最为严重的错误配置之一。可以用dig工具来检测域传送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通过域名传送漏洞可以得到子域名信息以及子域名对应的IP地址。常见漏洞弱口令,管理员权限的弱口令,可以是一些后台管理系统的,也可以是防火墙的。越权,这个相对来说比较常见,系统设计存在缺陷,通过参数来传递身份和访问请求页面的信息,只需要修改参数即可越权到别人的身份,可能有垂直越权,也可能是水平越权。SQL注入,只要细心一点,SQL注入也是比较常见的,只要能注出数据库就行了,注意别惹祸上身。文件上传,这类的话,有一些老系统没什么限制,可以尝试。struts2框架漏洞,这个框架出了很多漏洞,前段时间比较火。shiro命令执行,也是框架漏洞,一个反序列化漏洞,现在网上还存在很多存在这个洞的站点。任意文件下载,在一些站点的下载点,可以抓包测试,通过修改下载链接中下载文件的路径,像/etc/passwd,WEB-INF/web.xml等文件。任意文件下载常用路径:LINUX:
/root/.ssh/authorized_keys<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_rsa<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_ras.keystore<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/known_hosts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/passwd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/shadow<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/issue<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/fstab<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/host.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/motd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/sysctl.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/inputrc 输入设备配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/default/useradd 添加用户的默认信息的文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/login.defs 是用户密码信息的默认属性<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/skel 用户信息的骨架<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/sbin/nologin 不能登陆的用户<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/log/message 系统的日志文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf 配置http服务的配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/ld.so.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/my.cnf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.bash_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.mysql_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/proc/mounts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/config.gz<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/lib/mlocate/mlocate.db<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/self/cmdline
WINDOWS:
C:\windows\system32\drivers\etc\hosts host文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\boot.ini //查看系统版本<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\repair\sam //系统初次安装的密码<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\my.ini //Mysql配置<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\data\mysql\user.MYD //Mysqlroot<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\php.ini //php配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\my.ini //Mysql配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\win.ini //Windows系统的一个基本系统配置文件
逻辑漏洞,一些已经被很多人挖过的站点除了一些最新的漏洞之外,可能就只剩下逻辑漏洞了,比如任意密码修改,或者一些组件漏洞,还有在修改密码的地方,修改密码请求是一次发包还是分两次发包,密码找回点,有些情况下验证码就在返回包中包含着;有些情况下接受验证码的手机号或者邮箱就在请求包中,可修改为自己的,验证码就会发送到你修改的手机号或者邮箱处,挖逻辑漏洞的话,更多情况下要抓包查看,了解它的逻辑,从中找到缺陷。具体可以看:该文章专门对逻辑漏洞进行了总结。文章来源:FreeBuf.COM;作者:YLion侵权请私聊公众号删文 查看全部
SRC漏洞挖掘与最重要的环节——信息收集
SRC挖掘有很多平台,比如EDUSRC,比如公益SRC:补天、漏洞盒子等,还有就是一些企业SRC。对于挖掘src的小伙伴来说第一步都是对资产进行收集,所以本篇文章首先介绍一下SRC的上分思路,然后会具体讲解一下信息收集的思路。
公益SRC对于公益SRC来说,会存在各种各样的漏洞,SQL注入、反射XSS、存储XSS、任意注册、cms通杀、弱口令还有逻辑漏洞,公益SRC主要比拼的无非就是手速,手速决定一切,提交的最多的一般还是sql注入、弱口令、和cms通杀。公益SRC想要冲榜的话可以选择一些有大的安全活动的时间,大佬们去参加安全活动,这个时候可以取巧,上榜会稍微轻松一点。对于公益SRC来说,想要冲榜就不能在一个站上浪费大量时间,公益SRC对洞的质量要求不高,所以只要 花时间,还是可以上榜的。谷歌镜像站:
SQL注入SQL注入的话主要通过google语法或者fofa进行搜索查找,使用inurl关键字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa进行特定网站搜索,还是进行信息收集,只使用一种关键字对站点去进行查找是绝对无法找全的,关键字有很多,思路也有很多,思维不能局限住,要不断地去变换。可以尝试这么去构造Google语句:地区inurl:"type_id=1"、行业inurl:"ptherinfo.asp?id=1"地区和行业可以任意替换,在提交漏洞的地方通常会有一个选项,选择漏洞所属地区和所属行业,可以以此为准一个一个找,之后还可以将php替换为asp、aspx、jsp等站点。在对某站点进行测试SQL注入的时候,先通过一些方式测试是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工测试,然后提交漏洞。
XSS对于XSS来说可能并不好找,所以我认为没必要太刻意的去挖XSS,不管是反射型还是存储型,所以我认为在测试sql注入的时候顺带对XSS进行测试就好了。但是如果想要专门挖xss,在实战中学习,也可以通过和sql注入一样的语法,改变几个关键字就好了,比如:地区inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注册如果你想要挖任意注册漏洞,那么你首先需要了解什么是任意注册,任意注册是一种程序设计的缺陷,顾名思义就是随便注册,不需要什么条件,注册处无任何验证。Google语法关键词:地区/行业inurl:"register"、地区/行业inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注册算是低危漏洞,不过也有两分。任意注册没多少人挖,可以尝试挖掘。去漏洞盒子提交漏洞的时候,可以看下漏洞类型,可以挑一些你认为漏洞比较冷门没人挖并且普遍存在的去下手。
CMS通杀普通人找通杀的思路无法就是百度谷歌搜索cms通杀,但是其实这样的效率并不高,通杀也找不到几个,这里建议可以去一些漏洞文库,建议多进行漏洞复现,多实战,多积累实战经验,复现漏洞也是一种积累。

弱口令尝试弱口令的过程比较繁琐,但是最好老老实实的手工上分,百度或者谷歌语法搜索后台站点。如:山西inurl:"后台"可以尝试:账号:admin/test/cs/ceshi/test01等 密码:admin/123456/a123456/admin123/admin123456等。也可以借助fofa对后台站点进行搜索:title="后台管理" && country="CN"
EDUSRCfofa语句(查找edu里的管理系统):"管理系统" && org="China Education and Research Network Center"对于EDUSRC来说,想上分的同学主要有两种方式:1.挖通用性漏洞。找一些站点或者系统,被广大学校所使用,覆盖率很高,再去对这个站点或者系统进行漏洞挖掘,挖掘到之后就可以批量刷分。2.定点打击。对一个学校埋头苦干,通过一些信息泄露或者一些学生的微博、朋友圈等,获取一些学生的相关信息,比如学号、身份信息号码、电话等等,尝试登入校园内网或者登录校园统一身份认证系统,对内网进行漏洞挖掘,直接日穿。使用Google语法进行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本内容:site:域名 intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号|admin|login|sys|managetem|password|username查找可注入点:site:域名 inurl:aspx|jsp|php|asp查找上传漏洞:site:域名 inurl:file|load|editor|Files找eweb编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的数据库:site:域名 filetype:mdb|asp|#查看脚本类型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集渗透测试的本质就是信息收集,信息搜集的广度决定了攻击的广度,知识面的广度决定了攻击的深度。不管是进行SRC漏洞挖掘,还是做项目进行渗透测试,又或者是打红蓝对抗,一定要做好信息收集。信息收集很重要,如确定资产,比如他有哪些域名、子域名、C段、旁站、系统、微信小程序或者公众号,确定好站点或者目标系统之后,就是常规的指纹识别,像中间件、网站,扫目录,后台,确定功能然后分析每个功能点上会有哪些漏洞,就比如一个登录页面,我们可以考虑的是爆破账号密码,社工账号密码,SQL注入,XSS漏洞,逻辑漏洞绕过等。如果大家挖掘SRC的水平都是一样的或者说我们对于各种操作都是同样了解的,那么如果超越别人,如果你挖的比别人慢,那么你后期提交的漏洞会撞洞,然后忽略处理。在短时间内你无法去提升你的技术或者是挖掘一个新的思路,这个时候就体现了资产搜集的能力,信息搜集是最难的,也是最麻烦耽误时间的,且必须要实时去关注的一件事情。一些常用网站:ICP备案查询:权重查询:多地ping:whois查询:IP反查:以xxx公司为例,根域名:信息收集可以从多个领域来看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC软件等等可以重点关注备案网站,APP,小程序,微信公众号,甚至是微博。这里说一点小思路,首先可以找到官网,用cmd ping他的官网,可以看到IP地址,然后可以定位whois,whois中包含了用户、邮箱,以及购买的网段。有了网段就可以进行一些主动信息收集,可以使用一些强大的资产测绘工具,goby的资产测绘还是很不错的,会有一些web服务,不用担心没有banner,往往这些没有banner的才有问题。注意观察一下网站底部是否有技术支持:xxxx|网站建设:xxxx之类的标注,一些建站企业会出于知识产权保护或者是对外宣传自己的公司,会在自家搭建的网站上挂上技术支持等之类的标注,很多建站企业往往某种类型的网站都是套用的同一套源码,换汤不换药,运气不错的话,那我们的事件就秒变通用。
子域名收集Oneforall尽量多凑一点API,fofa可以找人借一些api,越多越好。执行命令:常用的获取子域名有2种选择,一种使用--target指定单个域名,一种使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤舆)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一个在网页的JS文件中寻找URL和子域名的工具,在网站的JS文件中,会存在各种对测试有帮助的内容,JSFinder可以帮我们获取到JS中的url和子域名的信息,扩展我们的渗透范围。爬取分为普通爬取和深度爬取,深度爬取会深入下一层页面爬取的JS,时间会消耗的相对较长。执行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt运行结束后会生成两个txt文本,Jsurl.txt为URL里面会有一些接口什么的,Jsdomain.txt为子域名基于TamperMonkey的版本:Layer、子域名收割机 进行挖掘通过这些域名收集工具(layer子域名挖掘机、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)进行挖掘。
在线网站查询为了避免IP被封掉,直接使用在线的子域名爆破网站。subDomainBrute执行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全扫描。Sublist3rKali和Windows环境下都可以装这个工具,Sublist3r是一个python版工具,其原理是基于通过使用搜索引擎,从而对站点子域名进行列举。Kali:git clone 执行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一个域名搜索网站,还会自动归纳同一个IP的多个域名。在线域名爆破小蓝本通过小蓝本进行查询:爱企查、企查查、天眼查之前爱企查活动送了会员,可以更好的进行查询。谷歌语法迅速查找信息泄露、管理后台暴露等漏洞语法,例如:filetype:txt 登录filetype:xls 登录filetype:doc 登录intitle:后台管理intitle:loginintitle:后台管理 inurl:adminintitle:index of /查找指定网站,再加上site:,例如:site: filetype:txt 登录site: intitle:后台管理site: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统谷歌/必应:site:site:如果发现检索出来的很多结果都是www,众所周知主站一般防御很严,如果我们不想看到主站可以直接 -wwwsite: -www这样出来的结果会自动删去wwwShodan、fofa、zoomeye、360quake等忘了资产搜索引擎fofa语法FOFA作为一个搜索引擎,我们要熟悉它的查询语法,类似google语法,FOFA的语法主要分为检索字段以及运算符,所有的查询语句都是由这两种元素组成的。
目前支持的检索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的逻辑运算符包括:=,==,!=,&&,||。如果搜索title字段中存在后台的网站,我们只需要在输入栏中输入title=“后台”,输出的结果即为全网title中存在后台两个字的网站,可以利用得到的信息继续进行渗透攻击,对于网站的后台进行密码暴力破解,密码找回等等攻击行为,这样就可以轻松愉快的开始一次简单渗透攻击之旅,而企业用户也可以利用得到的信息进行内部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host内所有带有的域名:host=“”例:搜索某个IP上的相关信息:ip=“58.63.236.248”ip=“111.1.1.1/8”ip="111.1.1.1/16"ip="111.1.1.1/24"例:搜索title包含有“漏洞”的IP:title=“漏洞”例:Apache出来了一个高危漏洞,我们需要去统计全球的Apache:server=“Apache”例:搜索前段时间非常火的海康威视:header=“Hikvsion”例:假如我想搜索微博的后台,域名为: 并且网页内body包含“后台”:body=“后台”&& domain=“”&&:与body=“后台”&& domain=“”提取域名为:并且网页内body包含“后台”的网站,需要同时满足两个条件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不为80端口的服务搜索证书(https或者imaps等)例:百度公司为了检查自己的域名是否还有心脏出血漏洞可以使用语法:cert=“baidu”搜索指定国家(编码)的资产例:搜索中国的服务器 country=“CN”注:country=“CN” country后面的规则为各国家的缩写,全球国家缩写如下连接:搜索指定城市的资产例:搜索上海的服务器 city=“Shanghai”注:搜索城市时填写城市的全程,首字母必须大写例:搜索centos所有主机 os=“centos”了解了基础查询我们再来说说高级查询,就是多个基础查询语句用逻辑连接符拼成的语句,例如我们要搜索上海的Discus组件,搜索语句时 (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:逻辑与||:逻辑或上面的语句意思为 (title="Disuz" ||body="content="Discuz") 与city="Shanghai" 这两个条件必须同时满足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“与body=”content=\”Discuz“ 满足一个即可
FOFA可以从不同维度搜索网络组件,例如地区,端口号,网络服务,操作系统,网络协议等等。目前FOFA支持了多个网络组件的指纹识别,包括建站模块、分享模块、各种开发框架、安全检测平台、项目管理系统、企业管理系统、视频监控系统、站长平台、电商系统、广告联盟、前端库、路由器、SSL证书、服务器管理系统、CDN、Web服务器、WAF、CMS等等尤其现在支持icon图标、logo搜索,非常方便,fofa搜索语法与shodan类似title="abc" 从标题中搜索abc。例:标题中有北京的网站header="abc" 从http头中搜索abc。例:jboss服务器body="abc" 从html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名带有的网站。例:根域名是的网站host="." 从url中搜索.,注意搜索要用host作为名称。例:政府网站, 教育网站port="443" 查找对应443端口的资产。例:查找对应443端口的资产可以安装shodan chrome插件,方便进行查看和使用。微步在线微步在线的反向IP查找域名十分好用整数透明度公开日志枚举其他途径旁站查询旁站就是在同一台服务器上搭建的多个网站,使用同一个IP地址。在目标网站无法攻击成功时,若他的旁站可以成功攻击并获取相应的系统权限,这势必会影响到目标网站的安全性,因为已经获取到同一台服务器的权限了。公众号、服务号收集搜狗搜索引擎企查查微信小程序从微信小程序入手,进行测试APP小蓝本企查查爱企查点点七麦七麦还可以切换苹果和安卓,获取下载链接apk丢进模拟器指纹识别Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需带上协议,每行一个./Ehole-darwin -f 192.168.1.1/24 //支持单IP或IP段,fofa识别需要配置fofa密钥和邮箱./Ehole-darwin -l url.txt -json export.json //结果输出至export.json文件
Glass使用方法:python3 Glass.py -u 单url测试python3 Glass.py -w domain.txt -o 1.txt // url文件内

BugScanner主站没识别出来,但是其他子站可以丢进来看看潮汐指纹Kscan此工具需要go环境云悉云悉可以在线搜索子域名、IP段、CMS指纹等信息大禹CMS识别程序对于查询到的CMS可以利用网站用于查询其他finger 或者棱镜也可以绕过CDN如果目标没有使用CDN,可以通过ping获取IP地址。或者利用在线网站 使用了CDN就绕过CDN来获取真实的IP地址:因为有些网站设置CDN时,可能没把国外的访问包含进去,所以可以尝试国外绕过验证ip地址因为通过各种方法得到的ip地址很多,有的是伪ip,无法访问,这就需要逐个验证,方法简单但是i西南西量比较大,利用ip地址对web站点进行访问查询域名解析记录内部邮箱源,收集到内部邮箱服务器IP地址网站phpinfo文件phpinfo.php分站IP地址,查询子域名,CDN很贵,很可能分站就不再使用CDN国外访问敏感信息收集githubgithub敏感信息泄露一直是企业信息泄露和知识产权泄露的重灾区,安全意识薄弱的同事经常会将公司的代码、各种服务的账号等极度敏感的信息【开源】到github中这里可以利用github找存在这个关键字的代码,这样可以收集到的方面更广
GSIL项目:通过配置关键词,实时监控GitHub敏感信息泄露情况,并发送至指定邮箱常见自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)从流量中分析提取流量代理:通过WebProxy代理电脑所有流量,再分析流量中出现的子域名域名跳转记录中的子域名Response中存在的子域名网络请求资源中的子域名DNS解析SSL证书查询暴力枚举网盘搜索盘多多:盘搜搜:盘搜:凌云风搜索:直接输入厂商名字然后搜索,看看是否泄露了源码,或者账号密码之类的路径扫描404,403页面,不是真的没有东西,要一层一层fuzz,一层一层的扫下去工具:具体使用方法可以查看github介绍,这里我一般是使用如下命令(因为担心线程太高所以通过-t参数设置为2)。python3 dirsearch.py -u * -t 2关键的地方是大家都可以下载这款工具,获取它自带的字典,那么路径的话,便是大家都能够搜得到的了,所以这里我推荐是可以适当整合一些师傅们发出来的路径字典到/dirsearch-0.4.2/db/dicc.txt中。推荐一些字典:GitHub - ybdt/dict-hub: 红队字典:弱用户名、弱口令、默认口令、泄露密钥dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每个工具扫出来同一个站点都会爆出不同的路径,建议把三个工具都拿来扫一遍,另外找一些像后台、登录系统之类的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登录site: 内部site: 系统御剑7kbscandirsearch基于证书基于shodan找到带有该icon的网站在shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法搜索出使用了同一icon图标的网站。
由于hash为一个未知的随机数,所以是无法通过输入一个确定的hash值来搜索带有指定图标的网站的,只能通过查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。那么这里的用法就非常具有局限性,你只能是碰运气来找到你所需要查找的网站,因为shodan不一定收录了你想要搜索的网站。那么如果shodan收录了某个IP,这个服务器带有某个icon图标,也可以搜索所有带有此icon的服务器IP如果我像搜索带有这个icon的所有IP地址的话,可以先在shodan搜索这个IP。注意:shodan中有一个功能,shodan的原始数据(Raw Data)功能。点击详情里的View Raw Data,打开可以看到shodan所存储的关于这个IP的所有信息的原始数据。关于icon hash的字段是:data.0.http.favicon.hash这个数值就是http.favicon.hash:中所需要的搜索值。根据上述得到的hash值,成功得到了所有待用这个icon的网站。域传送漏洞DNS区域传送(DNZ zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。
这位运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误的配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的因特网用户执行DNS区域传送(zone transfer)操作是最为严重的错误配置之一。可以用dig工具来检测域传送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通过域名传送漏洞可以得到子域名信息以及子域名对应的IP地址。常见漏洞弱口令,管理员权限的弱口令,可以是一些后台管理系统的,也可以是防火墙的。越权,这个相对来说比较常见,系统设计存在缺陷,通过参数来传递身份和访问请求页面的信息,只需要修改参数即可越权到别人的身份,可能有垂直越权,也可能是水平越权。SQL注入,只要细心一点,SQL注入也是比较常见的,只要能注出数据库就行了,注意别惹祸上身。文件上传,这类的话,有一些老系统没什么限制,可以尝试。struts2框架漏洞,这个框架出了很多漏洞,前段时间比较火。shiro命令执行,也是框架漏洞,一个反序列化漏洞,现在网上还存在很多存在这个洞的站点。任意文件下载,在一些站点的下载点,可以抓包测试,通过修改下载链接中下载文件的路径,像/etc/passwd,WEB-INF/web.xml等文件。任意文件下载常用路径:LINUX:
/root/.ssh/authorized_keys<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_rsa<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/id_ras.keystore<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.ssh/known_hosts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/passwd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/shadow<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/issue<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/fstab<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/host.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/motd<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/sysctl.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/inputrc 输入设备配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/default/useradd 添加用户的默认信息的文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/login.defs 是用户密码信息的默认属性<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/skel 用户信息的骨架<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/sbin/nologin 不能登陆的用户<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/log/message 系统的日志文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf 配置http服务的配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/ld.so.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/my.cnf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/etc/httpd/conf/httpd.conf<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.bash_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/root/.mysql_history<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/proc/mounts<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/config.gz<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/var/lib/mlocate/mlocate.db<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />/porc/self/cmdline
WINDOWS:
C:\windows\system32\drivers\etc\hosts host文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\boot.ini //查看系统版本<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\repair\sam //系统初次安装的密码<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\my.ini //Mysql配置<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Program Files\mysql\data\mysql\user.MYD //Mysqlroot<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\php.ini //php配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\my.ini //Mysql配置信息<br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />C:\Windows\win.ini //Windows系统的一个基本系统配置文件
逻辑漏洞,一些已经被很多人挖过的站点除了一些最新的漏洞之外,可能就只剩下逻辑漏洞了,比如任意密码修改,或者一些组件漏洞,还有在修改密码的地方,修改密码请求是一次发包还是分两次发包,密码找回点,有些情况下验证码就在返回包中包含着;有些情况下接受验证码的手机号或者邮箱就在请求包中,可修改为自己的,验证码就会发送到你修改的手机号或者邮箱处,挖逻辑漏洞的话,更多情况下要抓包查看,了解它的逻辑,从中找到缺陷。具体可以看:该文章专门对逻辑漏洞进行了总结。文章来源:FreeBuf.COM;作者:YLion侵权请私聊公众号删文
我做OZON的第24篇:上架产品三种方式之ERP采集刊登详细步骤
采集交流 • 优采云 发表了文章 • 0 个评论 • 973 次浏览 • 2022-08-26 13:39
目前OZON平台卖家使用最多的采集刊登软件是“芒果店长”,那么这篇文章就以【芒果店长】为例来演示如何通过ERP进行采集刊登产品。
首先说一下,对于卖家来说应该使用ERP刊登还是表格刊登,这里要看具体需求。
如果是需要大量采集和翻译图片的,那么通过ERP是会提高效率,因为ERP的图片翻译和图片采集确实要方便很多。但是如果上架产品不多,并集中在某一些品类,那么使用表格刊登反而更好!
第一步:注册登录芒果店长
各位卖家可以自己前往芒果店长注册登录,这里就不做演示
第二步:授权店铺
1、在如下图所示区域输入:店铺别名(自己填写,方便管理即可);Client-Id;Api-Key。然后点击保存即可
2、Client-Id和Api-Key的获取:
(1)进入OZON店铺后台,点击设置页面
(2)点击API秘钥
(3)在如下所示的弹窗中,点击复制按钮,复制秘钥。注意:这个秘钥仅显示1次,注意自己保存好!
3、将Client-Id和Api-Key填进去之后,点击保存,即表示授权成功!
第三步:安装最新版本芒果采集插件
芒果官网有详细的采集插件安装教程,支持chrome\360\QQ\火狐等多款浏览器。教程地址为:
如果出现如下图所示的效果,即表示插件安装成功。
第四步:采集产品(以1688为例)
1、找到你选好的产品,并将其1688的网址复制到芒果店长的采集框内;
2、点击【开始采集】
3、也可以使用采集插件采集,如下图所示,在1688页面底部会出现采集按钮,点击【开始采集】即可。
注意:在某些平台采集的时候,可能会要求授权账号。比如采集1688网址,就需要授权。在这里直接点击授权,然后进入之后输入1688账号及密码即可完成授权。然后就可以正常采集了!
4、成功采集后就会出现如下图所示状态
第五步:认领产品到ozon产品库
这里也可以批量认领,意思就是把你采集的商品认领到你的某个平台的商品库。如果你设置了自动认领规则,这个采集的产品也会自动进入你设置的平台产品刊登库。
第六步:编辑上产品
1、进入产品刊登的ozon平台页面,找到这个产品并点击【编辑】
2、编辑产品:
(1)选择店铺和类目:店铺是必选的,类目需要大家自己查找或者搜索。(如何快速发现自己产品所在的类目,后续我会发一篇文章给大家进行分享)
(2)设置基本信息:
a、标题:这里支持翻译,中文翻译成俄文,英文翻译成俄文,还是比较方便的。
b、SKU编码:自己填写,方便管理即可。
c、其他:增值税、价格、重量、尺寸、合并编号(PDP卡)等等,按照后台单个上传的要求填写即可。
(3)填写特征信息:这里根据不同的类目自动生成的维度正确填写即可。注意这里尽量多填,对于提升产品评分是有帮助的,能够提升产品的搜索权重。
(4)视频图片模块:
a、视频:与后台设置同理,需要填写youtube后缀代码。
b、图片:这里直接从来源网站获取了产品的图片信息,这是比较方便的地方,可以直接选择【采集的图片】进行上传,上传之后如果有中文或者英文信息,可以选择图片翻译。
第七步:保存并提交发布
1、建议大家全部填写完成后,先点击保存然后检查一遍,检查无误后再提交发布。
2、提交发布有两种方式,一种是定时发布,一种是直接发布。
提交发布之后,前往ozon后台即可看到该产品会进入待审核状态,等待审核通过即可。
那么以上就是关于OZON如何通过ERP软件进行采集刊登上架产品的详细教程。 查看全部
我做OZON的第24篇:上架产品三种方式之ERP采集刊登详细步骤
目前OZON平台卖家使用最多的采集刊登软件是“芒果店长”,那么这篇文章就以【芒果店长】为例来演示如何通过ERP进行采集刊登产品。
首先说一下,对于卖家来说应该使用ERP刊登还是表格刊登,这里要看具体需求。
如果是需要大量采集和翻译图片的,那么通过ERP是会提高效率,因为ERP的图片翻译和图片采集确实要方便很多。但是如果上架产品不多,并集中在某一些品类,那么使用表格刊登反而更好!
第一步:注册登录芒果店长
各位卖家可以自己前往芒果店长注册登录,这里就不做演示
第二步:授权店铺
1、在如下图所示区域输入:店铺别名(自己填写,方便管理即可);Client-Id;Api-Key。然后点击保存即可
2、Client-Id和Api-Key的获取:
(1)进入OZON店铺后台,点击设置页面
(2)点击API秘钥
(3)在如下所示的弹窗中,点击复制按钮,复制秘钥。注意:这个秘钥仅显示1次,注意自己保存好!
3、将Client-Id和Api-Key填进去之后,点击保存,即表示授权成功!

第三步:安装最新版本芒果采集插件
芒果官网有详细的采集插件安装教程,支持chrome\360\QQ\火狐等多款浏览器。教程地址为:
如果出现如下图所示的效果,即表示插件安装成功。
第四步:采集产品(以1688为例)
1、找到你选好的产品,并将其1688的网址复制到芒果店长的采集框内;
2、点击【开始采集】
3、也可以使用采集插件采集,如下图所示,在1688页面底部会出现采集按钮,点击【开始采集】即可。
注意:在某些平台采集的时候,可能会要求授权账号。比如采集1688网址,就需要授权。在这里直接点击授权,然后进入之后输入1688账号及密码即可完成授权。然后就可以正常采集了!
4、成功采集后就会出现如下图所示状态
第五步:认领产品到ozon产品库
这里也可以批量认领,意思就是把你采集的商品认领到你的某个平台的商品库。如果你设置了自动认领规则,这个采集的产品也会自动进入你设置的平台产品刊登库。

第六步:编辑上产品
1、进入产品刊登的ozon平台页面,找到这个产品并点击【编辑】
2、编辑产品:
(1)选择店铺和类目:店铺是必选的,类目需要大家自己查找或者搜索。(如何快速发现自己产品所在的类目,后续我会发一篇文章给大家进行分享)
(2)设置基本信息:
a、标题:这里支持翻译,中文翻译成俄文,英文翻译成俄文,还是比较方便的。
b、SKU编码:自己填写,方便管理即可。
c、其他:增值税、价格、重量、尺寸、合并编号(PDP卡)等等,按照后台单个上传的要求填写即可。
(3)填写特征信息:这里根据不同的类目自动生成的维度正确填写即可。注意这里尽量多填,对于提升产品评分是有帮助的,能够提升产品的搜索权重。
(4)视频图片模块:
a、视频:与后台设置同理,需要填写youtube后缀代码。
b、图片:这里直接从来源网站获取了产品的图片信息,这是比较方便的地方,可以直接选择【采集的图片】进行上传,上传之后如果有中文或者英文信息,可以选择图片翻译。
第七步:保存并提交发布
1、建议大家全部填写完成后,先点击保存然后检查一遍,检查无误后再提交发布。
2、提交发布有两种方式,一种是定时发布,一种是直接发布。
提交发布之后,前往ozon后台即可看到该产品会进入待审核状态,等待审核通过即可。
那么以上就是关于OZON如何通过ERP软件进行采集刊登上架产品的详细教程。
日志收集神器:Fluentd 的简明指南,果断收藏
采集交流 • 优采云 发表了文章 • 0 个评论 • 114 次浏览 • 2022-08-18 12:56
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd配置。
基本概念我们可能有在 bash 中执行过tail -f myapp.log | grep “what I want” > example.log这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入
tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤
| grep "what I want"
在这里,我们从尾部-f的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出
> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd
$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看input部分
@type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志example.20200510.log。
2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh.lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现grep ‘what I want’过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea
解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,能够从一些日志数据中来过滤、解析提取有用的信息。 查看全部
日志收集神器:Fluentd 的简明指南,果断收藏
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd配置。
基本概念我们可能有在 bash 中执行过tail -f myapp.log | grep “what I want” > example.log这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入
tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤
| grep "what I want"
在这里,我们从尾部-f的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出
> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}

这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd
$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看input部分
@type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志example.20200510.log。
2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches.lua:47: sleep(): executing a blocking 'sleep' (0.008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja.var.log.kong.log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh.lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。

过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现grep ‘what I want’过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea
解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,能够从一些日志数据中来过滤、解析提取有用的信息。
前端监控系列3 | 如何衡量一个站点的性能好坏
采集交流 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-08-18 01:27
作者:彭莉,火山引擎 APM 研发工程师。2020年加入字节,负责前端监控 SDK 的开发维护、平台数据消费的探索和落地。
背景你知道有多少用户没等到页面首屏出现就离开了吗?性能不佳会对业务目标产生负面影响。比如, BBC 发现他们的网站加载时间每增加一秒,他们就会失去 10% 的用户。高性能站点比低性能站点更能吸引和留住用户,而留住用户对于提高用户转化率至关重要。
这篇文章就是以此为背景,介绍字节内部是如何衡量站点性能的,如何依靠性能监控定位线上站点性能问题的。
如何衡量站点性能站点性能好坏的表现形式是多样的,不是单纯通过页面加载速度、页面渲染速度就能衡量,而是要关注从页面开始加载到被关闭的整个过程中,用户对性能的感知。一个页面,即使很快渲染,如果对用户的交互迟迟没有响应,那么在用户心中这个站点的性能依然很差。
站点性能一般可以分为两类,一类是首屏性能,另一类是运行时性能。前者衡量的是页面从加载开始到可以稳定交互的性能情况,后者衡量的是页面稳定后到页面关闭的性能情况。
首屏性能早在 2012 年, Web 性能工作组[1]就针对页面加载场景制定了加载过程模型,用来衡量页面加载各个阶段的耗时情况,从而衡量页面加载的性能。具体的加载过程模型如图所示:
这个模型定义了页面加载开始到页面加载完成整个过程的各个时间点,除了正常的初始化并且拉取到主文档的时间点以外,还包括了解析渲染的详细时间点。比如:虽然开发者可以根据这些时间点来衡量页面加载时的性能情况,但是线上用户其实感知不到这些时间点的区别。对于用户而言,只能感知到页面何时开始渲染、何时渲染出主要内容、何时可以交互、以及交互时是否有延迟。
那么针对用户感知到的这四个阶段,有没有可用于衡量的指标呢?
何时开始渲染:FP && FCP
这两个指标都来源于 Paint Timing[2] 标准, 这个标准主要是记录在页面加载期间的一些关键时间点。通过这两个指标,就可以衡量页面何时开始渲染内容了。
何时渲染出主要内容:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时渲染出主要内容了。不过业界有测试得出, LCP 非常近似于 FMP 的时间点,同时 FMP 性能消耗较大,且会因为一些细小的变化导致数值巨大波动,所以推荐使用 LCP。而 SI 因为计算复杂,指标难以解释,所以一般只在实验室环境下使用。
何时可以交互:TTI && TBT
TTI 虽然可以衡量页面可以交互的时间点,但是却无法感知这个期间浏览器的繁忙状态。而结合 TBT ,就能帮助理解在加载期间,页面无法响应用户输入的时间有多久。
交互时是否有延迟:FID && MPFIDMPFID 是一个虚拟的可能的延迟时间,而FID是用户真实的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户建立对整个应用的良好印象。同时在页面加载阶段,资源的处理任务最重,最容易产生输入延迟。
至此,通过上面每个阶段的指标,基本可以实现全面衡量首屏性能。那么运行时的性能又可以怎样衡量呢?
运行时性能
运行时性能一般可以通过Long tasks 和 Input Delay来感知。Long tasks主要是衡量主线程的繁忙情况,而 Input Delay 主要是衡量用户交互的延迟情况。
Long tasks
如果一个任务在主线程上运行超过 50 毫秒,那么它就是 Long task。如果可以收集到运行时的所有Long tasks,就能知道运行时的性能情况。在具体实践中,可以关注耗时较长的Long task,将它和用户行为关联在一起,可以有效帮助定位线上卡顿的原因。
Input Delay
它源于 Event Timing[3] 标准,这个标准主要是帮助深入了解由用户交互触发的某些事件的延迟,通过计算用户输入和处理输入后的页面绘制时间的差值来感知延迟时间。这些延迟通常是由于开发人员代码编写不当,引起 JS 执行时间过长而产生的。
性能指标的计算原理
页面性能相关的指标都有了,那么如何采集这些数据呢?
采集页面加载过程的各阶段耗时
页面加载过程中的时间点主要依赖 Navigation Timing[4] 标准,这个标准后来升级到了2.0版本, 对应 Navigation Timing 2[5]标准,两者虽然不尽相同,但是可计算出的指标基本一致。在浏览器中可以通过下面的方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
基于这些数据,不仅可以计算出 DNS / TCP / Request 等耗时,还可以计算出 DOMReady / DOMParse / Load 等耗时。
采集 FP && FCP
FP 和 FCP 可以通过浏览器提供的 API 直接获取,所以采集原理并不复杂。如果页面已经完成了首次绘制和首次内容绘制,可以使用下面的方式直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有开始首次绘制,就需要通过监听获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
采集 LCP
LCP 主要依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});<br />
浏览器会多次报告 LCP ,而一般真正的 LCP 是用户交互前最近一次报告的 LCP ,因为交互往往会改变用户可见的内容,所以用户交互后新报告的 LCP 不再符合 LCP 的指标定义。
采集 FMP与 FP / FCP / LCP 相比, FMP 的采集相对比较复杂,它需要通过算法计算得出,而业界并没有统一的算法。不过比较认可的一个计算 FMP 的方式是「认定页面在加载和渲染过程中最大布局变动之后的那个绘制时间即为当前页面的 FMP 」。由于在页面渲染过程中,「 DOM 结构变化的时间点」和与之对应的「渲染的时间点」近似相同,所以字节内部计算 FMP 的方式是:计算出 DOM 结构变化最剧烈的时间点,即为 FMP。具体步骤为:通过 MutationObserver 监听每一次页面整体的 DOM 变化,触发 MutationObserver 的回调在回调计算出当前 DOM 树的分数在结算时,通过对比得出分数变化最剧烈的时刻,即为 FMP采集 TTI && TBT与 FMP 相似,浏览器也没有提供直接获取 TTI 的 API ,不过针对如何计算 TTI 有详细的描述,实现对应描述就可以得出 TTI 的时间点。具体的描述是:先找到 FCP 的时间点,再往前找到一个安静窗口。安静窗口需要满足三个条件: 1) 没有 Long task。2)窗口中正在处理的 GET 请求不超过两个。3) 窗口时间窗读应该至少 5s。
窗口前的最后一个长任务的结束时间就是 TTI 。
而通过计算 FCP 和 TTI 之间的长任务的阻塞时间的总和,就能得出 TBT 。
阻塞时间是 Long task 中超过 50ms 后的任务耗时。
采集 FID && MPFID
FID 同样依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务耗时,可以通过监听 FCP 之后的 Long tasks,对比拿到最长的长任务就是 MPFID 。
虽然浏览器提供了足够的 API 来帮助采集各个性能指标,但是在 JS 中计算具体指标要更为复杂。原因有两点:一是 API 报告的内容和指标本身的定义有部分差异,所以计算时要处理这些差异;二是 部分场景下浏览器不会报告对应内容,这些场景下需要模拟测量。
怎样评估站点整体的性能好坏
虽然有众多性能指标,但是每个性能指标评估的都是单一方面,如何整体来看站点的性能是好是坏呢?对于每个单一指标,是否有标准去定义指标的值在具体哪个范围内能算优秀?线上的站点性能应该重点考量哪些性能指标?各个性能指标的权重占多少合适呢?
性能指标基准线Google 提供了各个性能指标的基准线,有一定的参考意义。为什么只说是有一定参考意义?首先基准线本身是在变化的,随着指标计算的逐渐更新以及软件硬件的更新,基准线也会有一定的调整。其次用户的使用场景对性能指标也会有很大的影响,比如 iOS 用户上报的性能指标一般都优于 Android 用户上报的性能指标。
下方是目前字节内部使用的部分性能指标基准线,基本对齐 Google 建议的基准线,通过这些数据可以分析站点的性能达标率情况。
衡量站点满意度
站点满意度的衡量除了要考虑常规的性能指标外,还要考虑体验类的指标,比如专门衡量视觉稳定性的指标 CLS。
线上的站点满意度衡量,一般会在参考lighthouse的满意度计算规则的基础上,去除一些推荐在实验室环境测量的指标的权重。
下方是目前字节使用的线上站点性能满意度的权重计算公式,去除了SI 和 TBT这两个不推荐在线上环境测量的指标。
那么有了一个站点满意度以后,我们终于能知道一个站点的性能好坏了。那么假设性能不好,我们应该怎样优化?
如何优化站点性能通常,我们可以从性能指标下手去做针对性的优化。虽然指标各不相同,但是优化的思路是相通的。在了解清楚指标的依赖项以后,通过优化指标的相关依赖项,就能快速优化性能指标,从而提升站点性能。说起来比较抽象,举个例子:比如当我们想要优化 TTI ,根据刚刚提到的 TTI 的计算方式,可以得出 TTI 的依赖项主要包含 FCP 、请求和 Long tasks,那么尽快的渲染、尽早的请求、请求尽快结束、避免长任务就是优化的关键。关于指标的具体优化措施的内容比较多,将在后续的文章中展开介绍。了解全面的优化措施固然重要,但把每个措施都做一遍并不一定能够高效地解决站点面临的关键性能问题。如何立竿见影、具有针对性的去优化?通过还原用户加载时的情况来帮助定位性能问题是一个思路。利用线上监控定位性能问题一般情况下,前端监控除了监控性能指标以外,还会监控请求和资源的加载以及 Long tasks 等数据,这些数据可以帮助还原用户的加载现场,帮助找到蛛丝马迹。比如下面这个例子, 多项性能指标都很差。通过监控平台还原出的资源加载瀑布图,可以看出绝大部分时间都耗在了拉取资源上。那么就可以初步得出性能优化方案,将优化措施侧重在资源优化上,比如缩小JS文件体积、延迟加载未使用的JS代码等等。
线上监控帮助定位性能问题的例子还有很多,这里不一一介绍了。截图中使用的是字节内部的前端监控平台,目前这套解决方案已同步在火山引擎上,接入即可对 Web 端真实数据进行实时监控、报警归因、聚类分析和细节定位,解决白屏、性能瓶颈、慢查询等关键问题,欢迎体验。
扫描下方二维码,立即申请免费使用⬇️ 查看全部
前端监控系列3 | 如何衡量一个站点的性能好坏
作者:彭莉,火山引擎 APM 研发工程师。2020年加入字节,负责前端监控 SDK 的开发维护、平台数据消费的探索和落地。
背景你知道有多少用户没等到页面首屏出现就离开了吗?性能不佳会对业务目标产生负面影响。比如, BBC 发现他们的网站加载时间每增加一秒,他们就会失去 10% 的用户。高性能站点比低性能站点更能吸引和留住用户,而留住用户对于提高用户转化率至关重要。
这篇文章就是以此为背景,介绍字节内部是如何衡量站点性能的,如何依靠性能监控定位线上站点性能问题的。
如何衡量站点性能站点性能好坏的表现形式是多样的,不是单纯通过页面加载速度、页面渲染速度就能衡量,而是要关注从页面开始加载到被关闭的整个过程中,用户对性能的感知。一个页面,即使很快渲染,如果对用户的交互迟迟没有响应,那么在用户心中这个站点的性能依然很差。
站点性能一般可以分为两类,一类是首屏性能,另一类是运行时性能。前者衡量的是页面从加载开始到可以稳定交互的性能情况,后者衡量的是页面稳定后到页面关闭的性能情况。
首屏性能早在 2012 年, Web 性能工作组[1]就针对页面加载场景制定了加载过程模型,用来衡量页面加载各个阶段的耗时情况,从而衡量页面加载的性能。具体的加载过程模型如图所示:
这个模型定义了页面加载开始到页面加载完成整个过程的各个时间点,除了正常的初始化并且拉取到主文档的时间点以外,还包括了解析渲染的详细时间点。比如:虽然开发者可以根据这些时间点来衡量页面加载时的性能情况,但是线上用户其实感知不到这些时间点的区别。对于用户而言,只能感知到页面何时开始渲染、何时渲染出主要内容、何时可以交互、以及交互时是否有延迟。
那么针对用户感知到的这四个阶段,有没有可用于衡量的指标呢?
何时开始渲染:FP && FCP
这两个指标都来源于 Paint Timing[2] 标准, 这个标准主要是记录在页面加载期间的一些关键时间点。通过这两个指标,就可以衡量页面何时开始渲染内容了。
何时渲染出主要内容:FMP && LCP && SI
有了这三个指标,就可以衡量页面何时渲染出主要内容了。不过业界有测试得出, LCP 非常近似于 FMP 的时间点,同时 FMP 性能消耗较大,且会因为一些细小的变化导致数值巨大波动,所以推荐使用 LCP。而 SI 因为计算复杂,指标难以解释,所以一般只在实验室环境下使用。
何时可以交互:TTI && TBT
TTI 虽然可以衡量页面可以交互的时间点,但是却无法感知这个期间浏览器的繁忙状态。而结合 TBT ,就能帮助理解在加载期间,页面无法响应用户输入的时间有多久。
交互时是否有延迟:FID && MPFIDMPFID 是一个虚拟的可能的延迟时间,而FID是用户真实的首次交互的延迟时间。所以一般推荐使用FID,它是用户对页面交互性和响应性的第一印象。良好的第一印象有助于用户建立对整个应用的良好印象。同时在页面加载阶段,资源的处理任务最重,最容易产生输入延迟。
至此,通过上面每个阶段的指标,基本可以实现全面衡量首屏性能。那么运行时的性能又可以怎样衡量呢?
运行时性能
运行时性能一般可以通过Long tasks 和 Input Delay来感知。Long tasks主要是衡量主线程的繁忙情况,而 Input Delay 主要是衡量用户交互的延迟情况。
Long tasks
如果一个任务在主线程上运行超过 50 毫秒,那么它就是 Long task。如果可以收集到运行时的所有Long tasks,就能知道运行时的性能情况。在具体实践中,可以关注耗时较长的Long task,将它和用户行为关联在一起,可以有效帮助定位线上卡顿的原因。
Input Delay

它源于 Event Timing[3] 标准,这个标准主要是帮助深入了解由用户交互触发的某些事件的延迟,通过计算用户输入和处理输入后的页面绘制时间的差值来感知延迟时间。这些延迟通常是由于开发人员代码编写不当,引起 JS 执行时间过长而产生的。
性能指标的计算原理
页面性能相关的指标都有了,那么如何采集这些数据呢?
采集页面加载过程的各阶段耗时
页面加载过程中的时间点主要依赖 Navigation Timing[4] 标准,这个标准后来升级到了2.0版本, 对应 Navigation Timing 2[5]标准,两者虽然不尽相同,但是可计算出的指标基本一致。在浏览器中可以通过下面的方式获取:
// navigation timing<br />const timing = window.performance.timing<br /><br />// navigation timing 2<br />performance.getEntriesByType('navigation')<br />
基于这些数据,不仅可以计算出 DNS / TCP / Request 等耗时,还可以计算出 DOMReady / DOMParse / Load 等耗时。
采集 FP && FCP
FP 和 FCP 可以通过浏览器提供的 API 直接获取,所以采集原理并不复杂。如果页面已经完成了首次绘制和首次内容绘制,可以使用下面的方式直接获取。
window.performance.getEntriesByType('paint')<br />// or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果页面还没有开始首次绘制,就需要通过监听获取。
const observer = new PerformanceObserver(function(list) {<br /> const perfEntries = list.getEntries();<br /> for (const perfEntry of perfEntries) {<br /> // Process entries<br /> // report back for analytics and monitoring<br /> // ...<br /> }<br />});<br /><br />// register observer for paint timing notifications<br />observer.observe({entryTypes: ["paint"]});<br />
采集 LCP
LCP 主要依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver((entryList) => {<br /> for (const entry of entryList.getEntries()) {<br /> console.log('LCP candidate:', entry.startTime, entry);<br /> }<br />}).observe({type: 'largest-contentful-paint', buffered: true});<br />
浏览器会多次报告 LCP ,而一般真正的 LCP 是用户交互前最近一次报告的 LCP ,因为交互往往会改变用户可见的内容,所以用户交互后新报告的 LCP 不再符合 LCP 的指标定义。
采集 FMP与 FP / FCP / LCP 相比, FMP 的采集相对比较复杂,它需要通过算法计算得出,而业界并没有统一的算法。不过比较认可的一个计算 FMP 的方式是「认定页面在加载和渲染过程中最大布局变动之后的那个绘制时间即为当前页面的 FMP 」。由于在页面渲染过程中,「 DOM 结构变化的时间点」和与之对应的「渲染的时间点」近似相同,所以字节内部计算 FMP 的方式是:计算出 DOM 结构变化最剧烈的时间点,即为 FMP。具体步骤为:通过 MutationObserver 监听每一次页面整体的 DOM 变化,触发 MutationObserver 的回调在回调计算出当前 DOM 树的分数在结算时,通过对比得出分数变化最剧烈的时刻,即为 FMP采集 TTI && TBT与 FMP 相似,浏览器也没有提供直接获取 TTI 的 API ,不过针对如何计算 TTI 有详细的描述,实现对应描述就可以得出 TTI 的时间点。具体的描述是:先找到 FCP 的时间点,再往前找到一个安静窗口。安静窗口需要满足三个条件: 1) 没有 Long task。2)窗口中正在处理的 GET 请求不超过两个。3) 窗口时间窗读应该至少 5s。
窗口前的最后一个长任务的结束时间就是 TTI 。
而通过计算 FCP 和 TTI 之间的长任务的阻塞时间的总和,就能得出 TBT 。

阻塞时间是 Long task 中超过 50ms 后的任务耗时。
采集 FID && MPFID
FID 同样依赖 PerformanceObserver,具体监听方式如下:
new PerformanceObserver(function(list, obs) {<br /> const firstInput = list.getEntries()[0];<br /><br /> // Measure the delay to begin processing the first input event.<br /> const firstInputDelay = firstInput.processingStart - firstInput.startTime;<br /> // Measure the duration of processing the first input event.<br /> // Only use when the important event handling work is done synchronously in the handlers.<br /> const firstInputDuration = firstInput.duration;<br /> // Obtain some information about the target of this event, such as the id.<br /> const targetId = firstInput.target ? firstInput.target.id : 'unknown-target';<br /> // Process the first input delay and perhaps its duration...<br /><br /> // Disconnect this observer since callback is only triggered once.<br /> obs.disconnect();<br />}).observe({type: 'first-input', buffered: true});<br />
MPFID 是 FCP 之后最长的长任务耗时,可以通过监听 FCP 之后的 Long tasks,对比拿到最长的长任务就是 MPFID 。
虽然浏览器提供了足够的 API 来帮助采集各个性能指标,但是在 JS 中计算具体指标要更为复杂。原因有两点:一是 API 报告的内容和指标本身的定义有部分差异,所以计算时要处理这些差异;二是 部分场景下浏览器不会报告对应内容,这些场景下需要模拟测量。
怎样评估站点整体的性能好坏
虽然有众多性能指标,但是每个性能指标评估的都是单一方面,如何整体来看站点的性能是好是坏呢?对于每个单一指标,是否有标准去定义指标的值在具体哪个范围内能算优秀?线上的站点性能应该重点考量哪些性能指标?各个性能指标的权重占多少合适呢?
性能指标基准线Google 提供了各个性能指标的基准线,有一定的参考意义。为什么只说是有一定参考意义?首先基准线本身是在变化的,随着指标计算的逐渐更新以及软件硬件的更新,基准线也会有一定的调整。其次用户的使用场景对性能指标也会有很大的影响,比如 iOS 用户上报的性能指标一般都优于 Android 用户上报的性能指标。
下方是目前字节内部使用的部分性能指标基准线,基本对齐 Google 建议的基准线,通过这些数据可以分析站点的性能达标率情况。
衡量站点满意度
站点满意度的衡量除了要考虑常规的性能指标外,还要考虑体验类的指标,比如专门衡量视觉稳定性的指标 CLS。
线上的站点满意度衡量,一般会在参考lighthouse的满意度计算规则的基础上,去除一些推荐在实验室环境测量的指标的权重。
下方是目前字节使用的线上站点性能满意度的权重计算公式,去除了SI 和 TBT这两个不推荐在线上环境测量的指标。
那么有了一个站点满意度以后,我们终于能知道一个站点的性能好坏了。那么假设性能不好,我们应该怎样优化?
如何优化站点性能通常,我们可以从性能指标下手去做针对性的优化。虽然指标各不相同,但是优化的思路是相通的。在了解清楚指标的依赖项以后,通过优化指标的相关依赖项,就能快速优化性能指标,从而提升站点性能。说起来比较抽象,举个例子:比如当我们想要优化 TTI ,根据刚刚提到的 TTI 的计算方式,可以得出 TTI 的依赖项主要包含 FCP 、请求和 Long tasks,那么尽快的渲染、尽早的请求、请求尽快结束、避免长任务就是优化的关键。关于指标的具体优化措施的内容比较多,将在后续的文章中展开介绍。了解全面的优化措施固然重要,但把每个措施都做一遍并不一定能够高效地解决站点面临的关键性能问题。如何立竿见影、具有针对性的去优化?通过还原用户加载时的情况来帮助定位性能问题是一个思路。利用线上监控定位性能问题一般情况下,前端监控除了监控性能指标以外,还会监控请求和资源的加载以及 Long tasks 等数据,这些数据可以帮助还原用户的加载现场,帮助找到蛛丝马迹。比如下面这个例子, 多项性能指标都很差。通过监控平台还原出的资源加载瀑布图,可以看出绝大部分时间都耗在了拉取资源上。那么就可以初步得出性能优化方案,将优化措施侧重在资源优化上,比如缩小JS文件体积、延迟加载未使用的JS代码等等。
线上监控帮助定位性能问题的例子还有很多,这里不一一介绍了。截图中使用的是字节内部的前端监控平台,目前这套解决方案已同步在火山引擎上,接入即可对 Web 端真实数据进行实时监控、报警归因、聚类分析和细节定位,解决白屏、性能瓶颈、慢查询等关键问题,欢迎体验。
扫描下方二维码,立即申请免费使用⬇️
日志收集神器:Fluentd 的简明指南,收好了~
采集交流 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-13 23:42
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩分享
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是 fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd 也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd 配置。
基本概念我们可能有在 bash 中执行过 tail -f myapp.log | grep “what I want” > example.log 这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤| grep "what I want"
在这里,我们从尾部 -f 的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf 是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看 input 部分 @type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string >
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志 example.20200510.log。
2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh。
lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1。1\" 404 48 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1。1\" 401 26 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1。1\" 499 0 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
log>log>
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现 grep ‘what I want’ 过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea解析访问日志
为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,我们能够从一些日志数据中来过滤、解析提取有用的信息。
福利
系统/网络/应用运维人员的交流圈子,不定期为您提供运维技术领域前沿资讯/培训课程/独家技术手册/运维工具/文档模板等,行业大咖分享交流/同行经验分享互动,期待你的加入!扫码即可加入。
随着材料不断增多社群会不定期涨价早加入更优惠
扫码添加客服微信免费获取以下资料:
1.网络安全技术资料--回复"1"
2.容器云运维资料包--回复"2"
3.Python学习资料--回复"3"
4.Devops学习视频课件--回复"4"
5.Linux运维技术资料--回复"5" 查看全部
日志收集神器:Fluentd 的简明指南,收好了~
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩分享
如果你的应用运行在分布式架构上,你很可能会使用集中式日志系统来收集它们的日志,其中我们使用比较广泛的一个工具就是 fluentd,包括在容器化时代用来收集 Kubernetes 集群应用日志, fluentd 也是使用非常多的。
本文我们将解释它是如何工作的,以及如何根据需求来调整 fluentd 配置。
基本概念我们可能有在 bash 中执行过 tail -f myapp.log | grep “what I want” > example.log 这样的命令,这其实就是 fluentd 比较擅长做的事情,tail 日志或者接收某种形式的数据,然后过滤转换,最后发送到后端存储中,我们可以将上面的命令分成多段来分析。输入tail -f myapp.log
我们要对一个文件进行长期的 tail,每当有什么日志信息被添加到文件中,它就会显示在屏幕上。这在 fluentd 中叫做输入插件,tail 只是其中之一,但还有很多其他可用的插件。
过滤| grep "what I want"
在这里,我们从尾部 -f 的输出中,只过滤包含我们想要的字符串的日志行,在 fluentd 中这叫做过滤插件。
输出> example.log
在这里,我们将 grep 命令过滤后的输出保存到一个名为 example.log 的文件中。在 fluentd 中,这就是输出插件,除了写到文件之外,fluentd 还有很多插件可以把你的日志输出到其他地方。
这就是 fluentd 的最基本的运行流程,你可以读取日志,然后处理,然后把它发送到另一个地方做进一步的分析。接下来让我们用一个小 demo 来实践这些概念,看看这3个插件是如何在一起工作的。
Demo
在这个demo 中,我们将使用 fluentd 来读取 docker 应用日志。
设置这里我们将 demo 相关的配置放置到了 Github 仓库:,克隆后最终会得到以下目录结构。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 写入日志文件的目录,在 log/kong.log 中,有一些来自本地运行的 kong 容器的日志,它们都是 docker 格式的日志。
{ "log":"2019/07/31 22:19:52 [notice] 1#0: start worker process 32\n", "stream":"stderr", "time":"2019-07-31T22:19:52.3754634Z"}
这个文件的每一行都是一个 json 文件,这就是 docker 默认驱动的日志格式。我们将对这个文件进行 tail 和解析操作,它有应用日志和访问日志混合在一起。我们的目标是只获取访问日志。etc/fluentd.conf 是我们的 fluentd 配置,其中有一个输入和一个输出部分,我们稍后会仔细来分析,首先运行 fluentd 容器。
运行 fluentd$ chmod 777 output/$ docker run -ti --rm \-v $(pwd)/etc:/fluentd/etc \-v $(pwd)/log:/var/log/ \-v $(pwd)/output:/output \fluent/fluentd:v1.11-debian-1 -c /fluentd/etc/fluentd-simplified-finished.conf -v
注意上面的运行命令和我们要挂载的卷
运行容器后,会出现如下所示的错误信息:

2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0这意味着 fluentd 已经启动并运行了。现在我们知道了 fluentd 是如何运行的了,接下来我们来看看配置文件的一些细节。Fluentd 配置输入输出首先查看 input 部分 @type tail path "/var/log/*.log" tag "ninja.*" read_from_head true @type "json" time_format "%Y-%m-%dT%H:%M:%S.%NZ" time_type string >
我们来仔细查看下这几个配置:
然后是输出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在这个配置中,有两个重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了这个配置,我们就有了一个非常简单的输入/输出管道了。
现在我们可以来看看 fluentd 创建的一个文件中的一些日志 example.20200510.log。
2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 35#0: *4 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。004 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:16 [warn] 33#0: *2 [lua] globalpatches。lua:47: sleep(): executing a blocking 'sleep' (0。008 seconds), context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:17+00:00 ninja。var。log。kong。log {"log":"2020/05/10 17:04:17 [warn] 32#0: *1 [lua] mesh。
lua:86: init(): no cluster_ca in declarative configuration: cannot use node in mesh mode, context: init_worker_by_lua*\n","stream":"stderr"}2020-05-10T17:04:30+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1。1\" 404 48 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1。1\" 401 26 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja。var。log。kong。log {"log":"172。17。0。1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1。1\" 499 0 \"-\" \"curl/7。59。0\"\n","stream":"stdout"}
注意上面的日志,每行都有3列,格式为:
log>log>
注意:标签都是 “ninja” 字符串加上目录路径和文件名,之间使用”. “分隔。
过滤
现在我们已经在 fluentd 中实现了日志的收集,接下来让我们对它进行一些过滤操作。
到目前为止,我们已经实现了前面那条命令的2个部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下输出,我们有访问日志和应用日志混合在一起,现在我们需要实现 grep ‘what I want’ 过滤。
在这个例子中,我们只想要访问日志,丢弃其他的日志行。比如说,通过 HTTP 进行 grepping 会给我们提供所有的访问日志,并将应用日志排除在外,下面的配置就可以做到这一点。
@type grep key log pattern /HTTP/
我们来分析下这个过滤配置:
现在我们停止并再次运行容器。我们应该在输出日志中看到一些不同的日志了,没有应用日志,只有访问日志数据。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:04:30 +0000] \"GET / HTTP/1.1\" 404 48 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:05:38+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:05:38 +0000] \"GET /users HTTP/1.1\" 401 26 \"-\" \"curl/7.59.0\"\n","stream":"stdout"}2020-05-10T17:06:24+00:00 ninja.var.log.kong.log {"log":"172.17.0.1 - - [10/May/2020:17:06:24 +0000] \"GET /users HTTP/1.1\" 499 0 \"-\" \"curl/7.59.0\"\n","strea解析访问日志

为了熟悉我们的配置,下面让我们添加一个解析器插件来从访问日志中提取一些其他有用的信息。在 grep 过滤器后使用下面配置。
@type parser key_name log @type nginx
同样我们来仔细查看下这个配置:
现在我们的管道是下面这个样子了。
我们再次重新运行容器,现在的访问日志应该是这样的了。
2020-05-10T17:04:30+00:00 ninja.var.log.kong.log {"remote":"172.17.0.1","host":"-","user":"-","method":"GET","path":"/","code":"404","size":"48","referer":"-","agent":"curl/7.59.0","http_x_forwarded_for":""}
这是之前日志中的第一个访问日志,现在日志内容完全不同了,我们的键从日志流,变成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我们要把这个保存到 Elasticsearch 中,我们将能够通过 method=GET 或其他组合进行过滤了。
当然我们还可以更进一步,在 remote 字段中使用 geoip 插件来提取我们我们 API 的客户端的地理位置信息,大家可以自行测试,不过需要注意的时候需要我们的镜像中包含这些插件。
总结
现在我们知道了如何用 docker 来让 fluentd 读取配置文件,我们了解了一些常用的 fluentd 配置,我们能够从一些日志数据中来过滤、解析提取有用的信息。
福利
系统/网络/应用运维人员的交流圈子,不定期为您提供运维技术领域前沿资讯/培训课程/独家技术手册/运维工具/文档模板等,行业大咖分享交流/同行经验分享互动,期待你的加入!扫码即可加入。
随着材料不断增多社群会不定期涨价早加入更优惠
扫码添加客服微信免费获取以下资料:
1.网络安全技术资料--回复"1"
2.容器云运维资料包--回复"2"
3.Python学习资料--回复"3"
4.Devops学习视频课件--回复"4"
5.Linux运维技术资料--回复"5"
开源专利分析工具(下) | The WIPO Manual on Open So
采集交流 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-08-10 15:25
将本文节选自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介绍了可用于专利分析的开源工具。本文所介绍的工具可以分为八个种类:通用工具、数据清理工具、数据挖掘工具、数据可视化工具、网络数据可视化工具、信息图制作工具、地理数据可视化工具、文本挖掘工具。上期文章介绍了前面六种(相关链接:;),本期文章介绍最后两种:地理数据可视化工具、文本挖掘工具。PART 7地理数据可视化工具
对于地理数据可视化工具,除了无处不在的Google地图和众所周知的Google地球,我们认为还可以去探索一些其他的工具。
7.1 Open Street Map目前越来越受欢迎的一款应用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受欢迎的、开源的、基于JavaScript库的交互地图。
可通过API访问。R用户可以使用leafletr包,其教程在R-bloggers上()。Python用户的相关教程可以参见以下链接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map来创建强大的交互图表组合,这些图表可以链接到具有不同地理编码精度的地图。Tableau Public可能是用专利数据创建地图的最简单的入门工具。下面这张地图就是使用自定义地理编码创建的,其展示了科学出版物出版的国家以及这些科学出版物的名称。进入后方链接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一个在所有主流平台上都能够运行的软件包。
WIPO的专利分析专家利用QGIS描绘了全球海洋生物科学研究和专利文献的全球分布,并标记了深海热液喷口的位置()。下图是基于科学文献文本挖掘得出的全球海洋科学研究点的QGIS地图。
7.5 .
.()不是一个地图制作工具,而是一个包含了全球地理名称的数据库。在.中,你可以获得很多地方的地理位置数据。用户可以在R、以及Python、Ruby、PHP的客户端通过geonames包()访问geonames。7.6 OpenLayers
如果你想要制作自定义的一些地图形式,OpenLayers()可以帮到你。用户可以通过OpenLayers在OpenStreetMap制作的地图上添加更多的图层和其他数据源,这样就可以制作出用户自己想要的地图。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款开源网络应用程序和交互式地图制作工具,CartoDB具有免费和付费两种账户。对于开发者而言,CartoDB有很多工具的扩展文档和API。7.8 D3.js
D3.js()是一个用于编辑数据和文档的JavaScript库。D3.js也是网络上流行的几个可视化工具的底层库。7.9 Highcharts
对于用于非商业用途的图表,部分图表是免费的,部分图表需要付费。7.10 Datawrapper
Datawrapper()是一个非常完整的制作图表和地图的在线可视化工具。而且Datawrapper被很多大牌新闻媒体所采用,所以它做出来的图表让你有一种似曾相识的感觉。Datawrapper也分有免费和付费的不同功能。7.11 Plotly
Plotly()为R、Python、Matlab、Node.js和Excel的用户都提供免费或付费的服务,免费版本的链接为:。R的用户可以参考Carson Sievert的一本免费的电子书Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的优点是易于使用,并且能够使用很多语言访问,这些优点使得Plotly越来越受欢迎。
PART 8文本挖掘工具8.1 TidytextWIPO的专利分析专家使用来自Julia Silge和David Robinson的tidytext R包()来进行文本挖掘。tidytext可以将文本挖掘的任务变得简单,并且还有免费的电子书可以参考。此外,我们还推荐你使用来自Tyler Rinker的textclean R包()来清理数据。8.2 Weka
Weka()是一个基于Java的文本挖掘软件。8.3 NLTK
NLTK()是Python中最好的包了,它几乎能够实现所有主流需求。其配套的书籍NaturalLanguage Processing with Python也值得参考。
此外,Python文本挖掘包()比NLTK包更简单,但可能适合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一个通用目的的机器学习库,其提供了关于处理文本和数据集的详细说明文档()。8.5 spaCy
spaCy是一个用于处理自然语言的免费机器学习包。spaCy最近越来越受欢迎,因为它专注于创建可以投入生产的机器学习模型,而不仅仅是学术探索。在推进自然语言处理并使得每个人都可以使用方面,spaCy作出了非常重要的贡献。我们推荐由spaCy的创始人和开发者之一的Ines Montani所写的免费教程(),来帮助学习如何使用spaCy。如果是使用R的用户,那么可以使用由伦敦经济学院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo开发的spacyr包,这是一个非常好的选择,并且在使用时也有据可查。8.6 机器学习的注解工具(Annotation Tools forMachine Learning)在对文本或图像进行机器学习时,通常需要对一些文本或图像进行注释以训练模型。在这一方面,出现了越来越多的工具,包括需要付费的explosion.ai(其开发者为spaCy的开发者)。下面列出了一些可供尝试的免费工具:• Label Studio()• Inception()• Doccano()• Label Box()8.7 Google单词树(Google Word Trees)Word Trees可以用来对文本进行详细分析,例如对权利要求进行分析做成权利要求树。
Google Developers网站上的GoogleWord Trees提供了使用Javascript生成单词树的说明。8.8 R语言文本挖掘tm包R的文本挖掘tm包提供了很多访问文本挖掘工具的途径。使用者可以参考tm包的开发者所写的说明()。在R-bloggers()上也有很多非常实用的关于文本挖掘的教程。推荐参考由Graham Williams在2014年写的教程Hands-On Data Science with R Text Mining。关于近期的基于R的文本挖掘工具的概览,可以参见Fridolin Wild于2021年写的CRAN Task View: Natural Language Processing()。需要注意的是,许多文本挖掘包通常侧重于生成单词。这种方式,对于非学术目的的文本挖掘工作,并不十分有用。比如,对于专利分析来说,更注重于从文本中提取出短语,而非单词。因此,对专利分析人员而言,寻找那些能够提取短语并且允许对其进行深入挖掘的工具更有意义。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的资源。但是,近来R和Python正越来越多地被一起使用,以发挥它们的不同优势。8.10 其他文本挖掘资源有关更多的文本挖掘工具的选择,请参阅这篇预测分析文章Top20 free text mining software tools()。
对于其他免费文本挖掘工具,可以参考一些语料库语言学网站(corpus linguistics websites)(语料库语言学,主要研究机器可读的自然语言文本的采集、存储、检索、统计、词性和句法标注、句法语义分析,以及具有上述功能的语料库在语言定量分析、词典编纂、作品风格分析、自然语言理解和机器翻译等领域中的应用),例如:Corpus software and related tools()。一些分析工具是专门为处理专利数据而开发的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育类型的app)的用户可以免费使用VantagePoint的补贴版本。
还有一些定性数据分析软件工具可以应用于专利分析,例如:
•MAXQDA()
•AtlasTI()
•QDAMiner()
但是,除了QDAMine Lite(仅限 Windows)之外,其他的工具提供了免费试用的机会,这些工具并不属于我们所关注的开源工具。
PART 9小结在这三篇文章系列中(;),我们介绍了可用于专利分析的一些主要的免费和开源工具。这些工具并不是专门用于专利分析的,但是它们能够用来分析专利数据。在实践中,了解这些工具的作用,以及了解你的分析需求,是非常重要的。在专利分析的实践中,将付费工具和免费工具结合起来使用也是非常重要的。例如,WIPO的专利分析报告《动物遗传资源专利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,对1100万件专利文献进行大规模文本挖掘,并结合使用PATSTAT进行数据统计,使用Thomson Innovation和VantagePoint进行数据验证,使用Tableau和Gephi做数据可视化。简而言之,使用免费的开源工具来完成一个专利分析项目是可能的,但是如果想要让专利分析的整个流程进行更顺畅,可能需要结合开源工具和商业工具一起使用。所以,了解这些工具并且清楚它们的强项和优势在哪里十分重要。PART 10选择分析工具需要考虑的问题清单当开始使用一项开源软件时,最好是要提前问问自己下面这些问题,来判断这些工具是否能够满足你的特定需求。
下面的这个清单并不是固定的,只是为了鼓励你在使用开源工具之前先思考并明确一下这个工具是否适用。1. 这个工具有意义吗?也就是说,你能不能立刻清楚这个工具的用途是什么?如果答案是否定的,这个工具对于你的特定需求来说可能过于专业,或者是这个工具的开发者可能没有清楚的表明这个工具想要实现的目的,那这就要慎重选择。2.你是否了解这个工具所涉及的编程语言?如果你不了解这个编程语言的话,会不会对你使用这个工具产生影响?为了使用这个工具而去学习该编程语言是否值得?有没有免费的或者你能负担的相关课程?3.源代码是开源的还是专有的?开源许可的条款和条件是什么?当使用开源和免费软件时,清楚地了解开源许可的精确范围。例如,你是否需要以与原始许可完全相同的条款向他人提供对源代码的任何修改?如果你处理了源代码,这就会存在知识产权风险。如果你没有在源代码层面上工作,这可能不就不涉及知识产权问题。了解开放源代码许可对我们的工作来说总是有意义的。4.谁将拥有我的数据?如果我们需要上传数据到一个基于网页的服务应用上,那么数据上传之后谁会拥有这些数据,其他什么人会在什么条件下能够获得这些数据?当这些数据是商业相关的,这个问题就显得尤为关键。
5.“免费”到底意味着什么?免费版本通常会导致高级服务(即转变为付费的服务)。这一转变是开源商业模型的关键特征。在一些情况下,免费的版本可能只能处理、存储或输出少量的数据。在另一些情况下,有些免费工具并不会对用户在使用上施加任何限制,但是使用这些免费工具要求用户具备相应的知识或技能。6.有其他企业(或者专利局)在使用这个工具吗?如果有的话,就说明这个工具较为可靠并且还能够找到相应的案例。7.这个工具是否有相关的使用说明文档或者教程?这是反映该工具是否成熟的指标。如果有很多教程和说明文档,说明在行业中有很多人在使用它。8.有多少人在使用这个工具?这些用户是否积极创建论坛和博客等,以支持用户广泛地交流其使用经验?9.这个工具是只有一个功能还是集成了很多不同的功能?换言之,这个工具能够满足所有的需求,还是仅仅是我们工具箱中的一个特殊的工具。在一些情况下,一个专注于一种功能的工具能够把这个功能做到极致,而那些同时集成了很多功能的工具可能每一项功能都仅仅是一般般。在本文中所列出的所有工具中,R和Python(或者它们的结合使用)能够实现专利分析全流程,从数据采集到数据可视化。在实践中,大多数专利分析工具箱都包含通用工具和特定工具。
10.这个工具的极限在哪里?我们需要了解一个软件的极限在哪里,这样以后在尝试做一些关键任务时就会有所准备。例如,一些软件声称可以完成一些特定的任务,比如处理上千条或者上百万条数据,但实际上如果真的处理了这么大量的数据,结果就会很糟糕。通过尝试使用这个工具到其极限,可以确定这个工具极限在哪里以及如何充分利用它。11.这个工具是否符合我的需求?最近,大数据和使用Hadoop进行分布式计算处理大量数据是领域热点。Hadoop是开源的,任何人都可以使用它,但是Hadoop和大部分的专利分析需求都不相匹配,除非是需要分析全球所有的专利文献,大量的文献资料和科学数据。举例来说,前文中提到的WIPO的《动物遗传资源专利分析报告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel处理了1100万条专利记录。而决定使用GNU Parallel而非Hadoop来处理这1100万条专利数据的部分原因,是因为我们认为Hadoop使用起来比较复杂,而且对于Hadoop来说,处理1100万条数据属于大材小用。简而言之,仔细考虑一个工具是否与我们的目标需求相适应和相匹配是十分重要的。12.最后,用一个简单的原则来总结如何衡量一个工具是否可用于专利分析,即这个工具对我有没有用? 查看全部
开源专利分析工具(下) | The WIPO Manual on Open So
将本文节选自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介绍了可用于专利分析的开源工具。本文所介绍的工具可以分为八个种类:通用工具、数据清理工具、数据挖掘工具、数据可视化工具、网络数据可视化工具、信息图制作工具、地理数据可视化工具、文本挖掘工具。上期文章介绍了前面六种(相关链接:;),本期文章介绍最后两种:地理数据可视化工具、文本挖掘工具。PART 7地理数据可视化工具
对于地理数据可视化工具,除了无处不在的Google地图和众所周知的Google地球,我们认为还可以去探索一些其他的工具。
7.1 Open Street Map目前越来越受欢迎的一款应用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受欢迎的、开源的、基于JavaScript库的交互地图。
可通过API访问。R用户可以使用leafletr包,其教程在R-bloggers上()。Python用户的相关教程可以参见以下链接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map来创建强大的交互图表组合,这些图表可以链接到具有不同地理编码精度的地图。Tableau Public可能是用专利数据创建地图的最简单的入门工具。下面这张地图就是使用自定义地理编码创建的,其展示了科学出版物出版的国家以及这些科学出版物的名称。进入后方链接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一个在所有主流平台上都能够运行的软件包。
WIPO的专利分析专家利用QGIS描绘了全球海洋生物科学研究和专利文献的全球分布,并标记了深海热液喷口的位置()。下图是基于科学文献文本挖掘得出的全球海洋科学研究点的QGIS地图。
7.5 .
.()不是一个地图制作工具,而是一个包含了全球地理名称的数据库。在.中,你可以获得很多地方的地理位置数据。用户可以在R、以及Python、Ruby、PHP的客户端通过geonames包()访问geonames。7.6 OpenLayers

如果你想要制作自定义的一些地图形式,OpenLayers()可以帮到你。用户可以通过OpenLayers在OpenStreetMap制作的地图上添加更多的图层和其他数据源,这样就可以制作出用户自己想要的地图。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款开源网络应用程序和交互式地图制作工具,CartoDB具有免费和付费两种账户。对于开发者而言,CartoDB有很多工具的扩展文档和API。7.8 D3.js
D3.js()是一个用于编辑数据和文档的JavaScript库。D3.js也是网络上流行的几个可视化工具的底层库。7.9 Highcharts
对于用于非商业用途的图表,部分图表是免费的,部分图表需要付费。7.10 Datawrapper
Datawrapper()是一个非常完整的制作图表和地图的在线可视化工具。而且Datawrapper被很多大牌新闻媒体所采用,所以它做出来的图表让你有一种似曾相识的感觉。Datawrapper也分有免费和付费的不同功能。7.11 Plotly
Plotly()为R、Python、Matlab、Node.js和Excel的用户都提供免费或付费的服务,免费版本的链接为:。R的用户可以参考Carson Sievert的一本免费的电子书Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的优点是易于使用,并且能够使用很多语言访问,这些优点使得Plotly越来越受欢迎。
PART 8文本挖掘工具8.1 TidytextWIPO的专利分析专家使用来自Julia Silge和David Robinson的tidytext R包()来进行文本挖掘。tidytext可以将文本挖掘的任务变得简单,并且还有免费的电子书可以参考。此外,我们还推荐你使用来自Tyler Rinker的textclean R包()来清理数据。8.2 Weka
Weka()是一个基于Java的文本挖掘软件。8.3 NLTK
NLTK()是Python中最好的包了,它几乎能够实现所有主流需求。其配套的书籍NaturalLanguage Processing with Python也值得参考。

此外,Python文本挖掘包()比NLTK包更简单,但可能适合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一个通用目的的机器学习库,其提供了关于处理文本和数据集的详细说明文档()。8.5 spaCy
spaCy是一个用于处理自然语言的免费机器学习包。spaCy最近越来越受欢迎,因为它专注于创建可以投入生产的机器学习模型,而不仅仅是学术探索。在推进自然语言处理并使得每个人都可以使用方面,spaCy作出了非常重要的贡献。我们推荐由spaCy的创始人和开发者之一的Ines Montani所写的免费教程(),来帮助学习如何使用spaCy。如果是使用R的用户,那么可以使用由伦敦经济学院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo开发的spacyr包,这是一个非常好的选择,并且在使用时也有据可查。8.6 机器学习的注解工具(Annotation Tools forMachine Learning)在对文本或图像进行机器学习时,通常需要对一些文本或图像进行注释以训练模型。在这一方面,出现了越来越多的工具,包括需要付费的explosion.ai(其开发者为spaCy的开发者)。下面列出了一些可供尝试的免费工具:• Label Studio()• Inception()• Doccano()• Label Box()8.7 Google单词树(Google Word Trees)Word Trees可以用来对文本进行详细分析,例如对权利要求进行分析做成权利要求树。
Google Developers网站上的GoogleWord Trees提供了使用Javascript生成单词树的说明。8.8 R语言文本挖掘tm包R的文本挖掘tm包提供了很多访问文本挖掘工具的途径。使用者可以参考tm包的开发者所写的说明()。在R-bloggers()上也有很多非常实用的关于文本挖掘的教程。推荐参考由Graham Williams在2014年写的教程Hands-On Data Science with R Text Mining。关于近期的基于R的文本挖掘工具的概览,可以参见Fridolin Wild于2021年写的CRAN Task View: Natural Language Processing()。需要注意的是,许多文本挖掘包通常侧重于生成单词。这种方式,对于非学术目的的文本挖掘工作,并不十分有用。比如,对于专利分析来说,更注重于从文本中提取出短语,而非单词。因此,对专利分析人员而言,寻找那些能够提取短语并且允许对其进行深入挖掘的工具更有意义。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的资源。但是,近来R和Python正越来越多地被一起使用,以发挥它们的不同优势。8.10 其他文本挖掘资源有关更多的文本挖掘工具的选择,请参阅这篇预测分析文章Top20 free text mining software tools()。
对于其他免费文本挖掘工具,可以参考一些语料库语言学网站(corpus linguistics websites)(语料库语言学,主要研究机器可读的自然语言文本的采集、存储、检索、统计、词性和句法标注、句法语义分析,以及具有上述功能的语料库在语言定量分析、词典编纂、作品风格分析、自然语言理解和机器翻译等领域中的应用),例如:Corpus software and related tools()。一些分析工具是专门为处理专利数据而开发的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育类型的app)的用户可以免费使用VantagePoint的补贴版本。
还有一些定性数据分析软件工具可以应用于专利分析,例如:
•MAXQDA()
•AtlasTI()
•QDAMiner()
但是,除了QDAMine Lite(仅限 Windows)之外,其他的工具提供了免费试用的机会,这些工具并不属于我们所关注的开源工具。
PART 9小结在这三篇文章系列中(;),我们介绍了可用于专利分析的一些主要的免费和开源工具。这些工具并不是专门用于专利分析的,但是它们能够用来分析专利数据。在实践中,了解这些工具的作用,以及了解你的分析需求,是非常重要的。在专利分析的实践中,将付费工具和免费工具结合起来使用也是非常重要的。例如,WIPO的专利分析报告《动物遗传资源专利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,对1100万件专利文献进行大规模文本挖掘,并结合使用PATSTAT进行数据统计,使用Thomson Innovation和VantagePoint进行数据验证,使用Tableau和Gephi做数据可视化。简而言之,使用免费的开源工具来完成一个专利分析项目是可能的,但是如果想要让专利分析的整个流程进行更顺畅,可能需要结合开源工具和商业工具一起使用。所以,了解这些工具并且清楚它们的强项和优势在哪里十分重要。PART 10选择分析工具需要考虑的问题清单当开始使用一项开源软件时,最好是要提前问问自己下面这些问题,来判断这些工具是否能够满足你的特定需求。
下面的这个清单并不是固定的,只是为了鼓励你在使用开源工具之前先思考并明确一下这个工具是否适用。1. 这个工具有意义吗?也就是说,你能不能立刻清楚这个工具的用途是什么?如果答案是否定的,这个工具对于你的特定需求来说可能过于专业,或者是这个工具的开发者可能没有清楚的表明这个工具想要实现的目的,那这就要慎重选择。2.你是否了解这个工具所涉及的编程语言?如果你不了解这个编程语言的话,会不会对你使用这个工具产生影响?为了使用这个工具而去学习该编程语言是否值得?有没有免费的或者你能负担的相关课程?3.源代码是开源的还是专有的?开源许可的条款和条件是什么?当使用开源和免费软件时,清楚地了解开源许可的精确范围。例如,你是否需要以与原始许可完全相同的条款向他人提供对源代码的任何修改?如果你处理了源代码,这就会存在知识产权风险。如果你没有在源代码层面上工作,这可能不就不涉及知识产权问题。了解开放源代码许可对我们的工作来说总是有意义的。4.谁将拥有我的数据?如果我们需要上传数据到一个基于网页的服务应用上,那么数据上传之后谁会拥有这些数据,其他什么人会在什么条件下能够获得这些数据?当这些数据是商业相关的,这个问题就显得尤为关键。
5.“免费”到底意味着什么?免费版本通常会导致高级服务(即转变为付费的服务)。这一转变是开源商业模型的关键特征。在一些情况下,免费的版本可能只能处理、存储或输出少量的数据。在另一些情况下,有些免费工具并不会对用户在使用上施加任何限制,但是使用这些免费工具要求用户具备相应的知识或技能。6.有其他企业(或者专利局)在使用这个工具吗?如果有的话,就说明这个工具较为可靠并且还能够找到相应的案例。7.这个工具是否有相关的使用说明文档或者教程?这是反映该工具是否成熟的指标。如果有很多教程和说明文档,说明在行业中有很多人在使用它。8.有多少人在使用这个工具?这些用户是否积极创建论坛和博客等,以支持用户广泛地交流其使用经验?9.这个工具是只有一个功能还是集成了很多不同的功能?换言之,这个工具能够满足所有的需求,还是仅仅是我们工具箱中的一个特殊的工具。在一些情况下,一个专注于一种功能的工具能够把这个功能做到极致,而那些同时集成了很多功能的工具可能每一项功能都仅仅是一般般。在本文中所列出的所有工具中,R和Python(或者它们的结合使用)能够实现专利分析全流程,从数据采集到数据可视化。在实践中,大多数专利分析工具箱都包含通用工具和特定工具。
10.这个工具的极限在哪里?我们需要了解一个软件的极限在哪里,这样以后在尝试做一些关键任务时就会有所准备。例如,一些软件声称可以完成一些特定的任务,比如处理上千条或者上百万条数据,但实际上如果真的处理了这么大量的数据,结果就会很糟糕。通过尝试使用这个工具到其极限,可以确定这个工具极限在哪里以及如何充分利用它。11.这个工具是否符合我的需求?最近,大数据和使用Hadoop进行分布式计算处理大量数据是领域热点。Hadoop是开源的,任何人都可以使用它,但是Hadoop和大部分的专利分析需求都不相匹配,除非是需要分析全球所有的专利文献,大量的文献资料和科学数据。举例来说,前文中提到的WIPO的《动物遗传资源专利分析报告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel处理了1100万条专利记录。而决定使用GNU Parallel而非Hadoop来处理这1100万条专利数据的部分原因,是因为我们认为Hadoop使用起来比较复杂,而且对于Hadoop来说,处理1100万条数据属于大材小用。简而言之,仔细考虑一个工具是否与我们的目标需求相适应和相匹配是十分重要的。12.最后,用一个简单的原则来总结如何衡量一个工具是否可用于专利分析,即这个工具对我有没有用?
完整收集信息以扩展实战攻击面
采集交流 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-07-24 01:01
原文:0x00 前言
距离上次分享文章已经过去了5个月,写这篇文章之前。我已经做了较多的渗透项目,也打了一些地级和省级市的红队项目。在此期间,让我感觉非常受用的技巧无非是对于信息的收集,不管是在前期打点,亦或是拿到shell后的横向,对于目标信息的掌握程度,很大层面决定了能打到多深,能打到多宽。由于自己技术受限,仍然停留在安服水平,因此文章主要以简单技巧分享为主。主要是分享自己在早期以及近期遇到的两个例子,也是较为简单的实战技术理论,并不是较为复杂的研究性分享,分别以外部和内部为例。
并且本文主要是说收集信息,而不是信息收集,希望加以区分。
0x01 外部_收集信息
这个例子是我以前众测的时候找到的一系列漏洞,主要成果就是通过日志泄露到Getshell。
该站点是Thinkphp的,但是做了Nginx反代,通过wappalyzer可以收集到站点指纹,通过路径报错,也可以判断出是TP站点,一般此时要么是3.x要么是5.x
最后通过漏洞扫描工具ThinkphpGUI-1.2-SNAPSHOT发现存在Tp3.x日志泄露的问题
通过TPlogScan获取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
获取了若干日志后,就到了收集信息的重点,这里主要分享的实战理论就是
在收集信息中,一定要将所获得的信息和关键字关联,进行灵活筛选
所获得的信息,在这里就是指,我们获取的TP日志,回想一般日志会记录的东西,比如Sql语句,比如攻击流量,比如程序运行日志。
关键字,在这里就是指,我们经常关心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
关联:将这些得到的信息和关键字关联,比如Sql语句中会出现对用户名称和密码的对比是否正确,会出现数据的添加删除等。
灵活筛选:根据现有信息,去优先选择我们需要获得的信息
如只有一个后台登录页面,当前最好的筛选是通过用户名密码的字段在大量的日志中去筛选password,username,passwd,user等关键字,尝试获取某个用户的账号密码,进入后台,去扩展自己的攻击面;
又或是此时已获得后台用户权限,想找到一个Sql注入打到shell或内网,此时应该以Insert,Delete,Update,Select,Where,Order By等关键字为主,去筛选查找;
或通过漏洞拿到了shell分但是数据库用户密码是加密的,此时还想继续获取数据分,呢么还是类似1的方式,筛选password,username,Admin,Administrator,root,system等高权限用户关键字,尝试获取在写入数据库前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情况,灵活关联
我当时正处于第一种情况只有一个登录页面,此时立马去筛选关键字,在庞大的日志中,筛选出来了一条关于管理员用户admin的查询语句
获取到了hash值,然后很幸运的是,cmd5有相关缓存,直接解了出来
进入后台后,在上传处有对后缀的限制,有对内容的限制
此处我通过换行绕过后缀限制,脏数据绕过了对内容的限制,成功上传了php的shell
其实这些后续的bypass上传花费了我更长的事件,上述上传还需要一次特别的更名操作,才能被解析,但这里不是写Getshell的,而不是分享收集信息的实战理论,因此不多讲。这里主要就是跟大家啰嗦了下,在拿到仅限的大量无用信息中,一定要把此时自己获得的信息和关键字做匹配,做关联,减少在废物信息中的搜寻时间,最效率化利用当前的信息,去扩展自己的渗透攻击面
0x02 内部_收集信息
前期Shiro打点(我也很好奇,2022年了,还有shiro),特别小的内网,没任何东西打,只能拿数据分了。
尝试翻找各种数据库配置文件,可以根据数据库后缀文件名进行检索,比如yml,ini,conf,config等
这个数据库里面数据很少,基本凑不够。
于是找到一个源码备份文件,虽然不懂Java,但是只要能收集信息的地方,我们一个都不能漏。在源码文件中,我们可以收集到的信息,往往有很多硬编码的信息,注释中的测试账号密码,泄露的token,api,accesskey等。
即使你不会java,你也可以解压缩jar包,然后丢到IDEA中可查看源代码。或者使用Jd-Gui直接打开jar包也可以查看源代码
发现jar包中打包进来了数据库配置文件,里面有一个内网的aliyun mysql数据库。没有太多的用户数据,但是发现了一些app_id,app_secret字段
拿着通过这些关键字,我在源代码中检索,发现跟微信相关
通过查询资料发现,app_id和app_secret是关于企业微信的,两个参数认证后可以获取Token,通过Token可以调用企业微信的各种API,比如将自己添加到企业微信用户中,获取企业微信部门人员列表等,具体利用可参考下面的文章
这里我通过id和sercert认证获取Token中,由于不在白名单中,被拒绝了。
此时我仍没有放弃,在数据库中继续检索关键词Token(sql语句检索列名或内容可参考百度学习),发现了token_cache的字段,翻译过来就是token缓存
此时通过/cgi-bin/groups/get api验证Token是可用状态,后续的信息利用就不放出了,无非是获取了部门所有人员详细信息,以及提个严重漏洞罢了
搞完数据库,我接着看源码,此时我没有立刻搜索文件内容,而是搜索整个jar包中的文件名,关键字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通过关键字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通过文件名我找到了一个带有OSS名字的class
通过该Class我又找到了一些存储配置的Class
找到了两个阿里云 accesskey,一个七牛云的acesskey
通过阿里云accesskey拿到一个OSS BUCKET 以及150多台的云主机
0x03 总结
通过上述内网的两个例子,主要就是想将现有信息和关键字关联,灵活筛选。
简单的说,就是要根据当前获得信息的固有属性来与关键字做适配,什么环境该拥有什么属性,什么属性该适配哪种检索关键字以及检索方式。尽可能的做一个关联性假想。
本篇文章实质是实战技术案例分享,但是想透过两个特别简单的例子,来描述下自己心中对于收集信息,扩展攻击面的认知。基本是自我粗糙的拙见,如果能给各位师傅带来一点技巧的扩充帮助,也足够我欢喜了。
喜欢就点在看哦~
长按识别二维码
欢迎投稿
EMAIL:
博客: 查看全部
完整收集信息以扩展实战攻击面
原文:0x00 前言
距离上次分享文章已经过去了5个月,写这篇文章之前。我已经做了较多的渗透项目,也打了一些地级和省级市的红队项目。在此期间,让我感觉非常受用的技巧无非是对于信息的收集,不管是在前期打点,亦或是拿到shell后的横向,对于目标信息的掌握程度,很大层面决定了能打到多深,能打到多宽。由于自己技术受限,仍然停留在安服水平,因此文章主要以简单技巧分享为主。主要是分享自己在早期以及近期遇到的两个例子,也是较为简单的实战技术理论,并不是较为复杂的研究性分享,分别以外部和内部为例。
并且本文主要是说收集信息,而不是信息收集,希望加以区分。
0x01 外部_收集信息
这个例子是我以前众测的时候找到的一系列漏洞,主要成果就是通过日志泄露到Getshell。
该站点是Thinkphp的,但是做了Nginx反代,通过wappalyzer可以收集到站点指纹,通过路径报错,也可以判断出是TP站点,一般此时要么是3.x要么是5.x
最后通过漏洞扫描工具ThinkphpGUI-1.2-SNAPSHOT发现存在Tp3.x日志泄露的问题
通过TPlogScan获取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
获取了若干日志后,就到了收集信息的重点,这里主要分享的实战理论就是
在收集信息中,一定要将所获得的信息和关键字关联,进行灵活筛选
所获得的信息,在这里就是指,我们获取的TP日志,回想一般日志会记录的东西,比如Sql语句,比如攻击流量,比如程序运行日志。
关键字,在这里就是指,我们经常关心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
关联:将这些得到的信息和关键字关联,比如Sql语句中会出现对用户名称和密码的对比是否正确,会出现数据的添加删除等。
灵活筛选:根据现有信息,去优先选择我们需要获得的信息
如只有一个后台登录页面,当前最好的筛选是通过用户名密码的字段在大量的日志中去筛选password,username,passwd,user等关键字,尝试获取某个用户的账号密码,进入后台,去扩展自己的攻击面;
又或是此时已获得后台用户权限,想找到一个Sql注入打到shell或内网,此时应该以Insert,Delete,Update,Select,Where,Order By等关键字为主,去筛选查找;
或通过漏洞拿到了shell分但是数据库用户密码是加密的,此时还想继续获取数据分,呢么还是类似1的方式,筛选password,username,Admin,Administrator,root,system等高权限用户关键字,尝试获取在写入数据库前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情况,灵活关联
我当时正处于第一种情况只有一个登录页面,此时立马去筛选关键字,在庞大的日志中,筛选出来了一条关于管理员用户admin的查询语句
获取到了hash值,然后很幸运的是,cmd5有相关缓存,直接解了出来

进入后台后,在上传处有对后缀的限制,有对内容的限制
此处我通过换行绕过后缀限制,脏数据绕过了对内容的限制,成功上传了php的shell
其实这些后续的bypass上传花费了我更长的事件,上述上传还需要一次特别的更名操作,才能被解析,但这里不是写Getshell的,而不是分享收集信息的实战理论,因此不多讲。这里主要就是跟大家啰嗦了下,在拿到仅限的大量无用信息中,一定要把此时自己获得的信息和关键字做匹配,做关联,减少在废物信息中的搜寻时间,最效率化利用当前的信息,去扩展自己的渗透攻击面
0x02 内部_收集信息
前期Shiro打点(我也很好奇,2022年了,还有shiro),特别小的内网,没任何东西打,只能拿数据分了。
尝试翻找各种数据库配置文件,可以根据数据库后缀文件名进行检索,比如yml,ini,conf,config等
这个数据库里面数据很少,基本凑不够。
于是找到一个源码备份文件,虽然不懂Java,但是只要能收集信息的地方,我们一个都不能漏。在源码文件中,我们可以收集到的信息,往往有很多硬编码的信息,注释中的测试账号密码,泄露的token,api,accesskey等。
即使你不会java,你也可以解压缩jar包,然后丢到IDEA中可查看源代码。或者使用Jd-Gui直接打开jar包也可以查看源代码
发现jar包中打包进来了数据库配置文件,里面有一个内网的aliyun mysql数据库。没有太多的用户数据,但是发现了一些app_id,app_secret字段
拿着通过这些关键字,我在源代码中检索,发现跟微信相关
通过查询资料发现,app_id和app_secret是关于企业微信的,两个参数认证后可以获取Token,通过Token可以调用企业微信的各种API,比如将自己添加到企业微信用户中,获取企业微信部门人员列表等,具体利用可参考下面的文章
这里我通过id和sercert认证获取Token中,由于不在白名单中,被拒绝了。
此时我仍没有放弃,在数据库中继续检索关键词Token(sql语句检索列名或内容可参考百度学习),发现了token_cache的字段,翻译过来就是token缓存
此时通过/cgi-bin/groups/get api验证Token是可用状态,后续的信息利用就不放出了,无非是获取了部门所有人员详细信息,以及提个严重漏洞罢了

搞完数据库,我接着看源码,此时我没有立刻搜索文件内容,而是搜索整个jar包中的文件名,关键字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通过关键字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通过文件名我找到了一个带有OSS名字的class
通过该Class我又找到了一些存储配置的Class
找到了两个阿里云 accesskey,一个七牛云的acesskey
通过阿里云accesskey拿到一个OSS BUCKET 以及150多台的云主机
0x03 总结
通过上述内网的两个例子,主要就是想将现有信息和关键字关联,灵活筛选。
简单的说,就是要根据当前获得信息的固有属性来与关键字做适配,什么环境该拥有什么属性,什么属性该适配哪种检索关键字以及检索方式。尽可能的做一个关联性假想。
本篇文章实质是实战技术案例分享,但是想透过两个特别简单的例子,来描述下自己心中对于收集信息,扩展攻击面的认知。基本是自我粗糙的拙见,如果能给各位师傅带来一点技巧的扩充帮助,也足够我欢喜了。
喜欢就点在看哦~
长按识别二维码
欢迎投稿
EMAIL:
博客: