文章采集api
行業(yè)解決方案:WebRTC錄采集平面數據
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-10-20 18:39
1. 網(wǎng)絡(luò )交易采集
WebRTC中有一個(gè)可用于獲取桌面的API:獲取顯示媒體
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
約束是可選的 約束約束與 getUser 媒體函數中的約束一致。
2. 采集平面數據
采集平面數據:此功能在 Chrome 中是實(shí)驗性的。
在實(shí)際戰斗之前,我們需要打開(kāi)瀏覽器并進(jìn)行設置 chrome://flags/#enable-experimental-web-platform-features
如下圖所示:
接下來(lái),讓我們看一下具體的js代碼,如下所示:
C++音頻和視頻開(kāi)發(fā)
學(xué)習地址:免費]FFMPEG/WebRTC/RTMP/NDK/安卓音視頻流高級開(kāi)發(fā)
【文章福利】:免費C++音視頻學(xué)習包、技術(shù)視頻、內容包括(音視頻開(kāi)發(fā)、大廠(chǎng)面試問(wèn)題、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免費分享,如有必要,可以添加君陽(yáng)接收! ~學(xué)習交流俊陽(yáng)994289133點(diǎn)擊加入即可接收信息包
'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');
// 定義二進(jìn)制數組
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 獲取視頻幀圖片相關(guān)的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是設備信息的數組
function gotDevices(deviceInfos){
// 遍歷設備信息數組, 函數里面也有個(gè)參數是每一項的deviceinfo, 這樣我們就拿到每個(gè)設備的信息了
deviceInfos.forEach(function(deviceinfo){
// 創(chuàng )建每一項
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方面里面我們要傳人一個(gè)參數,也就是流,
// 這個(gè)流里面實(shí)際上包含了音頻軌和視頻軌,因為我們通過(guò)constraints設置了要采集視頻和音頻
// 我們直接吧這個(gè)流賦值給HTML中賦值的video標簽
// 當時(shí)拿到這個(gè)流了,說(shuō)明用戶(hù)已經(jīng)同意去訪(fǎng)問(wèn)音視頻設備了
function gotMediaStream(stream){
<p>
// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定數據源來(lái)自stream,這樣視頻標簽采集到這個(gè)數據之后就可以將視頻和音頻播放出來(lái)
// 通過(guò)stream來(lái)獲取到視頻的track 這樣我們就將所有的視頻流中的track都獲取到了,這里我們只取列表中的第一個(gè)
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我們就能調用Track的方法
var videoConstraints = videoTrack.getSettings(); // 這樣就可以拿到所有video的約束
// 將這個(gè)對象轉化成json格式
// 第一個(gè)是videoConstraints, 第二個(gè)為空, 第三個(gè)表示縮進(jìn)2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 當我們采集到音視頻的數據之后,我們返回一個(gè)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;
// 這里是約束參數,正常情況下我們只需要是否使用視頻是否使用音頻
// 對于視頻就可以按我們剛才所說(shuō)的做一些限制
/**
* video : {
width: 640, // 寬帶
height: 480, // 高度
frameRate:15, // 幀率
facingMode: 'enviroment', // 設置為后置攝像頭
deviceId : deviceId ? deviceId : undefined // 如果deviceId不為空直接設置值,如果為空就是undefined
},
*/
var constraints = { // 表示同時(shí)采集視頻金和音頻
video : true,
audio : false
}
// 調用錄屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 這樣就可以抓起桌面的數據了
.then(gotMediaStream) // 使用Promise串聯(lián)的方式,獲取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 當我選擇攝像頭的時(shí)候,他可以觸發(fā)一個(gè)事件,
// 當我調用start之后我要改變constraints
videoSource.onchange = start;
// 選擇特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 點(diǎn)擊按鈕獲取視頻幀圖片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 調用canvas API獲取上下文,圖片是二維的,所以2d,這樣我們就拿到它的上下文了
// 調用drawImage繪制圖片,第一個(gè)參數就是視頻,我們這里是videoplay,
// 第二和第三個(gè)參數是起始點(diǎn) 0,0
// 第四個(gè)和第五個(gè)參數表示圖片的高度和寬度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//
function handleDataAvailable(e){ // 5、獲取數據的事件函數 當我們點(diǎn)擊錄制之后,數據就會(huì )源源不斷的從這個(gè)事件函數中獲取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 將e.data放入二進(jìn)制數組里面
// 這個(gè)buffer應該是我們在開(kāi)始錄制的時(shí)候創(chuàng )建這個(gè)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,以便于后面停止錄制的時(shí)候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 調用錄制API // window.stream在gotMediaStream中獲取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、調用事件 這個(gè)事件處理函數里面就會(huì )收到我們錄制的那塊數據 當我們收集到這個(gè)數據之后我們應該把它存儲起來(lái)
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面傳入一個(gè)時(shí)間片,每隔一個(gè) 時(shí)間片存儲 一塊數據
}
// 3、停止錄制
function stopRecord(){
// 6、調用停止錄制
mediaRecorder.stop();
}
// 1、錄制視頻
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 開(kāi)始錄制
startRecord(); // 調用startRecord方法開(kāi)啟錄制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按鈕狀態(tài)禁止
btnDownload.disabled = true; // 下載按鈕狀態(tài)禁止
}else{ // 結束錄制
stopRecord(); // 停止錄制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止錄制之后可以播放
btnDownload.disabled = false; // 停止錄制可以下載
}
}
// 點(diǎn)擊播放視頻
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>
原創(chuàng )鏈接:WebRTC錄制采集平面數據 - 信息中心 - 音視頻發(fā)展中國網(wǎng) - 打造中國最權威的音視頻技術(shù)交流分享論壇
解決方案:百度seo快速排名工具!
軟件介紹
百度seo快速排名工具,用來(lái)提高百度權重,百度排名的小工具。
使用場(chǎng)景
如果您以前沒(méi)有看過(guò)它,您可以先回顧一下。
就是說(shuō)做網(wǎng)站一般來(lái)說(shuō),如果你想做一個(gè)高權重的網(wǎng)站,要花很長(cháng)時(shí)間,甚至很多年,如果你想花時(shí)間做一個(gè)高權重網(wǎng)站,可以刷品牌字。
比如第一次做煎蛋的時(shí)候,雖然權重是0,但是必須在上排名第一。
只是炒蛋網(wǎng)這個(gè)詞沒(méi)有索引,所以權重也是0。我們想一想:只要我們把炒蛋網(wǎng)這個(gè)詞刷出索引,然后把這個(gè)詞提交到站長(cháng)家,那么我們可以在短時(shí)間內獲得高權重。
另外,一個(gè)帶有“網(wǎng)上賺錢(qián)”等索引的詞,搜索這個(gè)詞,你的網(wǎng)站可能在第10頁(yè),普通人找不到你的網(wǎng)站。
但是如果你用軟件,搜索這個(gè)詞,然后進(jìn)入你的網(wǎng)站,搜索引擎也會(huì )認為你的網(wǎng)站滿(mǎn)足了用戶(hù)的需求,也會(huì )提升你的排名。
指示
打開(kāi)軟件設置“ip代理api地址”、搜索詞、URL。
添加會(huì )有點(diǎn)慢。
也可以直接在文件夾中設置:
需要注意的是ip代理api地址需要購買(mǎi)和付費,有幾個(gè)免費的已經(jīng)測試過(guò),不能使用。
另外,搜狗搜索也不行。
如果要刷多個(gè)字,可以多打開(kāi)軟件,放在多個(gè)文件夾中,全部打開(kāi)!
下載鏈接 查看全部
行業(yè)解決方案:WebRTC錄采集平面數據
1. 網(wǎng)絡(luò )交易采集
WebRTC中有一個(gè)可用于獲取桌面的API:獲取顯示媒體
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
約束是可選的 約束約束與 getUser 媒體函數中的約束一致。
2. 采集平面數據
采集平面數據:此功能在 Chrome 中是實(shí)驗性的。
在實(shí)際戰斗之前,我們需要打開(kāi)瀏覽器并進(jìn)行設置 chrome://flags/#enable-experimental-web-platform-features
如下圖所示:
接下來(lái),讓我們看一下具體的js代碼,如下所示:
C++音頻和視頻開(kāi)發(fā)
學(xué)習地址:免費]FFMPEG/WebRTC/RTMP/NDK/安卓音視頻流高級開(kāi)發(fā)
【文章福利】:免費C++音視頻學(xué)習包、技術(shù)視頻、內容包括(音視頻開(kāi)發(fā)、大廠(chǎng)面試問(wèn)題、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免費分享,如有必要,可以添加君陽(yáng)接收! ~學(xué)習交流俊陽(yáng)994289133點(diǎn)擊加入即可接收信息包
'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');
// 定義二進(jìn)制數組
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 獲取視頻幀圖片相關(guān)的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是設備信息的數組
function gotDevices(deviceInfos){
// 遍歷設備信息數組, 函數里面也有個(gè)參數是每一項的deviceinfo, 這樣我們就拿到每個(gè)設備的信息了
deviceInfos.forEach(function(deviceinfo){
// 創(chuàng )建每一項
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方面里面我們要傳人一個(gè)參數,也就是流,
// 這個(gè)流里面實(shí)際上包含了音頻軌和視頻軌,因為我們通過(guò)constraints設置了要采集視頻和音頻
// 我們直接吧這個(gè)流賦值給HTML中賦值的video標簽
// 當時(shí)拿到這個(gè)流了,說(shuō)明用戶(hù)已經(jīng)同意去訪(fǎng)問(wèn)音視頻設備了
function gotMediaStream(stream){
<p>

// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定數據源來(lái)自stream,這樣視頻標簽采集到這個(gè)數據之后就可以將視頻和音頻播放出來(lái)
// 通過(guò)stream來(lái)獲取到視頻的track 這樣我們就將所有的視頻流中的track都獲取到了,這里我們只取列表中的第一個(gè)
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我們就能調用Track的方法
var videoConstraints = videoTrack.getSettings(); // 這樣就可以拿到所有video的約束
// 將這個(gè)對象轉化成json格式
// 第一個(gè)是videoConstraints, 第二個(gè)為空, 第三個(gè)表示縮進(jìn)2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 當我們采集到音視頻的數據之后,我們返回一個(gè)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;
// 這里是約束參數,正常情況下我們只需要是否使用視頻是否使用音頻
// 對于視頻就可以按我們剛才所說(shuō)的做一些限制
/**
* video : {
width: 640, // 寬帶
height: 480, // 高度
frameRate:15, // 幀率
facingMode: 'enviroment', // 設置為后置攝像頭
deviceId : deviceId ? deviceId : undefined // 如果deviceId不為空直接設置值,如果為空就是undefined
},
*/
var constraints = { // 表示同時(shí)采集視頻金和音頻
video : true,
audio : false
}
// 調用錄屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 這樣就可以抓起桌面的數據了
.then(gotMediaStream) // 使用Promise串聯(lián)的方式,獲取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 當我選擇攝像頭的時(shí)候,他可以觸發(fā)一個(gè)事件,
// 當我調用start之后我要改變constraints
videoSource.onchange = start;
// 選擇特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 點(diǎn)擊按鈕獲取視頻幀圖片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 調用canvas API獲取上下文,圖片是二維的,所以2d,這樣我們就拿到它的上下文了
// 調用drawImage繪制圖片,第一個(gè)參數就是視頻,我們這里是videoplay,
// 第二和第三個(gè)參數是起始點(diǎn) 0,0
// 第四個(gè)和第五個(gè)參數表示圖片的高度和寬度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//

function handleDataAvailable(e){ // 5、獲取數據的事件函數 當我們點(diǎn)擊錄制之后,數據就會(huì )源源不斷的從這個(gè)事件函數中獲取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 將e.data放入二進(jìn)制數組里面
// 這個(gè)buffer應該是我們在開(kāi)始錄制的時(shí)候創(chuàng )建這個(gè)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,以便于后面停止錄制的時(shí)候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 調用錄制API // window.stream在gotMediaStream中獲取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、調用事件 這個(gè)事件處理函數里面就會(huì )收到我們錄制的那塊數據 當我們收集到這個(gè)數據之后我們應該把它存儲起來(lái)
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面傳入一個(gè)時(shí)間片,每隔一個(gè) 時(shí)間片存儲 一塊數據
}
// 3、停止錄制
function stopRecord(){
// 6、調用停止錄制
mediaRecorder.stop();
}
// 1、錄制視頻
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 開(kāi)始錄制
startRecord(); // 調用startRecord方法開(kāi)啟錄制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按鈕狀態(tài)禁止
btnDownload.disabled = true; // 下載按鈕狀態(tài)禁止
}else{ // 結束錄制
stopRecord(); // 停止錄制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止錄制之后可以播放
btnDownload.disabled = false; // 停止錄制可以下載
}
}
// 點(diǎn)擊播放視頻
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>
原創(chuàng )鏈接:WebRTC錄制采集平面數據 - 信息中心 - 音視頻發(fā)展中國網(wǎng) - 打造中國最權威的音視頻技術(shù)交流分享論壇
解決方案:百度seo快速排名工具!
軟件介紹
百度seo快速排名工具,用來(lái)提高百度權重,百度排名的小工具。
使用場(chǎng)景
如果您以前沒(méi)有看過(guò)它,您可以先回顧一下。
就是說(shuō)做網(wǎng)站一般來(lái)說(shuō),如果你想做一個(gè)高權重的網(wǎng)站,要花很長(cháng)時(shí)間,甚至很多年,如果你想花時(shí)間做一個(gè)高權重網(wǎng)站,可以刷品牌字。

比如第一次做煎蛋的時(shí)候,雖然權重是0,但是必須在上排名第一。
只是炒蛋網(wǎng)這個(gè)詞沒(méi)有索引,所以權重也是0。我們想一想:只要我們把炒蛋網(wǎng)這個(gè)詞刷出索引,然后把這個(gè)詞提交到站長(cháng)家,那么我們可以在短時(shí)間內獲得高權重。
另外,一個(gè)帶有“網(wǎng)上賺錢(qián)”等索引的詞,搜索這個(gè)詞,你的網(wǎng)站可能在第10頁(yè),普通人找不到你的網(wǎng)站。
但是如果你用軟件,搜索這個(gè)詞,然后進(jìn)入你的網(wǎng)站,搜索引擎也會(huì )認為你的網(wǎng)站滿(mǎn)足了用戶(hù)的需求,也會(huì )提升你的排名。
指示
打開(kāi)軟件設置“ip代理api地址”、搜索詞、URL。

添加會(huì )有點(diǎn)慢。
也可以直接在文件夾中設置:
需要注意的是ip代理api地址需要購買(mǎi)和付費,有幾個(gè)免費的已經(jīng)測試過(guò),不能使用。
另外,搜狗搜索也不行。
如果要刷多個(gè)字,可以多打開(kāi)軟件,放在多個(gè)文件夾中,全部打開(kāi)!
下載鏈接
通用解決方案:程序員必備網(wǎng)站之一:API Coding
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-10-18 15:17
大家好,我叫G。
前不久,我們推送了一篇文章文章《這個(gè)神器可以幫助你快速找到你想要的API接口!》,分享給大家網(wǎng)站:來(lái)自印度、丹麥的開(kāi)發(fā)者制作的Public APIs,其主要功能是幫助開(kāi)發(fā)者找到一些免費實(shí)用的API接口。
在文章的最后,順便提到了作者的其他幾個(gè)項目,并承諾以后會(huì )介紹給大家。今天,小G就是來(lái)兌現這個(gè)承諾的。
下面我們要介紹的網(wǎng)站就是API Coding。
它的主要功能是采集和匯總眾多API相關(guān)的開(kāi)放接口、學(xué)習資源、工具教程等,幫助開(kāi)發(fā)者降低信息檢索成本和學(xué)習成本。
地址:apicoding.io
從它的主頁(yè)介紹來(lái)看,它的主要內容主要分為以下幾類(lèi)。
API 合集:自由開(kāi)放的接口
它采集了互聯(lián)網(wǎng)上大量免費開(kāi)放的API接口,包括視頻會(huì )議、股票分析、貨幣轉換、PDF轉換、IP查詢(xún)、圖像壓縮、短鏈生成等眾多不同功能的API接口。
地址:apicoding.io/public-apis
學(xué)習:解釋API開(kāi)發(fā)的文章
共收錄6個(gè)文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 開(kāi)發(fā)工具
共采集了22個(gè)有用的API工具,包括但不限于云存儲、云托管、JSON在線(xiàn)編輯/解析/生成、API接口調試、假數據生成、數據爬取等功能。
地址:apicoding.io/tools
資源:API 教程和項目在線(xiàn)開(kāi)放
主要采集網(wǎng)上眾多作者發(fā)現的優(yōu)質(zhì)API教程,包括API的最佳開(kāi)發(fā)實(shí)踐、微軟API設計指南、REST API的快速創(chuàng )建、真實(shí)環(huán)境在線(xiàn)部署等。
地址:apicoding.io/resources
總體來(lái)說(shuō),網(wǎng)站提供的界面列表、學(xué)習資源、開(kāi)發(fā)工具都挺實(shí)用的。
如果你目前的API接口設計和開(kāi)發(fā)能力比較薄弱,建議你看看這個(gè)網(wǎng)站,相信你能在上面找到很多好東西。
--
文末安利還有一波我們的公眾號:GitHubDaily。目前每天至少更新3篇文章,主要分享比較實(shí)用或者有趣的開(kāi)發(fā)工具和開(kāi)源項目,偶爾聊聊技術(shù)圈的最新。有什么新鮮事,感興趣的朋友可以關(guān)注一下。
高效的方法:如何利用SEO站長(cháng)工具優(yōu)化工作
網(wǎng)站 的提升都被優(yōu)化器使用。沒(méi)有搜索引擎優(yōu)化,推廣是不可能的。百度站長(cháng)之物的推出,得到了草根站長(cháng)們的大力支持。雖然這些東西不能滿(mǎn)足很多地方站長(cháng)的需求,但是很多內容都很好的支持了站長(cháng)。如何更好地利用百度站長(cháng)?有必要了解一下百度站長(cháng)的一些成就。
1.如何發(fā)送外部鏈接應該從外部鏈接分析中獲得。這些都是自然技巧,其他的網(wǎng)站在講解的時(shí)候也需要說(shuō)明。你會(huì )發(fā)現百度文章采集里面的文字很好,百度筆墨采集前面的鏈接也很不錯。這很好。錨文本上下文鏈接是網(wǎng)站外鏈發(fā)布的重要推廣上下文,也是站長(cháng)們關(guān)注和值得做的事情。
2. 競爭對手數據也可以通過(guò)外鏈進(jìn)行解釋。通過(guò)外鏈搞定站長(cháng),可以輕松搞定一系列外鏈競爭對手。我們能知道有多少外展是有效的,外展的傳遞平臺在哪里?俗話(huà)說(shuō):“知己知彼,百戰百勝”。解釋競爭對手的 網(wǎng)站 是我創(chuàng )建 網(wǎng)站 的常見(jiàn)情況。實(shí)時(shí)獲取競爭對手的外鏈資源,挖掘新資源是重中之重。站長(cháng)只有大量的熟人對競爭對手的所有信息進(jìn)行粗略的解釋和超越。競爭對手的外部鏈接也是站長(cháng)學(xué)習的。
3. 豐富使用網(wǎng)頁(yè)優(yōu)化啟動(dòng)“可以提高網(wǎng)站的訪(fǎng)問(wèn)率,站長(cháng)可以利用一系列條件來(lái)提高網(wǎng)站的運行率,這些成就每個(gè)都要學(xué)習豐富網(wǎng)站。這樣一個(gè)敷衍的商業(yè)網(wǎng)站的結果是非常實(shí)用的。網(wǎng)頁(yè)優(yōu)化的結果是當我創(chuàng )建一個(gè)網(wǎng)站并更新它時(shí),我可以實(shí)時(shí)照顧百度。如何優(yōu)化我的網(wǎng)站網(wǎng)站? 同時(shí),網(wǎng)站 上有一些headers 需要改進(jìn)。
這可以讓你在輸入關(guān)鍵詞后查看這些詞中哪些相關(guān)詞被用戶(hù)搜索過(guò),從而可以大致提高網(wǎng)站對關(guān)鍵詞的收益。
站長(cháng)使用東西在很大程度上簡(jiǎn)化了站長(cháng)在使用過(guò)程中,服從性也提高了,站長(cháng)的優(yōu)化能力也提高了。這些都是百度站長(cháng)用的東西。雖然現在百度的東西還不是很全面,但相信在不久的將來(lái),站長(cháng)的東西會(huì )全面轉型,內容會(huì )越來(lái)越滿(mǎn)意。 查看全部
通用解決方案:程序員必備網(wǎng)站之一:API Coding
大家好,我叫G。
前不久,我們推送了一篇文章文章《這個(gè)神器可以幫助你快速找到你想要的API接口!》,分享給大家網(wǎng)站:來(lái)自印度、丹麥的開(kāi)發(fā)者制作的Public APIs,其主要功能是幫助開(kāi)發(fā)者找到一些免費實(shí)用的API接口。
在文章的最后,順便提到了作者的其他幾個(gè)項目,并承諾以后會(huì )介紹給大家。今天,小G就是來(lái)兌現這個(gè)承諾的。
下面我們要介紹的網(wǎng)站就是API Coding。
它的主要功能是采集和匯總眾多API相關(guān)的開(kāi)放接口、學(xué)習資源、工具教程等,幫助開(kāi)發(fā)者降低信息檢索成本和學(xué)習成本。
地址:apicoding.io
從它的主頁(yè)介紹來(lái)看,它的主要內容主要分為以下幾類(lèi)。
API 合集:自由開(kāi)放的接口

它采集了互聯(lián)網(wǎng)上大量免費開(kāi)放的API接口,包括視頻會(huì )議、股票分析、貨幣轉換、PDF轉換、IP查詢(xún)、圖像壓縮、短鏈生成等眾多不同功能的API接口。
地址:apicoding.io/public-apis
學(xué)習:解釋API開(kāi)發(fā)的文章
共收錄6個(gè)文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 開(kāi)發(fā)工具
共采集了22個(gè)有用的API工具,包括但不限于云存儲、云托管、JSON在線(xiàn)編輯/解析/生成、API接口調試、假數據生成、數據爬取等功能。
地址:apicoding.io/tools

資源:API 教程和項目在線(xiàn)開(kāi)放
主要采集網(wǎng)上眾多作者發(fā)現的優(yōu)質(zhì)API教程,包括API的最佳開(kāi)發(fā)實(shí)踐、微軟API設計指南、REST API的快速創(chuàng )建、真實(shí)環(huán)境在線(xiàn)部署等。
地址:apicoding.io/resources
總體來(lái)說(shuō),網(wǎng)站提供的界面列表、學(xué)習資源、開(kāi)發(fā)工具都挺實(shí)用的。
如果你目前的API接口設計和開(kāi)發(fā)能力比較薄弱,建議你看看這個(gè)網(wǎng)站,相信你能在上面找到很多好東西。
--
文末安利還有一波我們的公眾號:GitHubDaily。目前每天至少更新3篇文章,主要分享比較實(shí)用或者有趣的開(kāi)發(fā)工具和開(kāi)源項目,偶爾聊聊技術(shù)圈的最新。有什么新鮮事,感興趣的朋友可以關(guān)注一下。
高效的方法:如何利用SEO站長(cháng)工具優(yōu)化工作
網(wǎng)站 的提升都被優(yōu)化器使用。沒(méi)有搜索引擎優(yōu)化,推廣是不可能的。百度站長(cháng)之物的推出,得到了草根站長(cháng)們的大力支持。雖然這些東西不能滿(mǎn)足很多地方站長(cháng)的需求,但是很多內容都很好的支持了站長(cháng)。如何更好地利用百度站長(cháng)?有必要了解一下百度站長(cháng)的一些成就。

1.如何發(fā)送外部鏈接應該從外部鏈接分析中獲得。這些都是自然技巧,其他的網(wǎng)站在講解的時(shí)候也需要說(shuō)明。你會(huì )發(fā)現百度文章采集里面的文字很好,百度筆墨采集前面的鏈接也很不錯。這很好。錨文本上下文鏈接是網(wǎng)站外鏈發(fā)布的重要推廣上下文,也是站長(cháng)們關(guān)注和值得做的事情。
2. 競爭對手數據也可以通過(guò)外鏈進(jìn)行解釋。通過(guò)外鏈搞定站長(cháng),可以輕松搞定一系列外鏈競爭對手。我們能知道有多少外展是有效的,外展的傳遞平臺在哪里?俗話(huà)說(shuō):“知己知彼,百戰百勝”。解釋競爭對手的 網(wǎng)站 是我創(chuàng )建 網(wǎng)站 的常見(jiàn)情況。實(shí)時(shí)獲取競爭對手的外鏈資源,挖掘新資源是重中之重。站長(cháng)只有大量的熟人對競爭對手的所有信息進(jìn)行粗略的解釋和超越。競爭對手的外部鏈接也是站長(cháng)學(xué)習的。
3. 豐富使用網(wǎng)頁(yè)優(yōu)化啟動(dòng)“可以提高網(wǎng)站的訪(fǎng)問(wèn)率,站長(cháng)可以利用一系列條件來(lái)提高網(wǎng)站的運行率,這些成就每個(gè)都要學(xué)習豐富網(wǎng)站。這樣一個(gè)敷衍的商業(yè)網(wǎng)站的結果是非常實(shí)用的。網(wǎng)頁(yè)優(yōu)化的結果是當我創(chuàng )建一個(gè)網(wǎng)站并更新它時(shí),我可以實(shí)時(shí)照顧百度。如何優(yōu)化我的網(wǎng)站網(wǎng)站? 同時(shí),網(wǎng)站 上有一些headers 需要改進(jìn)。

這可以讓你在輸入關(guān)鍵詞后查看這些詞中哪些相關(guān)詞被用戶(hù)搜索過(guò),從而可以大致提高網(wǎng)站對關(guān)鍵詞的收益。
站長(cháng)使用東西在很大程度上簡(jiǎn)化了站長(cháng)在使用過(guò)程中,服從性也提高了,站長(cháng)的優(yōu)化能力也提高了。這些都是百度站長(cháng)用的東西。雖然現在百度的東西還不是很全面,但相信在不久的將來(lái),站長(cháng)的東西會(huì )全面轉型,內容會(huì )越來(lái)越滿(mǎn)意。
完整解決方案:JavaScript架構前端監控搭建過(guò)程步驟
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 72 次瀏覽 ? 2022-10-18 05:15
目錄
前言
上一篇介紹了為什么前端會(huì )有監控系統?前端監控系統有什么意義?有朋友看完后留言,想聽(tīng)聽(tīng)一些詳細的實(shí)現。那么在本文中,我們將開(kāi)始介紹前端監控是如何實(shí)現的。
如果還是不明白為什么,監控有什么用,推薦閱讀上一篇文章文章:前端為什么不能沒(méi)有監控系統?
在實(shí)施之前,首先要在腦海中有一個(gè)整體的背景,了解構建前端監控的具體流程步驟。因為前端監控系統其實(shí)是一個(gè)完整的全棧項目,不僅僅是前端,甚至主要的實(shí)現都圍繞著(zhù)數據。
當然,還有一點(diǎn)需要說(shuō)明。本文的實(shí)現主要針對普通業(yè)務(wù)和中小廠(chǎng)自研方向。我看過(guò)大廠(chǎng)做的監控系統。它非常復雜和強大,動(dòng)輒數以?xún)|計的數據。最終走向了大數據的方向。我只介紹如何實(shí)現main函數,如何解決問(wèn)題。
前端監控的構建過(guò)程分為以下幾個(gè)階段:
下面我來(lái)梳理一下各個(gè)階段的關(guān)鍵實(shí)現思路。
采集階段:采集什么數據?
監控的第一步是采集數據。有數據是監控的前提。
采集數據的含義是記錄用戶(hù)在使用產(chǎn)品過(guò)程中的真實(shí)操作。結合我們上一篇的分析,實(shí)際操作產(chǎn)生的數據可以分為兩類(lèi):異常數據和行為數據。
我們先分析異常數據。項目中的異常一般可以分為兩類(lèi),一類(lèi)是前端異常,一類(lèi)是接口異常。
前端異常
前端異常大致可以分為:
最重要的,也是我們遇到最多的,就是各種js代碼執行異常。比如類(lèi)型錯誤、引用錯誤等。這些異常大部分是由于我們的編碼不精確造成的,所以采集這些異常有助于我們提高編碼質(zhì)量。
然后是 Promise 異常。Promise 是 ES6 最重要的屬性之一??简炍覀兊膉s異步編程能力,主要體現在接口請求上。因此,這兩部分的異常捕獲非常關(guān)鍵。
另外,靜態(tài)資源加載異常一般是指引用了一些html中的圖片地址、第三方j(luò )s地址等,由于各種原因不能正常加載,這個(gè)也要監控。
console.error 異常一般用在第三方前端框架中。它自定義了一些錯誤,會(huì )被console.error拋出。此類(lèi)異常也需要被捕獲。
至于跨域異常,我們經(jīng)常會(huì )遇到這種情況,通??梢栽谇昂蠖碎_(kāi)發(fā)聯(lián)調階段發(fā)現。但不確定是后端的配置突然在線(xiàn)更改,導致前端跨域。為了安全起見(jiàn),您還應該對其進(jìn)行監控。
前端異常采集大概只有這5種,基本覆蓋了前端90%以上的異常。
接口異常
接口異常屬于后端異常,但是接口異常會(huì )直接導致前端頁(yè)面錯誤。因此,此類(lèi)異常是我們判斷線(xiàn)上問(wèn)題根源的重要依據。接口異??梢愿鶕憫Y果分類(lèi):
有時(shí)由于網(wǎng)絡(luò )問(wèn)題或服務(wù)器問(wèn)題,前端發(fā)起請求后沒(méi)有收到響應,請求被掛起。這次是無(wú)響應/超時(shí)響應異常。對于此類(lèi)異常,我們可以設置最大請求時(shí)間,超時(shí)后主動(dòng)斷開(kāi)請求,添加接口超時(shí)記錄。
另外,其他類(lèi)型的接口異??梢愿鶕﨟TTP狀態(tài)碼或者后端返回的error_code等指定字段來(lái)判斷。
不管是使用狀態(tài)碼還是其他判斷方式,只要能區分異常類(lèi)型,這個(gè)不是嚴格要求的。
4xx異常類(lèi)型是請求異常,一般是前端傳遞的參數有問(wèn)題,或者接口驗證參數有問(wèn)題。處理此類(lèi)異常的關(guān)鍵是保存請求參數,這樣可以方便前端排查。
5xx 錯誤是服務(wù)器內部處理的異常。此類(lèi)異常的關(guān)鍵信息是報錯時(shí)間和返回的異常描述。保存這些可以方便后端查找日志。
我認為權限不足也是一種重要的錯誤類(lèi)型。因為有些管理系統的權限設計比較復雜,有時(shí)候界面突然莫名其妙無(wú)法調整,影響用戶(hù)接下來(lái)的操作,也需要記錄和跟蹤。
行為數據
行為數據比較廣泛,用戶(hù)任何有意義的操作都可以定義為行為數據。
例如,當一個(gè)按鈕被點(diǎn)擊時(shí),它在那里停留了多長(cháng)時(shí)間,新功能的點(diǎn)擊率,何時(shí)使用等等。自主研發(fā)的監控系統的優(yōu)勢之一是靈活性。您需要的任何有用信息都可以在此階段進(jìn)行設計。
這個(gè)階段非常關(guān)鍵,是監控系統設計的核心,所以我寫(xiě)的很詳細,這個(gè)階段大家要多考慮采集哪些數據。后面的階段都是基于這個(gè)設計的具體實(shí)現。
API階段:構建上報數據的API接口
在上一階段,采集數據計劃已經(jīng)準備好了。當 采集 數據到達時(shí),接下來(lái)會(huì )上報數據。
說(shuō)白了,數據上報就是通過(guò)調用API接口將數據傳輸出來(lái),然后存入數據庫。因此,這個(gè)階段的任務(wù)是構建一個(gè)用于報告數據的API接口應用程序。
作為一名光榮的前端工程師,在開(kāi)發(fā)接口時(shí)自然會(huì )選擇屬于 JS 家族的 Node.js。Node.js 目前有很多框架。我比較喜歡輕量簡(jiǎn)潔,什么都需要自己安裝,所以選擇了簡(jiǎn)潔經(jīng)典的Express框架。
構建 API 應用程序要做的事情是:
還有一些細節需要處理。這個(gè)階段對于后端基礎薄弱的同學(xué)來(lái)說(shuō)是一個(gè)很好的學(xué)習機會(huì )。
強烈建議前端的朋友掌握一些后端的基礎知識,至少從簡(jiǎn)單的原理上了解是怎么回事。這個(gè)階段主要是了解API應用是如何搭建的,每個(gè)部分為什么要做,可以解決哪些問(wèn)題,這樣你對后端的基礎知識就會(huì )建立起來(lái)。
框架搭建好后,主要是設計接口URL,然后編寫(xiě)處理邏輯,保證這一步設計的接口可以調整,可以接收數據。
數據存儲階段:與數據庫接口對接
上一步我們構建了API接口,接收到采集的數據。然后,在這一步中,我們需要連接數據庫,并將 采集 中的數據存儲到數據庫中。
數據庫方面,選擇對前端最友好的,屬于NoSQL家族的文檔數據庫MongoDB。
這個(gè)數據庫最大的特點(diǎn)就是存儲的數據格式類(lèi)似于JSON,操作就像在JS中調用函數,結合JOSN數據。我們很容易理解并開(kāi)始使用前端??梢栽趯?shí)戰過(guò)程中體驗。優(yōu)雅也。
數據存儲階段主要介紹數據庫的基本信息和操作,包括以下幾個(gè)方面:
這個(gè)階段的關(guān)鍵是數據驗證。在設計完數據庫字段后,我們希望所有寫(xiě)入的數據都必須符合我們想要的數據格式。如果驗證后不符合,我們可以補充或修改數據字段,或者干脆拒絕寫(xiě)入,這樣可以保證數據的可靠性,避免不必要的數據清洗。
數據寫(xiě)入完成后,需要添加一些簡(jiǎn)單的查詢(xún)和修改功能。因為要在寫(xiě)完數據后查看執行是否成功,可以查看一個(gè)列表來(lái)查看結果。
還需要修改功能。前端監控中一個(gè)很常見(jiàn)的需求就是計算用戶(hù)的頁(yè)面停留時(shí)間。我的計劃是在用戶(hù)進(jìn)入某個(gè)頁(yè)面時(shí)創(chuàng )建一條記錄,然后在用戶(hù)離開(kāi)時(shí)修改該記錄并添加一個(gè)結束時(shí)間字段,這需要修改功能。
最后但并非最不重要的一點(diǎn)是,許多人都在談?wù)撊绾吻謇頂祿?。?shí)際上,這取決于您在將數據存儲在您面前時(shí)如何驗證。如果確實(shí)可以存儲無(wú)效數據,可以寫(xiě)一個(gè)清空數據的接口,自己寫(xiě)清空邏輯,定時(shí)執行。
查詢(xún)統計階段:數據查詢(xún)和統計分析
經(jīng)過(guò)一系列的準備,我們已經(jīng)完成了API接口和數據寫(xiě)入的功能。假設我們有 采集 足夠的數據并存儲在數據庫中,這個(gè)階段就是充分利用這些數據的時(shí)候了。
這個(gè)階段的主要任務(wù)是對數據進(jìn)行檢索和統計分析,基本上是“查詢(xún)”操作。
這里的查詢(xún)不僅僅是為了檢查,如何檢查,關(guān)系到我們采集到的數據能否得到有效利用。我的想法是從這兩個(gè)方面入手:
當然,這只是籠統的說(shuō)法。行為數據也將在一行中查詢(xún)。例如,如果我想查看用戶(hù)在某個(gè)時(shí)間做了什么,這就是精確搜索。還有異常數據的統計,比如異常接口的觸發(fā)頻率排名。
行為數據量會(huì )非常大,在用戶(hù)使用系統的過(guò)程中會(huì )頻繁生成并寫(xiě)入數據庫。因此,在這類(lèi)數據的大部分情況下,都是通過(guò)聚合查詢(xún)的方式,從頁(yè)數、時(shí)間等多個(gè)維度進(jìn)行整體統計,最后得出一些百分比的結論。這些統計值可以大致反映產(chǎn)品的實(shí)際使用情況。
這里有個(gè)優(yōu)化點(diǎn),因為頻繁的請求會(huì )增加接口的負擔,所以一部分數據也可以在本地存儲,達到一定數量后,一次性請求并存儲接口。
異常數據對于開(kāi)發(fā)者來(lái)說(shuō)非常重要,對于我們定位和解決bug來(lái)說(shuō)是天賜之物。與行為數據的多重統計不同,我們更關(guān)心異常數據的每一條記錄的詳細信息,讓錯誤一目了然。
查詢(xún)異常數據也比較簡(jiǎn)單。和普通的列表查詢(xún)一樣,只需要返回最新的異常數據即可。當然,我們排查問(wèn)題后,也要把處理的異常標記為已處理,這樣可以防止重復排查。
可以看出,這個(gè)階段最重要的是做一個(gè)統計界面,為下一階段圖表展示的可視化做準備。
可視化階段:最終數據圖表展示
在最后階段,我們開(kāi)發(fā)了一個(gè)統計界面并找到了想要的數據結果。不幸的是,這些結果只有程序員才能理解,其他人可能無(wú)法理解。所以最后,為了更直觀(guān)的反映數據,我們需要使用前端的可視化圖表,讓這些數據活起來(lái)。
在這個(gè)階段,我們終于回到了最熟悉的前端領(lǐng)域。這個(gè)階段的任務(wù)比較簡(jiǎn)單,比較順利?;赗eact構建一個(gè)新的前端應用,訪(fǎng)問(wèn)上一步的統計界面,然后集成前端圖表庫,以圖表的形式展示統計結果。
這個(gè)新應用是一個(gè)前端監控系統,真正需要展示給外界。供團隊內部的開(kāi)發(fā)人員或產(chǎn)品學(xué)生使用,方便他們實(shí)時(shí)查看產(chǎn)品產(chǎn)生的數據信息,解決自己的問(wèn)題。
事實(shí)上,現階段沒(méi)有關(guān)鍵問(wèn)題可談。主要是選擇一個(gè)好用的圖表庫并連接接口。還有各種類(lèi)型的圖表。需要考慮哪些數據適合哪些圖表,根據實(shí)際情況做出判斷。
最后,監控系統的前端頁(yè)面和界面數據不是人人都能看到的,所以要有基本的登錄頁(yè)面和功能。做到這一點(diǎn),這個(gè)階段的任務(wù)就結束了。
報警階段:發(fā)現異常立即報警通知
前一階段,監控系統前端搭建完成,統計數據以圖表形式展示后,整個(gè)監控系統基本可用。
但是還有另一種情況,就是用戶(hù)在使用我們的產(chǎn)品時(shí)突然報錯,錯誤信息也被寫(xiě)入了數據庫。如果此時(shí)你不主動(dòng)刷新頁(yè)面,實(shí)際上你也不能一直刷新頁(yè)面,那么我們根本不知道這個(gè)錯誤。
如果這是一個(gè)非常致命的bug,影響范圍很廣,我們甚至不知道這個(gè)bug是什么時(shí)候發(fā)生的,那會(huì )給我們帶來(lái)很大的損失。
所以,為了保證我們能及時(shí)解決bug,告警通知的功能就顯得非常重要了。它的作用是在出現異常的第一時(shí)間推送給開(kāi)發(fā)者,讓大家第一時(shí)間發(fā)現問(wèn)題,然后以最快的速度解決,避免遺漏。
報警通知,現在一般的解決方案是連接釘釘或者企業(yè)微信的機器人,我們這里使用釘釘。使用哪個(gè)平臺取決于您的主題所在的平臺。比如我的團隊主體在釘釘上,所以在發(fā)送報警通知時(shí),可以直接用手機號@任意一個(gè)團隊成員,實(shí)現更精準的提醒。
本部分是對 API 應用的補充。申請釘釘開(kāi)發(fā)者權限后,訪(fǎng)問(wèn)API中的相關(guān)代碼。
部署階段:萬(wàn)事俱備,只等上線(xiàn)
前期我們完成了數據采集、API應用構建、數據存儲、前端可視化展示、監控告警。整個(gè)前端監控系統功能齊全。最后一步是將所有的前端和后端數據庫都在線(xiàn)部署,供大家訪(fǎng)問(wèn)。
部署主要是nginx解析、https配置、數據庫安裝、nodejs的應用部署等,這個(gè)階段的內容會(huì )多一點(diǎn)運維。不過(guò)不用擔心,這里我也會(huì )詳細介紹關(guān)鍵操作。
系統上線(xiàn)后,你可以嘗試在你的任意一個(gè)前端項目中通過(guò)API保存數據采集,按照第一篇中的采集方法,然后登錄監控系統查看真實(shí)使用數據。
當這部分完成后,恭喜,一個(gè)小型的前端監控系統搭建完成。未來(lái)我們可以在此基礎上繼續擴展功能,慢慢讓這個(gè)自研的監控系統變得更強大。
總結
本文介紹了前端監控系統的搭建流程,將整個(gè)流程分為幾個(gè)階段,簡(jiǎn)要介紹了每個(gè)階段要做什么,有哪些關(guān)鍵問(wèn)題,幫助大家理清搭建監控系統的思路,以及更多關(guān)于前端監控和構建JavaScript架構的信息,請關(guān)注腳本之家文章的其他相關(guān)話(huà)題!
最佳實(shí)踐:DEDE采集規則過(guò)濾與替換
刪除最常用的超鏈接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像這樣填寫(xiě)它,那么鏈接的文本也會(huì )被刪除{dede:trim替換=''}]*)>(.*){/dede:trim}
2、過(guò)濾JS調用廣告,比如GG廣告,添加這樣的東西:{dede:trim=''}{/dede:trim}
3. 過(guò)濾 div 標簽。這是非常重要的,如果不過(guò)濾,它可能會(huì )錯放已發(fā)布的文章布局,并且當前大多數采集在遇到它之后都放錯了位置。{dede:trim replace=''}
{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有時(shí)有必要像這樣過(guò)濾:{dede:修剪替換=''}
?。?*)
{/dede:trim}
4.其他過(guò)濾規則可以根據上述規則引入。
5.過(guò)濾經(jīng)常使用的片段和關(guān)鍵字使用情況。{dede:trim replace=''}{/dede:trim}
6.更換簡(jiǎn)單。
{dede:trim replace ='被替換的單詞'} 要替換的單詞 {/dede:trim}
當然,采集的內容也需要搜索引擎收錄,過(guò)濾和替換的目的是為了減少重復、偽原創(chuàng ),如何具體操作,這取決于個(gè)人的要求和喜好。
有關(guān)更多信息,請參閱 IT 技術(shù)專(zhuān)欄 查看全部
完整解決方案:JavaScript架構前端監控搭建過(guò)程步驟
目錄
前言
上一篇介紹了為什么前端會(huì )有監控系統?前端監控系統有什么意義?有朋友看完后留言,想聽(tīng)聽(tīng)一些詳細的實(shí)現。那么在本文中,我們將開(kāi)始介紹前端監控是如何實(shí)現的。
如果還是不明白為什么,監控有什么用,推薦閱讀上一篇文章文章:前端為什么不能沒(méi)有監控系統?
在實(shí)施之前,首先要在腦海中有一個(gè)整體的背景,了解構建前端監控的具體流程步驟。因為前端監控系統其實(shí)是一個(gè)完整的全棧項目,不僅僅是前端,甚至主要的實(shí)現都圍繞著(zhù)數據。
當然,還有一點(diǎn)需要說(shuō)明。本文的實(shí)現主要針對普通業(yè)務(wù)和中小廠(chǎng)自研方向。我看過(guò)大廠(chǎng)做的監控系統。它非常復雜和強大,動(dòng)輒數以?xún)|計的數據。最終走向了大數據的方向。我只介紹如何實(shí)現main函數,如何解決問(wèn)題。
前端監控的構建過(guò)程分為以下幾個(gè)階段:
下面我來(lái)梳理一下各個(gè)階段的關(guān)鍵實(shí)現思路。
采集階段:采集什么數據?
監控的第一步是采集數據。有數據是監控的前提。
采集數據的含義是記錄用戶(hù)在使用產(chǎn)品過(guò)程中的真實(shí)操作。結合我們上一篇的分析,實(shí)際操作產(chǎn)生的數據可以分為兩類(lèi):異常數據和行為數據。
我們先分析異常數據。項目中的異常一般可以分為兩類(lèi),一類(lèi)是前端異常,一類(lèi)是接口異常。
前端異常
前端異常大致可以分為:
最重要的,也是我們遇到最多的,就是各種js代碼執行異常。比如類(lèi)型錯誤、引用錯誤等。這些異常大部分是由于我們的編碼不精確造成的,所以采集這些異常有助于我們提高編碼質(zhì)量。
然后是 Promise 異常。Promise 是 ES6 最重要的屬性之一??简炍覀兊膉s異步編程能力,主要體現在接口請求上。因此,這兩部分的異常捕獲非常關(guān)鍵。
另外,靜態(tài)資源加載異常一般是指引用了一些html中的圖片地址、第三方j(luò )s地址等,由于各種原因不能正常加載,這個(gè)也要監控。
console.error 異常一般用在第三方前端框架中。它自定義了一些錯誤,會(huì )被console.error拋出。此類(lèi)異常也需要被捕獲。
至于跨域異常,我們經(jīng)常會(huì )遇到這種情況,通??梢栽谇昂蠖碎_(kāi)發(fā)聯(lián)調階段發(fā)現。但不確定是后端的配置突然在線(xiàn)更改,導致前端跨域。為了安全起見(jiàn),您還應該對其進(jìn)行監控。
前端異常采集大概只有這5種,基本覆蓋了前端90%以上的異常。
接口異常
接口異常屬于后端異常,但是接口異常會(huì )直接導致前端頁(yè)面錯誤。因此,此類(lèi)異常是我們判斷線(xiàn)上問(wèn)題根源的重要依據。接口異??梢愿鶕憫Y果分類(lèi):
有時(shí)由于網(wǎng)絡(luò )問(wèn)題或服務(wù)器問(wèn)題,前端發(fā)起請求后沒(méi)有收到響應,請求被掛起。這次是無(wú)響應/超時(shí)響應異常。對于此類(lèi)異常,我們可以設置最大請求時(shí)間,超時(shí)后主動(dòng)斷開(kāi)請求,添加接口超時(shí)記錄。
另外,其他類(lèi)型的接口異??梢愿鶕﨟TTP狀態(tài)碼或者后端返回的error_code等指定字段來(lái)判斷。
不管是使用狀態(tài)碼還是其他判斷方式,只要能區分異常類(lèi)型,這個(gè)不是嚴格要求的。
4xx異常類(lèi)型是請求異常,一般是前端傳遞的參數有問(wèn)題,或者接口驗證參數有問(wèn)題。處理此類(lèi)異常的關(guān)鍵是保存請求參數,這樣可以方便前端排查。

5xx 錯誤是服務(wù)器內部處理的異常。此類(lèi)異常的關(guān)鍵信息是報錯時(shí)間和返回的異常描述。保存這些可以方便后端查找日志。
我認為權限不足也是一種重要的錯誤類(lèi)型。因為有些管理系統的權限設計比較復雜,有時(shí)候界面突然莫名其妙無(wú)法調整,影響用戶(hù)接下來(lái)的操作,也需要記錄和跟蹤。
行為數據
行為數據比較廣泛,用戶(hù)任何有意義的操作都可以定義為行為數據。
例如,當一個(gè)按鈕被點(diǎn)擊時(shí),它在那里停留了多長(cháng)時(shí)間,新功能的點(diǎn)擊率,何時(shí)使用等等。自主研發(fā)的監控系統的優(yōu)勢之一是靈活性。您需要的任何有用信息都可以在此階段進(jìn)行設計。
這個(gè)階段非常關(guān)鍵,是監控系統設計的核心,所以我寫(xiě)的很詳細,這個(gè)階段大家要多考慮采集哪些數據。后面的階段都是基于這個(gè)設計的具體實(shí)現。
API階段:構建上報數據的API接口
在上一階段,采集數據計劃已經(jīng)準備好了。當 采集 數據到達時(shí),接下來(lái)會(huì )上報數據。
說(shuō)白了,數據上報就是通過(guò)調用API接口將數據傳輸出來(lái),然后存入數據庫。因此,這個(gè)階段的任務(wù)是構建一個(gè)用于報告數據的API接口應用程序。
作為一名光榮的前端工程師,在開(kāi)發(fā)接口時(shí)自然會(huì )選擇屬于 JS 家族的 Node.js。Node.js 目前有很多框架。我比較喜歡輕量簡(jiǎn)潔,什么都需要自己安裝,所以選擇了簡(jiǎn)潔經(jīng)典的Express框架。
構建 API 應用程序要做的事情是:
還有一些細節需要處理。這個(gè)階段對于后端基礎薄弱的同學(xué)來(lái)說(shuō)是一個(gè)很好的學(xué)習機會(huì )。
強烈建議前端的朋友掌握一些后端的基礎知識,至少從簡(jiǎn)單的原理上了解是怎么回事。這個(gè)階段主要是了解API應用是如何搭建的,每個(gè)部分為什么要做,可以解決哪些問(wèn)題,這樣你對后端的基礎知識就會(huì )建立起來(lái)。
框架搭建好后,主要是設計接口URL,然后編寫(xiě)處理邏輯,保證這一步設計的接口可以調整,可以接收數據。
數據存儲階段:與數據庫接口對接
上一步我們構建了API接口,接收到采集的數據。然后,在這一步中,我們需要連接數據庫,并將 采集 中的數據存儲到數據庫中。
數據庫方面,選擇對前端最友好的,屬于NoSQL家族的文檔數據庫MongoDB。
這個(gè)數據庫最大的特點(diǎn)就是存儲的數據格式類(lèi)似于JSON,操作就像在JS中調用函數,結合JOSN數據。我們很容易理解并開(kāi)始使用前端??梢栽趯?shí)戰過(guò)程中體驗。優(yōu)雅也。
數據存儲階段主要介紹數據庫的基本信息和操作,包括以下幾個(gè)方面:
這個(gè)階段的關(guān)鍵是數據驗證。在設計完數據庫字段后,我們希望所有寫(xiě)入的數據都必須符合我們想要的數據格式。如果驗證后不符合,我們可以補充或修改數據字段,或者干脆拒絕寫(xiě)入,這樣可以保證數據的可靠性,避免不必要的數據清洗。
數據寫(xiě)入完成后,需要添加一些簡(jiǎn)單的查詢(xún)和修改功能。因為要在寫(xiě)完數據后查看執行是否成功,可以查看一個(gè)列表來(lái)查看結果。
還需要修改功能。前端監控中一個(gè)很常見(jiàn)的需求就是計算用戶(hù)的頁(yè)面停留時(shí)間。我的計劃是在用戶(hù)進(jìn)入某個(gè)頁(yè)面時(shí)創(chuàng )建一條記錄,然后在用戶(hù)離開(kāi)時(shí)修改該記錄并添加一個(gè)結束時(shí)間字段,這需要修改功能。
最后但并非最不重要的一點(diǎn)是,許多人都在談?wù)撊绾吻謇頂祿?。?shí)際上,這取決于您在將數據存儲在您面前時(shí)如何驗證。如果確實(shí)可以存儲無(wú)效數據,可以寫(xiě)一個(gè)清空數據的接口,自己寫(xiě)清空邏輯,定時(shí)執行。
查詢(xún)統計階段:數據查詢(xún)和統計分析
經(jīng)過(guò)一系列的準備,我們已經(jīng)完成了API接口和數據寫(xiě)入的功能。假設我們有 采集 足夠的數據并存儲在數據庫中,這個(gè)階段就是充分利用這些數據的時(shí)候了。
這個(gè)階段的主要任務(wù)是對數據進(jìn)行檢索和統計分析,基本上是“查詢(xún)”操作。
這里的查詢(xún)不僅僅是為了檢查,如何檢查,關(guān)系到我們采集到的數據能否得到有效利用。我的想法是從這兩個(gè)方面入手:

當然,這只是籠統的說(shuō)法。行為數據也將在一行中查詢(xún)。例如,如果我想查看用戶(hù)在某個(gè)時(shí)間做了什么,這就是精確搜索。還有異常數據的統計,比如異常接口的觸發(fā)頻率排名。
行為數據量會(huì )非常大,在用戶(hù)使用系統的過(guò)程中會(huì )頻繁生成并寫(xiě)入數據庫。因此,在這類(lèi)數據的大部分情況下,都是通過(guò)聚合查詢(xún)的方式,從頁(yè)數、時(shí)間等多個(gè)維度進(jìn)行整體統計,最后得出一些百分比的結論。這些統計值可以大致反映產(chǎn)品的實(shí)際使用情況。
這里有個(gè)優(yōu)化點(diǎn),因為頻繁的請求會(huì )增加接口的負擔,所以一部分數據也可以在本地存儲,達到一定數量后,一次性請求并存儲接口。
異常數據對于開(kāi)發(fā)者來(lái)說(shuō)非常重要,對于我們定位和解決bug來(lái)說(shuō)是天賜之物。與行為數據的多重統計不同,我們更關(guān)心異常數據的每一條記錄的詳細信息,讓錯誤一目了然。
查詢(xún)異常數據也比較簡(jiǎn)單。和普通的列表查詢(xún)一樣,只需要返回最新的異常數據即可。當然,我們排查問(wèn)題后,也要把處理的異常標記為已處理,這樣可以防止重復排查。
可以看出,這個(gè)階段最重要的是做一個(gè)統計界面,為下一階段圖表展示的可視化做準備。
可視化階段:最終數據圖表展示
在最后階段,我們開(kāi)發(fā)了一個(gè)統計界面并找到了想要的數據結果。不幸的是,這些結果只有程序員才能理解,其他人可能無(wú)法理解。所以最后,為了更直觀(guān)的反映數據,我們需要使用前端的可視化圖表,讓這些數據活起來(lái)。
在這個(gè)階段,我們終于回到了最熟悉的前端領(lǐng)域。這個(gè)階段的任務(wù)比較簡(jiǎn)單,比較順利?;赗eact構建一個(gè)新的前端應用,訪(fǎng)問(wèn)上一步的統計界面,然后集成前端圖表庫,以圖表的形式展示統計結果。
這個(gè)新應用是一個(gè)前端監控系統,真正需要展示給外界。供團隊內部的開(kāi)發(fā)人員或產(chǎn)品學(xué)生使用,方便他們實(shí)時(shí)查看產(chǎn)品產(chǎn)生的數據信息,解決自己的問(wèn)題。
事實(shí)上,現階段沒(méi)有關(guān)鍵問(wèn)題可談。主要是選擇一個(gè)好用的圖表庫并連接接口。還有各種類(lèi)型的圖表。需要考慮哪些數據適合哪些圖表,根據實(shí)際情況做出判斷。
最后,監控系統的前端頁(yè)面和界面數據不是人人都能看到的,所以要有基本的登錄頁(yè)面和功能。做到這一點(diǎn),這個(gè)階段的任務(wù)就結束了。
報警階段:發(fā)現異常立即報警通知
前一階段,監控系統前端搭建完成,統計數據以圖表形式展示后,整個(gè)監控系統基本可用。
但是還有另一種情況,就是用戶(hù)在使用我們的產(chǎn)品時(shí)突然報錯,錯誤信息也被寫(xiě)入了數據庫。如果此時(shí)你不主動(dòng)刷新頁(yè)面,實(shí)際上你也不能一直刷新頁(yè)面,那么我們根本不知道這個(gè)錯誤。
如果這是一個(gè)非常致命的bug,影響范圍很廣,我們甚至不知道這個(gè)bug是什么時(shí)候發(fā)生的,那會(huì )給我們帶來(lái)很大的損失。
所以,為了保證我們能及時(shí)解決bug,告警通知的功能就顯得非常重要了。它的作用是在出現異常的第一時(shí)間推送給開(kāi)發(fā)者,讓大家第一時(shí)間發(fā)現問(wèn)題,然后以最快的速度解決,避免遺漏。
報警通知,現在一般的解決方案是連接釘釘或者企業(yè)微信的機器人,我們這里使用釘釘。使用哪個(gè)平臺取決于您的主題所在的平臺。比如我的團隊主體在釘釘上,所以在發(fā)送報警通知時(shí),可以直接用手機號@任意一個(gè)團隊成員,實(shí)現更精準的提醒。
本部分是對 API 應用的補充。申請釘釘開(kāi)發(fā)者權限后,訪(fǎng)問(wèn)API中的相關(guān)代碼。
部署階段:萬(wàn)事俱備,只等上線(xiàn)
前期我們完成了數據采集、API應用構建、數據存儲、前端可視化展示、監控告警。整個(gè)前端監控系統功能齊全。最后一步是將所有的前端和后端數據庫都在線(xiàn)部署,供大家訪(fǎng)問(wèn)。
部署主要是nginx解析、https配置、數據庫安裝、nodejs的應用部署等,這個(gè)階段的內容會(huì )多一點(diǎn)運維。不過(guò)不用擔心,這里我也會(huì )詳細介紹關(guān)鍵操作。
系統上線(xiàn)后,你可以嘗試在你的任意一個(gè)前端項目中通過(guò)API保存數據采集,按照第一篇中的采集方法,然后登錄監控系統查看真實(shí)使用數據。
當這部分完成后,恭喜,一個(gè)小型的前端監控系統搭建完成。未來(lái)我們可以在此基礎上繼續擴展功能,慢慢讓這個(gè)自研的監控系統變得更強大。
總結
本文介紹了前端監控系統的搭建流程,將整個(gè)流程分為幾個(gè)階段,簡(jiǎn)要介紹了每個(gè)階段要做什么,有哪些關(guān)鍵問(wèn)題,幫助大家理清搭建監控系統的思路,以及更多關(guān)于前端監控和構建JavaScript架構的信息,請關(guān)注腳本之家文章的其他相關(guān)話(huà)題!
最佳實(shí)踐:DEDE采集規則過(guò)濾與替換
刪除最常用的超鏈接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像這樣填寫(xiě)它,那么鏈接的文本也會(huì )被刪除{dede:trim替換=''}]*)>(.*){/dede:trim}
2、過(guò)濾JS調用廣告,比如GG廣告,添加這樣的東西:{dede:trim=''}{/dede:trim}
3. 過(guò)濾 div 標簽。這是非常重要的,如果不過(guò)濾,它可能會(huì )錯放已發(fā)布的文章布局,并且當前大多數采集在遇到它之后都放錯了位置。{dede:trim replace=''}

{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有時(shí)有必要像這樣過(guò)濾:{dede:修剪替換=''}
?。?*)
{/dede:trim}

4.其他過(guò)濾規則可以根據上述規則引入。
5.過(guò)濾經(jīng)常使用的片段和關(guān)鍵字使用情況。{dede:trim replace=''}{/dede:trim}
6.更換簡(jiǎn)單。
{dede:trim replace ='被替換的單詞'} 要替換的單詞 {/dede:trim}
當然,采集的內容也需要搜索引擎收錄,過(guò)濾和替換的目的是為了減少重復、偽原創(chuàng ),如何具體操作,這取決于個(gè)人的要求和喜好。
有關(guān)更多信息,請參閱 IT 技術(shù)專(zhuān)欄
最新版本:原來(lái)這才是Api文檔的完全體
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-10-14 19:10
一、簡(jiǎn)介
在目前主流的前后端分離模式開(kāi)發(fā)下,需要有一個(gè)好用的接口文檔。
**PS:以下幾點(diǎn)是實(shí)際開(kāi)發(fā)場(chǎng)景中遇到并實(shí)現的痛點(diǎn)**。
在項目的開(kāi)發(fā)過(guò)程中,接口文檔的存在可以讓前端和后端工程師保持統一的數據信息概念。例如:“項目需求的接口字段和參數字段。只要將請求返回的參數記錄在文檔中,前端和后端工程師就可以針對接口文檔統一編寫(xiě)自己的邏輯在寫(xiě)代碼的時(shí)候,統一命名后,各個(gè)代碼中就不會(huì )出現需要的函數的前端請求接口命名與后端返回接口的命名信息不一致的情況,這樣可以大大避免故障排查失敗,快速定位問(wèn)題。
一個(gè)好的界面文檔肯定會(huì )更直觀(guān)、更容易維護、更容易保存。這些基本屬性。但是到了21世紀的今天,還是有界面文檔還是用word文檔或者excel等筆記本記錄工具來(lái)記錄的。這樣,文檔是可用的,但是在項目的不斷迭代中,文檔需要不斷的維護和更新,投入了不必要的成本。在項目交接的場(chǎng)景中,也交付了大量的接口文檔。但是,在基于人工維護編寫(xiě)文檔時(shí),自然會(huì )出現刪除參數、復制錯誤等錯誤操作的錯誤,從而無(wú)法很好地保證文檔的正確性。
2.apifox在線(xiàn)接口文檔
如今,許多界面文檔工具層出不窮,如swagger、yapi、Knife4j等。但它們或多或少都有一些缺點(diǎn)。比如我們后端同學(xué)最常用的swagger-ui,有以下痛點(diǎn):
提交的參數為 JSON,無(wú)法格式化。如果參數錯誤,查找起來(lái)很麻煩。返回的結果不能折疊。閱讀時(shí)間太長(cháng)了。
swagger-ui 在界面數量增加的情況下非常難用,而且沒(méi)有分類(lèi)菜單。
在最近的技術(shù)社區中,發(fā)現了一個(gè)api接口工具Apifox。相當于一個(gè)集Postman + Swagger + Mock + JMeter于一體的工具。Apifox 的界面文檔是我遇到過(guò)的最親密的程序員之一。不僅解決了我遇到的開(kāi)發(fā)痛點(diǎn),接口文檔也很強大。
2.1 如何生成在線(xiàn)接口文檔 2.1.1 第一步
首先去Apifox官網(wǎng)根據你對應的系統下載對應的Apifox客戶(hù)端。當然,直接使用網(wǎng)頁(yè)版并不妨礙我們后續的步驟。
下載完成后,我們打開(kāi)客戶(hù)端或者網(wǎng)頁(yè)登錄。如果你是第一次使用,可以先注冊一個(gè)賬號再登錄。第一次使用的同學(xué)會(huì )發(fā)現如下頁(yè)面進(jìn)入。
因為演示,我會(huì )直接使用當前的示例團隊和里面的示例項目。點(diǎn)擊示例項目進(jìn)入Apifox,會(huì )看到演示中使用的寵物店的界面分組。
2.1.2 第二步
為了讓學(xué)生更恰當地使用 Apifox 替代到自己的項目中。我決定更多地模擬我們的真實(shí)使用環(huán)境,我在我的服務(wù)器上部署了一個(gè)名為 jeetcg-Boot 的開(kāi)源項目。本項目有自己的自定義接口文檔,但是可以導出一些OpenApi和Markdown格式的文檔,然后我可以使用導出的接口文檔來(lái)演示如何慢慢連接到網(wǎng)上提供的Apifox文檔。
現在的同學(xué)有沒(méi)有類(lèi)似swagger格式的文檔也沒(méi)關(guān)系,因為Apifox支持21種格式的導入方式,把你的數據轉換成Apifox。但也有例外。比如我上面提到的當前項目沒(méi)有文檔,其實(shí)你也可以通過(guò)Apifox的新界面添加當前項目的請求參數等信息,讓你的項目從現在開(kāi)始。有自己的接口文檔。所以這里我們主要關(guān)注生成在線(xiàn)文檔的操作如何創(chuàng )建一個(gè)新的在線(xiàn)文檔。,所以這里不再詳細介紹新的界面。此處操作不是很好的同學(xué)可以點(diǎn)擊這部分文檔幫助進(jìn)行參考。
然后我將我的jeetcg-boot項目的接口文件導出為一個(gè)OpenApi.json文件,通過(guò)Apifox的導入功能將我當前項目的接口轉入Apifox
6
通過(guò)這么簡(jiǎn)單的步驟,我的項目界面就成功移植到了Apifox進(jìn)行管理。
在這里我要表?yè)P一下 Apifox 真的很漂亮的設計和舒適的排版,對于像我這樣的顏值控。
2.1.3 第三步
這一步是我們目的的最后一步。確保我們的接口已經(jīng)存在于項目中后,我們可以通過(guò)左側的在線(xiàn)分享點(diǎn)擊我們的新分享。
7
此時(shí)我們可以看到創(chuàng )建在線(xiàn)文檔的信息表,需要填寫(xiě)接手當前項目的團隊或其他小公司對于合作伙伴使用的這種場(chǎng)景,建議填寫(xiě)對應的匹配名稱(chēng)。密碼訪(fǎng)問(wèn)可以為我們生成的在線(xiàn)文檔提供一層加密保護,讓不小心泄露的界面地址不會(huì )被其他人訪(fǎng)問(wèn)看到我們的界面設計等信息,所以這里要填寫(xiě)的小伙伴可以按照真實(shí)情況填寫(xiě)。過(guò)期時(shí)間可以決定我們當前生成的在線(xiàn)接口文檔的過(guò)期時(shí)間。共享范圍允許我們挑選和選擇我們需要生成到在線(xiàn)接口文檔的接口。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。
8
填寫(xiě)完所有信息后,我們可以點(diǎn)擊保存,為我們的項目生成一個(gè)在線(xiàn)界面文檔url。此時(shí),我們復制當前生成的在線(xiàn)接口文檔鏈接,打開(kāi)即可找到我們的項目接口文檔。
9
102.2 Apifox 的在線(xiàn)界面文檔中的“魔力”是什么 2.2.1 文檔中直接運行界面
細心的同學(xué)一定發(fā)現,選擇一個(gè)界面后,在我們文檔的右側有一個(gè)運行按鈕。單擊該按鈕將顯示執行操作界面。點(diǎn)擊發(fā)送后,我們可以看到返回的結果和我們的界面一模一樣。返回響應的格式相同。調用正是我們在生成這個(gè)接口時(shí)選擇使用的云mock環(huán)境,所以現在顯示的數據是mock為我們生成的假數據。
但是,這對于獲取文檔的開(kāi)發(fā)來(lái)說(shuō)并不是太簡(jiǎn)單??梢灾苯釉谖臋n上測試當前接口是否滿(mǎn)足要求,測試當前環(huán)境的接口狀態(tài)是否正常。
在mock環(huán)境中調用的接口也方便前端程序員先開(kāi)發(fā)后端,不會(huì )被后端同學(xué)卡住。
11
122.2.2 13種語(yǔ)言生成請求示例代碼
在文檔的中間,我們可以看到一些編程語(yǔ)言的非常明顯的圖標。它們是干什么用的??
13
作為一個(gè)前端程序員,我自然會(huì )用javascript來(lái)介紹給我的同學(xué)。點(diǎn)擊 javascript 圖標,我們發(fā)現下面有一行選項卡提供選擇。相信文章之前也是前端程序員的同學(xué)們并不陌生。這些是js常用的請求方法,在每個(gè)方法的選項卡下選擇編輯器。會(huì )有代碼使用這個(gè)方法來(lái)調用當前接口。**當我第一次看到這個(gè)功能時(shí),我驚呆了。有這么親密的互動(dòng)嗎?? **
由于程序員的職業(yè)病,我們當然要測試生成的代碼,他能跑嗎?正確的。這里推薦你使用一些在線(xiàn) IDE 來(lái)運行一些代碼的方法。例如,流行的 stackblitz
我們把axios的代碼復制到ide編輯器中,在線(xiàn)安裝axios的庫就可以在線(xiàn)運行了。
結果很明顯,右邊的打印和我們剛才跑的返回一模一樣。這真的是牛肉。所以意味著(zhù)這13種語(yǔ)言都可以生成自己的請求代碼,在實(shí)際代碼中驗證當前接口請求的性能。
如果你想在這里測試更多的編程語(yǔ)言,那我就分享一個(gè)在線(xiàn)的ide小閃電,可以運行30多種語(yǔ)言。
2.2.3 生成模型代碼
這個(gè)函數也是我很喜歡的一個(gè)函數,生成模型代碼。主要是為返回的響應參數生成的模型代碼。
比如我選擇使用Typescript代碼,那么它會(huì )自動(dòng)生成一個(gè)帶返回參數的typescript類(lèi)型接口,這對于使用ts開(kāi)發(fā)的前端同學(xué)來(lái)說(shuō)是一個(gè)福音。不再需要一一復制請求返回的類(lèi)型?,F在可以直接復制粘貼到界面文檔中,放入代碼中。
當前代碼生成模型的操作欄針對每種編程語(yǔ)言都有相應的配置開(kāi)關(guān)。例如,對于 typescript,您可以打開(kāi)僅生成類(lèi)型定義,這將刪除下面的轉換代碼。僅保留類(lèi)型定義。并且還可以對運行時(shí)的json.parse的結果進(jìn)行校驗,確保我們返回的結果參數符合條件。
所以需要生成什么類(lèi)型??的模型代碼就看同學(xué)們配置的需要了。
3. Apifox 在線(xiàn)分享接口文檔的詳細信息。這里我要說(shuō)的是,我認為目前的這個(gè)接口文檔確實(shí)是為了程序員的效率和易用性。
3.1.1 接口連接可直接點(diǎn)擊復制:
3.1.2 文檔整體布局
文檔的整體布局是左右結構的,所以當我們的程序員在閱讀文檔的時(shí)候需要做一個(gè)試運行的時(shí)候,我們可以通過(guò)左右檢查參數來(lái)檢查是否有不符合要求的參數,這與頂部的swagger參數和底部的請求不同。需要上下移動(dòng),方便性大打折扣。
3.1.3 運行時(shí)批量編輯參數
在操作界面中,我們有時(shí)會(huì )有大量的請求參數,可能需要臨時(shí)更改才能上廁所。表單中是否逐個(gè)更改是一件很痛苦的事情,而Apifox為開(kāi)發(fā)者提供了批量編輯交互。更容易實(shí)現他們的目標
四、結尾
使用過(guò) Apifox 后,相信你會(huì )或多或少對這款軟件的細節和強大的功能印象深刻。因為一個(gè)軟件工具的使命必須是為用戶(hù)提供方便,處處簡(jiǎn)化用戶(hù)的操作,讓工作更有效率,這就是一個(gè)好工具的表現。
Apifox 確實(shí)有一點(diǎn)要說(shuō),它是一個(gè)有利于程序員的良心工具。
終極:吐血整理!頂級程序員的百寶箱來(lái)咯!| 原力計劃
每個(gè)人都知道我是一個(gè)電子商務(wù)企業(yè)。在線(xiàn)界面多的在線(xiàn)問(wèn)題如何排查?捕獲數據包并查看數據。
JMeter
Apache JMeter 是 Apache 組織開(kāi)發(fā)的基于 Java 的壓力測試工具
是的,它用于壓力測試。如何模擬大量請求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平臺使用的軟件編程文檔管理工具,可以瀏覽 API 文檔,管理代碼片段。Dash 自帶豐富的 API 文檔,涵蓋各種主流編程語(yǔ)言和框架。
開(kāi)發(fā)文檔
上面的兄弟,不過(guò)這個(gè)不用下載,是在線(xiàn)的
數據夾
DataGrip 是 JetBrains 推出的數據庫管理產(chǎn)品。對于 JetBrains,開(kāi)發(fā)者必須熟悉它。IDEA和ReSharper都是這家公司的產(chǎn)品,用戶(hù)體驗非常好。
一開(kāi)始,我只是用它來(lái)看看我的同事正在使用一個(gè)很酷的界面。后來(lái)發(fā)現功能也很好吃,突出文字等等。你可以挖掘很多功能。
視覺(jué)虛擬機
VisualVM 是 Netbeans 的一個(gè)配置文件子項目。JDK6.0 update 7已經(jīng)收錄,可以監控線(xiàn)程,內存情況,查看內存中方法和對象的CPU時(shí)間,已經(jīng)被GC的對象,反向查看分配的棧(比如分配了哪些對象)到 100 個(gè)字符串對象)。
VisualVM 可以根據需要安裝不同的插件。每個(gè)插件都有不同的關(guān)注點(diǎn)。有的主要監控GC,有的主要監控內存,還有的監控線(xiàn)程。
Iterm2
這是我用于日志故障排除的客戶(hù)端工具。它還支持許多配置??梢灾苯觭sh到跳板查看在線(xiàn)機器的狀態(tài)等,還是需要在線(xiàn)排查的。
網(wǎng)*有道詞典
有朋友想問(wèn)帥青是什么情況,是不是有鬼畜混進(jìn)來(lái)?
不,我們在開(kāi)發(fā)它們時(shí)不知道很多單詞,或者在命名它們時(shí)不知道單詞的英文。仍然有必要檢查它們。標準化的命名是你成為頂級大牛的第一步。你的名字全是A.B,C 當你的代碼審核時(shí),你的Leader會(huì )打電話(huà)給hr讓你回家過(guò)年,然后再提交。新年來(lái)臨之際,不要輕易嘗試。
崇高的文本
這是一個(gè)文本記錄的工具,也可以用來(lái)寫(xiě)代碼,但是如果我們有IDE的話(huà),它可以作為日?,嵤掠涗浀墓ぞ?,臨時(shí)文檔處理的工具也是可以的,而且反正還是很有用的。
最近剛好有人才群里的人才打電話(huà)給我安利,給我做筆記和寫(xiě)博客的工具,說(shuō)我的排版很好看。(我在飄)
安排!
印象筆記
這可以說(shuō)是陪伴我大學(xué)到現在的一個(gè)工具。數了幾千個(gè)文件,記錄了生活中的小事,學(xué)了編程之后的很多東西。我在收錄里面。
我不會(huì )和其他筆記比較,因為我一開(kāi)始使用的那個(gè)從來(lái)沒(méi)有被替換過(guò)。
泰波拉
Typora 是我一直在為其編寫(xiě) Markdown 的工具。它易于使用,但也可以切換模式。你相信嗎?打字機模式、對焦模式、音源模式總有一款適合你。
ipic
我使用 Typora 的圖片床。Markdown復制圖片是不是從本地地址進(jìn)來(lái)的,發(fā)到外網(wǎng)就失效了。但是,這個(gè)基于 Typora 的工具,你復制進(jìn)去的時(shí)候可以直接上傳到互聯(lián)網(wǎng)上?,F在,你可以在任何你想要的平臺上發(fā)布。
Md2All
每個(gè)人都很好奇我的降價(jià)如何看起來(lái)如此美麗。其實(shí)我寫(xiě)完markdown后,轉成html,就用了上面的工具。
寫(xiě)完就在這里打出來(lái)然后發(fā)出去。打字花了很長(cháng)時(shí)間,忍不住夸了帥C。
圖像處理 Adob??e Photoshop CC 2019
ps,眾所周知,正常的圖片處理啊用這個(gè)香味,沒(méi)事幫美P拍照,說(shuō)不定還能找個(gè)女朋友(又開(kāi)始YY了)
Adobe Premiere Pro CC 2019
這可能是最常用的視頻處理軟件了,非常好用?。?!
功能太豐富了,喘不過(guò)氣來(lái)。缺點(diǎn)是學(xué)習成本有點(diǎn)高,入門(mén)很快。成為大神需要很多時(shí)間。
Adobe After Effects CC 2019
不知道你看了多少視頻。視頻的很多特效都是由此制作的。下面還有一個(gè)我的演示。
GIPHY 捕獲
有時(shí)候人們文章不想用靜態(tài)圖片來(lái)表達,而是想錄制Gif動(dòng)畫(huà)來(lái)寫(xiě)代碼,那么這個(gè)軟件真的好用。
視頻播放 KMPlayer
其實(shí)帥C,我心里有一個(gè)玩家神器,快點(diǎn)播吧。
可惜沒(méi)過(guò)多久,直播就過(guò)早地死掉了。我將使用以下播放軟件播放自己的視頻。
因為很多電腦自帶的格式可能不支持,而且我喜歡剪輯視頻,一直在用。
斗圖
你有沒(méi)有注意到我之前的很多 文章 表情實(shí)際上是在網(wǎng)上制作的?
碳
帥兵之前的文章里很多代碼的圖片都是這個(gè)網(wǎng)站生成的。有很多款式可供選擇,非常漂亮。
代碼LF
這個(gè) 網(wǎng)站 很有趣。如果你在寫(xiě)代碼的時(shí)候不知道如何命名這些單詞,可以去這里查看一下。他是GitHub的爬蟲(chóng)工具??吹酱笊裰?,總會(huì )有想法。
注:我簡(jiǎn)單介紹一下上面的軟件是做什么的,因為實(shí)在太多了,真正的功能還需要深挖。
總結
其實(shí)更香的工具太多了,這里就不一一介紹了,其實(shí)有一個(gè)很簡(jiǎn)單的方法,就是問(wèn),學(xué),學(xué)。
我就是這樣??吹絃eader用什么工具,我問(wèn)他是什么,好用嗎?如何使用?
包括我寫(xiě)博客,其實(shí)才寫(xiě)了20多天。第一天準備寫(xiě)的時(shí)候,直接問(wèn)三外(Java3y),你用什么開(kāi)發(fā)工具,怎么用,包括他主要發(fā)布哪些平臺,發(fā)布時(shí)間段,我會(huì )直接問(wèn)。
他坐在我對面,因為我的猥褻而被迫說(shuō)出真相,主要是因為最近有需要我為他寫(xiě)代碼哈哈。
別人有這么多經(jīng)驗,會(huì )不會(huì )是軟件不好?而且在使用過(guò)程中如果不知道,可以問(wèn)問(wèn)對方,是不是很香。
潺潺
我們先來(lái)看看人才交流群里一位人才提出的問(wèn)題:
不知道大家還記得我之前寫(xiě)的冪等情況嗎?
這就是下圖中的情況。當我下單增加或減少 GMV 時(shí),我會(huì )先去看看有沒(méi)有流水。有的話(huà)就證明已經(jīng)加了,我直接回。如果沒(méi)有,請繼續以下過(guò)程。
其實(shí)他提的問(wèn)題很好,因為我們日常的開(kāi)發(fā)是主從同步,讀寫(xiě)分離,也就是說(shuō)我們可能會(huì )加GMV,但是我們操作主庫,他需要同步數據到奴隸圖書(shū)館,但是這個(gè)他在這個(gè)過(guò)程中被耽擱了。
這時(shí)候如果另一個(gè)系統重試訂單號消息,你又進(jìn)來(lái)了嗎?你查看流水,發(fā)現沒(méi)有流水,卻以為自己沒(méi)有加錢(qián),進(jìn)行了加錢(qián)的操作,結果耽誤了。, 是不是加了兩次。
正常開(kāi)發(fā)中確實(shí)有,但是主從延遲應該是DBA(Database Administrator)考慮的,但是我說(shuō)不能寫(xiě)有邏輯漏洞的代碼,其實(shí)很簡(jiǎn)單,把他放到Redis中,設置一個(gè)時(shí)間約30分鐘,可避免在此期間重復食用。如果延遲超過(guò)30分鐘,問(wèn)題已經(jīng)很大了,DBA會(huì )知道的。
本文由吐血整理,大家吃好,記得給個(gè)贊哦!
原來(lái)的:
【結尾】
來(lái)吧,原力計劃的升級版來(lái)了!2019年末,我們?yōu)槟鷾蕚淞艘粓?chǎng)交通盛宴!即日起,只要參與原力計劃,文章達到要求,即可獲得流量+現金的支持!
參與方式:發(fā)布原創(chuàng )文章時(shí),在提交頁(yè)面勾選原力計劃即可參與。掃碼戳詳情↓ 查看全部
最新版本:原來(lái)這才是Api文檔的完全體
一、簡(jiǎn)介
在目前主流的前后端分離模式開(kāi)發(fā)下,需要有一個(gè)好用的接口文檔。
**PS:以下幾點(diǎn)是實(shí)際開(kāi)發(fā)場(chǎng)景中遇到并實(shí)現的痛點(diǎn)**。
在項目的開(kāi)發(fā)過(guò)程中,接口文檔的存在可以讓前端和后端工程師保持統一的數據信息概念。例如:“項目需求的接口字段和參數字段。只要將請求返回的參數記錄在文檔中,前端和后端工程師就可以針對接口文檔統一編寫(xiě)自己的邏輯在寫(xiě)代碼的時(shí)候,統一命名后,各個(gè)代碼中就不會(huì )出現需要的函數的前端請求接口命名與后端返回接口的命名信息不一致的情況,這樣可以大大避免故障排查失敗,快速定位問(wèn)題。
一個(gè)好的界面文檔肯定會(huì )更直觀(guān)、更容易維護、更容易保存。這些基本屬性。但是到了21世紀的今天,還是有界面文檔還是用word文檔或者excel等筆記本記錄工具來(lái)記錄的。這樣,文檔是可用的,但是在項目的不斷迭代中,文檔需要不斷的維護和更新,投入了不必要的成本。在項目交接的場(chǎng)景中,也交付了大量的接口文檔。但是,在基于人工維護編寫(xiě)文檔時(shí),自然會(huì )出現刪除參數、復制錯誤等錯誤操作的錯誤,從而無(wú)法很好地保證文檔的正確性。
2.apifox在線(xiàn)接口文檔
如今,許多界面文檔工具層出不窮,如swagger、yapi、Knife4j等。但它們或多或少都有一些缺點(diǎn)。比如我們后端同學(xué)最常用的swagger-ui,有以下痛點(diǎn):
提交的參數為 JSON,無(wú)法格式化。如果參數錯誤,查找起來(lái)很麻煩。返回的結果不能折疊。閱讀時(shí)間太長(cháng)了。
swagger-ui 在界面數量增加的情況下非常難用,而且沒(méi)有分類(lèi)菜單。
在最近的技術(shù)社區中,發(fā)現了一個(gè)api接口工具Apifox。相當于一個(gè)集Postman + Swagger + Mock + JMeter于一體的工具。Apifox 的界面文檔是我遇到過(guò)的最親密的程序員之一。不僅解決了我遇到的開(kāi)發(fā)痛點(diǎn),接口文檔也很強大。
2.1 如何生成在線(xiàn)接口文檔 2.1.1 第一步
首先去Apifox官網(wǎng)根據你對應的系統下載對應的Apifox客戶(hù)端。當然,直接使用網(wǎng)頁(yè)版并不妨礙我們后續的步驟。
下載完成后,我們打開(kāi)客戶(hù)端或者網(wǎng)頁(yè)登錄。如果你是第一次使用,可以先注冊一個(gè)賬號再登錄。第一次使用的同學(xué)會(huì )發(fā)現如下頁(yè)面進(jìn)入。
因為演示,我會(huì )直接使用當前的示例團隊和里面的示例項目。點(diǎn)擊示例項目進(jìn)入Apifox,會(huì )看到演示中使用的寵物店的界面分組。
2.1.2 第二步
為了讓學(xué)生更恰當地使用 Apifox 替代到自己的項目中。我決定更多地模擬我們的真實(shí)使用環(huán)境,我在我的服務(wù)器上部署了一個(gè)名為 jeetcg-Boot 的開(kāi)源項目。本項目有自己的自定義接口文檔,但是可以導出一些OpenApi和Markdown格式的文檔,然后我可以使用導出的接口文檔來(lái)演示如何慢慢連接到網(wǎng)上提供的Apifox文檔。
現在的同學(xué)有沒(méi)有類(lèi)似swagger格式的文檔也沒(méi)關(guān)系,因為Apifox支持21種格式的導入方式,把你的數據轉換成Apifox。但也有例外。比如我上面提到的當前項目沒(méi)有文檔,其實(shí)你也可以通過(guò)Apifox的新界面添加當前項目的請求參數等信息,讓你的項目從現在開(kāi)始。有自己的接口文檔。所以這里我們主要關(guān)注生成在線(xiàn)文檔的操作如何創(chuàng )建一個(gè)新的在線(xiàn)文檔。,所以這里不再詳細介紹新的界面。此處操作不是很好的同學(xué)可以點(diǎn)擊這部分文檔幫助進(jìn)行參考。
然后我將我的jeetcg-boot項目的接口文件導出為一個(gè)OpenApi.json文件,通過(guò)Apifox的導入功能將我當前項目的接口轉入Apifox

6
通過(guò)這么簡(jiǎn)單的步驟,我的項目界面就成功移植到了Apifox進(jìn)行管理。
在這里我要表?yè)P一下 Apifox 真的很漂亮的設計和舒適的排版,對于像我這樣的顏值控。
2.1.3 第三步
這一步是我們目的的最后一步。確保我們的接口已經(jīng)存在于項目中后,我們可以通過(guò)左側的在線(xiàn)分享點(diǎn)擊我們的新分享。
7
此時(shí)我們可以看到創(chuàng )建在線(xiàn)文檔的信息表,需要填寫(xiě)接手當前項目的團隊或其他小公司對于合作伙伴使用的這種場(chǎng)景,建議填寫(xiě)對應的匹配名稱(chēng)。密碼訪(fǎng)問(wèn)可以為我們生成的在線(xiàn)文檔提供一層加密保護,讓不小心泄露的界面地址不會(huì )被其他人訪(fǎng)問(wèn)看到我們的界面設計等信息,所以這里要填寫(xiě)的小伙伴可以按照真實(shí)情況填寫(xiě)。過(guò)期時(shí)間可以決定我們當前生成的在線(xiàn)接口文檔的過(guò)期時(shí)間。共享范圍允許我們挑選和選擇我們需要生成到在線(xiàn)接口文檔的接口。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。
8
填寫(xiě)完所有信息后,我們可以點(diǎn)擊保存,為我們的項目生成一個(gè)在線(xiàn)界面文檔url。此時(shí),我們復制當前生成的在線(xiàn)接口文檔鏈接,打開(kāi)即可找到我們的項目接口文檔。
9
102.2 Apifox 的在線(xiàn)界面文檔中的“魔力”是什么 2.2.1 文檔中直接運行界面
細心的同學(xué)一定發(fā)現,選擇一個(gè)界面后,在我們文檔的右側有一個(gè)運行按鈕。單擊該按鈕將顯示執行操作界面。點(diǎn)擊發(fā)送后,我們可以看到返回的結果和我們的界面一模一樣。返回響應的格式相同。調用正是我們在生成這個(gè)接口時(shí)選擇使用的云mock環(huán)境,所以現在顯示的數據是mock為我們生成的假數據。
但是,這對于獲取文檔的開(kāi)發(fā)來(lái)說(shuō)并不是太簡(jiǎn)單??梢灾苯釉谖臋n上測試當前接口是否滿(mǎn)足要求,測試當前環(huán)境的接口狀態(tài)是否正常。
在mock環(huán)境中調用的接口也方便前端程序員先開(kāi)發(fā)后端,不會(huì )被后端同學(xué)卡住。
11
122.2.2 13種語(yǔ)言生成請求示例代碼
在文檔的中間,我們可以看到一些編程語(yǔ)言的非常明顯的圖標。它們是干什么用的??
13
作為一個(gè)前端程序員,我自然會(huì )用javascript來(lái)介紹給我的同學(xué)。點(diǎn)擊 javascript 圖標,我們發(fā)現下面有一行選項卡提供選擇。相信文章之前也是前端程序員的同學(xué)們并不陌生。這些是js常用的請求方法,在每個(gè)方法的選項卡下選擇編輯器。會(huì )有代碼使用這個(gè)方法來(lái)調用當前接口。**當我第一次看到這個(gè)功能時(shí),我驚呆了。有這么親密的互動(dòng)嗎?? **

由于程序員的職業(yè)病,我們當然要測試生成的代碼,他能跑嗎?正確的。這里推薦你使用一些在線(xiàn) IDE 來(lái)運行一些代碼的方法。例如,流行的 stackblitz
我們把axios的代碼復制到ide編輯器中,在線(xiàn)安裝axios的庫就可以在線(xiàn)運行了。
結果很明顯,右邊的打印和我們剛才跑的返回一模一樣。這真的是牛肉。所以意味著(zhù)這13種語(yǔ)言都可以生成自己的請求代碼,在實(shí)際代碼中驗證當前接口請求的性能。
如果你想在這里測試更多的編程語(yǔ)言,那我就分享一個(gè)在線(xiàn)的ide小閃電,可以運行30多種語(yǔ)言。
2.2.3 生成模型代碼
這個(gè)函數也是我很喜歡的一個(gè)函數,生成模型代碼。主要是為返回的響應參數生成的模型代碼。
比如我選擇使用Typescript代碼,那么它會(huì )自動(dòng)生成一個(gè)帶返回參數的typescript類(lèi)型接口,這對于使用ts開(kāi)發(fā)的前端同學(xué)來(lái)說(shuō)是一個(gè)福音。不再需要一一復制請求返回的類(lèi)型?,F在可以直接復制粘貼到界面文檔中,放入代碼中。
當前代碼生成模型的操作欄針對每種編程語(yǔ)言都有相應的配置開(kāi)關(guān)。例如,對于 typescript,您可以打開(kāi)僅生成類(lèi)型定義,這將刪除下面的轉換代碼。僅保留類(lèi)型定義。并且還可以對運行時(shí)的json.parse的結果進(jìn)行校驗,確保我們返回的結果參數符合條件。
所以需要生成什么類(lèi)型??的模型代碼就看同學(xué)們配置的需要了。
3. Apifox 在線(xiàn)分享接口文檔的詳細信息。這里我要說(shuō)的是,我認為目前的這個(gè)接口文檔確實(shí)是為了程序員的效率和易用性。
3.1.1 接口連接可直接點(diǎn)擊復制:
3.1.2 文檔整體布局
文檔的整體布局是左右結構的,所以當我們的程序員在閱讀文檔的時(shí)候需要做一個(gè)試運行的時(shí)候,我們可以通過(guò)左右檢查參數來(lái)檢查是否有不符合要求的參數,這與頂部的swagger參數和底部的請求不同。需要上下移動(dòng),方便性大打折扣。
3.1.3 運行時(shí)批量編輯參數
在操作界面中,我們有時(shí)會(huì )有大量的請求參數,可能需要臨時(shí)更改才能上廁所。表單中是否逐個(gè)更改是一件很痛苦的事情,而Apifox為開(kāi)發(fā)者提供了批量編輯交互。更容易實(shí)現他們的目標
四、結尾
使用過(guò) Apifox 后,相信你會(huì )或多或少對這款軟件的細節和強大的功能印象深刻。因為一個(gè)軟件工具的使命必須是為用戶(hù)提供方便,處處簡(jiǎn)化用戶(hù)的操作,讓工作更有效率,這就是一個(gè)好工具的表現。
Apifox 確實(shí)有一點(diǎn)要說(shuō),它是一個(gè)有利于程序員的良心工具。
終極:吐血整理!頂級程序員的百寶箱來(lái)咯!| 原力計劃
每個(gè)人都知道我是一個(gè)電子商務(wù)企業(yè)。在線(xiàn)界面多的在線(xiàn)問(wèn)題如何排查?捕獲數據包并查看數據。
JMeter
Apache JMeter 是 Apache 組織開(kāi)發(fā)的基于 Java 的壓力測試工具
是的,它用于壓力測試。如何模擬大量請求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平臺使用的軟件編程文檔管理工具,可以瀏覽 API 文檔,管理代碼片段。Dash 自帶豐富的 API 文檔,涵蓋各種主流編程語(yǔ)言和框架。
開(kāi)發(fā)文檔
上面的兄弟,不過(guò)這個(gè)不用下載,是在線(xiàn)的
數據夾
DataGrip 是 JetBrains 推出的數據庫管理產(chǎn)品。對于 JetBrains,開(kāi)發(fā)者必須熟悉它。IDEA和ReSharper都是這家公司的產(chǎn)品,用戶(hù)體驗非常好。
一開(kāi)始,我只是用它來(lái)看看我的同事正在使用一個(gè)很酷的界面。后來(lái)發(fā)現功能也很好吃,突出文字等等。你可以挖掘很多功能。
視覺(jué)虛擬機
VisualVM 是 Netbeans 的一個(gè)配置文件子項目。JDK6.0 update 7已經(jīng)收錄,可以監控線(xiàn)程,內存情況,查看內存中方法和對象的CPU時(shí)間,已經(jīng)被GC的對象,反向查看分配的棧(比如分配了哪些對象)到 100 個(gè)字符串對象)。
VisualVM 可以根據需要安裝不同的插件。每個(gè)插件都有不同的關(guān)注點(diǎn)。有的主要監控GC,有的主要監控內存,還有的監控線(xiàn)程。
Iterm2
這是我用于日志故障排除的客戶(hù)端工具。它還支持許多配置??梢灾苯觭sh到跳板查看在線(xiàn)機器的狀態(tài)等,還是需要在線(xiàn)排查的。
網(wǎng)*有道詞典
有朋友想問(wèn)帥青是什么情況,是不是有鬼畜混進(jìn)來(lái)?
不,我們在開(kāi)發(fā)它們時(shí)不知道很多單詞,或者在命名它們時(shí)不知道單詞的英文。仍然有必要檢查它們。標準化的命名是你成為頂級大牛的第一步。你的名字全是A.B,C 當你的代碼審核時(shí),你的Leader會(huì )打電話(huà)給hr讓你回家過(guò)年,然后再提交。新年來(lái)臨之際,不要輕易嘗試。
崇高的文本
這是一個(gè)文本記錄的工具,也可以用來(lái)寫(xiě)代碼,但是如果我們有IDE的話(huà),它可以作為日?,嵤掠涗浀墓ぞ?,臨時(shí)文檔處理的工具也是可以的,而且反正還是很有用的。
最近剛好有人才群里的人才打電話(huà)給我安利,給我做筆記和寫(xiě)博客的工具,說(shuō)我的排版很好看。(我在飄)
安排!

印象筆記
這可以說(shuō)是陪伴我大學(xué)到現在的一個(gè)工具。數了幾千個(gè)文件,記錄了生活中的小事,學(xué)了編程之后的很多東西。我在收錄里面。
我不會(huì )和其他筆記比較,因為我一開(kāi)始使用的那個(gè)從來(lái)沒(méi)有被替換過(guò)。
泰波拉
Typora 是我一直在為其編寫(xiě) Markdown 的工具。它易于使用,但也可以切換模式。你相信嗎?打字機模式、對焦模式、音源模式總有一款適合你。
ipic
我使用 Typora 的圖片床。Markdown復制圖片是不是從本地地址進(jìn)來(lái)的,發(fā)到外網(wǎng)就失效了。但是,這個(gè)基于 Typora 的工具,你復制進(jìn)去的時(shí)候可以直接上傳到互聯(lián)網(wǎng)上?,F在,你可以在任何你想要的平臺上發(fā)布。
Md2All
每個(gè)人都很好奇我的降價(jià)如何看起來(lái)如此美麗。其實(shí)我寫(xiě)完markdown后,轉成html,就用了上面的工具。
寫(xiě)完就在這里打出來(lái)然后發(fā)出去。打字花了很長(cháng)時(shí)間,忍不住夸了帥C。
圖像處理 Adob??e Photoshop CC 2019
ps,眾所周知,正常的圖片處理啊用這個(gè)香味,沒(méi)事幫美P拍照,說(shuō)不定還能找個(gè)女朋友(又開(kāi)始YY了)
Adobe Premiere Pro CC 2019
這可能是最常用的視頻處理軟件了,非常好用?。?!
功能太豐富了,喘不過(guò)氣來(lái)。缺點(diǎn)是學(xué)習成本有點(diǎn)高,入門(mén)很快。成為大神需要很多時(shí)間。
Adobe After Effects CC 2019
不知道你看了多少視頻。視頻的很多特效都是由此制作的。下面還有一個(gè)我的演示。
GIPHY 捕獲
有時(shí)候人們文章不想用靜態(tài)圖片來(lái)表達,而是想錄制Gif動(dòng)畫(huà)來(lái)寫(xiě)代碼,那么這個(gè)軟件真的好用。
視頻播放 KMPlayer
其實(shí)帥C,我心里有一個(gè)玩家神器,快點(diǎn)播吧。
可惜沒(méi)過(guò)多久,直播就過(guò)早地死掉了。我將使用以下播放軟件播放自己的視頻。
因為很多電腦自帶的格式可能不支持,而且我喜歡剪輯視頻,一直在用。

斗圖
你有沒(méi)有注意到我之前的很多 文章 表情實(shí)際上是在網(wǎng)上制作的?
碳
帥兵之前的文章里很多代碼的圖片都是這個(gè)網(wǎng)站生成的。有很多款式可供選擇,非常漂亮。
代碼LF
這個(gè) 網(wǎng)站 很有趣。如果你在寫(xiě)代碼的時(shí)候不知道如何命名這些單詞,可以去這里查看一下。他是GitHub的爬蟲(chóng)工具??吹酱笊裰?,總會(huì )有想法。
注:我簡(jiǎn)單介紹一下上面的軟件是做什么的,因為實(shí)在太多了,真正的功能還需要深挖。
總結
其實(shí)更香的工具太多了,這里就不一一介紹了,其實(shí)有一個(gè)很簡(jiǎn)單的方法,就是問(wèn),學(xué),學(xué)。
我就是這樣??吹絃eader用什么工具,我問(wèn)他是什么,好用嗎?如何使用?
包括我寫(xiě)博客,其實(shí)才寫(xiě)了20多天。第一天準備寫(xiě)的時(shí)候,直接問(wèn)三外(Java3y),你用什么開(kāi)發(fā)工具,怎么用,包括他主要發(fā)布哪些平臺,發(fā)布時(shí)間段,我會(huì )直接問(wèn)。
他坐在我對面,因為我的猥褻而被迫說(shuō)出真相,主要是因為最近有需要我為他寫(xiě)代碼哈哈。
別人有這么多經(jīng)驗,會(huì )不會(huì )是軟件不好?而且在使用過(guò)程中如果不知道,可以問(wèn)問(wèn)對方,是不是很香。
潺潺
我們先來(lái)看看人才交流群里一位人才提出的問(wèn)題:
不知道大家還記得我之前寫(xiě)的冪等情況嗎?
這就是下圖中的情況。當我下單增加或減少 GMV 時(shí),我會(huì )先去看看有沒(méi)有流水。有的話(huà)就證明已經(jīng)加了,我直接回。如果沒(méi)有,請繼續以下過(guò)程。
其實(shí)他提的問(wèn)題很好,因為我們日常的開(kāi)發(fā)是主從同步,讀寫(xiě)分離,也就是說(shuō)我們可能會(huì )加GMV,但是我們操作主庫,他需要同步數據到奴隸圖書(shū)館,但是這個(gè)他在這個(gè)過(guò)程中被耽擱了。
這時(shí)候如果另一個(gè)系統重試訂單號消息,你又進(jìn)來(lái)了嗎?你查看流水,發(fā)現沒(méi)有流水,卻以為自己沒(méi)有加錢(qián),進(jìn)行了加錢(qián)的操作,結果耽誤了。, 是不是加了兩次。
正常開(kāi)發(fā)中確實(shí)有,但是主從延遲應該是DBA(Database Administrator)考慮的,但是我說(shuō)不能寫(xiě)有邏輯漏洞的代碼,其實(shí)很簡(jiǎn)單,把他放到Redis中,設置一個(gè)時(shí)間約30分鐘,可避免在此期間重復食用。如果延遲超過(guò)30分鐘,問(wèn)題已經(jīng)很大了,DBA會(huì )知道的。
本文由吐血整理,大家吃好,記得給個(gè)贊哦!
原來(lái)的:
【結尾】
來(lái)吧,原力計劃的升級版來(lái)了!2019年末,我們?yōu)槟鷾蕚淞艘粓?chǎng)交通盛宴!即日起,只要參與原力計劃,文章達到要求,即可獲得流量+現金的支持!
參與方式:發(fā)布原創(chuàng )文章時(shí),在提交頁(yè)面勾選原力計劃即可參與。掃碼戳詳情↓
文章采集api 完美:Datakit,真正的統一可觀(guān)測性 Agent
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 153 次瀏覽 ? 2022-10-12 05:25
隨著(zhù)云和云原生的發(fā)展,越來(lái)越多的客戶(hù)意識到“數據”的重要性,掀起了一波又一波的數據積累浪潮。
如今,國內外數據量很大采集器,但采集的能力大多是單一的。比如 Telegraf 只支持指標,Filebeat 只服務(wù)日志,OpenTelemetry 的 Collector 對非云原生組件不友好。需要大量安裝 Exporter 插件。為了實(shí)現系統的可觀(guān)察性,需要使用多個(gè)采集器,造成資源的浪費。
Datakit是目前唯一真正整合各種環(huán)境(傳統環(huán)境,云/云原生)數據統一的平臺采集,一個(gè)進(jìn)程或者Daemonset Pod就可以實(shí)現全方位的數據采集,配置體驗不錯,開(kāi)源且可擴展。本文將對Datakit相關(guān)功能進(jìn)行全面介紹。
?。―ataKit 內部架構)
多維可觀(guān)測性數據采集
Datakit 支持來(lái)自各種基礎設施和技術(shù)棧的采集 Metrics、Logs、Traces 等數據,并對這些數據進(jìn)行結構化處理。
1.實(shí)時(shí)基礎設施對象
DataKit 支持從主機、容器、k8s、進(jìn)程、云產(chǎn)品等所有基礎設施對象的實(shí)時(shí)狀態(tài),一氣呵成。例如:
(1) Datakit hostobject用于采集基本的主機信息,如硬件型號、基本資源消耗等。
?。?)進(jìn)程采集器可以監控系統中各種正在運行的進(jìn)程,獲取并分析進(jìn)程運行時(shí)的各種指標,包括內存使用率、CPU時(shí)間、進(jìn)程當前狀態(tài)、進(jìn)程監控的端口等..,并且根據進(jìn)程運行時(shí)各種指標的信息,用戶(hù)可以在觀(guān)察云中配置相關(guān)的告警,以便用戶(hù)了解進(jìn)程的狀態(tài),當進(jìn)程發(fā)生故障時(shí),故障進(jìn)程可以及時(shí)維護。
二、指標
相比Telegraf只能采集系列數據,DataKit涵蓋的數據更全面采集類(lèi)型,擁有海量技術(shù)棧指標采集能力,采集器配置更簡(jiǎn)單,數據質(zhì)量更好.
3. 日志
針對日志數據的整體可觀(guān)測性,提供了一種足夠靈活多變的信息組合方式。正因為如此,相比指標和追蹤,日志有更多的采集和處理方式,以適應不同的采集環(huán)境、架構和技術(shù)棧的場(chǎng)景。
從磁盤(pán)文件中獲取日志
這是最原創(chuàng )的日志處理方式。無(wú)論是開(kāi)發(fā)者還是傳統的日志采集方案,一般都是先將日志直接寫(xiě)入磁盤(pán)文件。寫(xiě)入磁盤(pán)文件的日志具有以下特點(diǎn):
(1) 順序寫(xiě)入:一般的日志框架可以保證日志在磁盤(pán)文件中,保持時(shí)間的序列性
自動(dòng)分片:由于磁盤(pán)日志文件是物理增量的,為了防止日志炸毀磁盤(pán),一般的日志框架會(huì )自動(dòng)進(jìn)行分片,或者通過(guò)一些外部常駐腳本來(lái)實(shí)現日志分片
(2) 基于以上特性,DataKit 只需要跟蹤這些文件的變化(即采集 最新更新),一旦寫(xiě)入日志,DataKit 就可以采集 到達,其部署也很簡(jiǎn)單,在日志采集器的conf中填寫(xiě)文件路徑(或通配符路徑)為采集即可。
通過(guò)調用環(huán)境API獲取日志
這個(gè)采集方法目前主要針對容器環(huán)境下的stdout日志。這種日志需要容器(或Kubernetes Pod)中運行的應用程序將日志輸出到stdout,然后通過(guò)Docker的日志接口,將對應的stdout的日志同步到DataKit。
遠程推送日志到 DataKit
對于遠程日志推送,主要是
(1) 開(kāi)發(fā)者直接將應用日志推送到DataKit指定的服務(wù)中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持將日志發(fā)送到遠程服務(wù)。
(2) 第三方平臺日志訪(fǎng)問(wèn)
這種形式的特點(diǎn)是日志直接發(fā)送到DataKit,不需要把日志放在中間。
Sidecar 形式的日志采集
采集這個(gè)方法其實(shí)結合了磁盤(pán)日志采集和日志遠程推送兩種方法。具體來(lái)說(shuō)就是在用戶(hù)的Pod中添加一個(gè)兼容DataKit的Sidecar(即logfwd)。應用,采集方法如下:
4.鏈接跟蹤
DataKit目前支持多種廣泛使用的trace數據,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要將對應的數據地址指向Datakit即可。
5.終端行為
DataKit支持全面采集前端行為數據,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集網(wǎng)頁(yè)或移動(dòng)設備上報的用戶(hù)訪(fǎng)問(wèn)監控數據。建議將 RUM 單獨部署在公網(wǎng)上,不要與現有服務(wù)(如 Kubernetes 集群)一起部署。因為RUM接口上的流量可能非常大,集群內部的流量會(huì )受到干擾,集群內部一些可能的資源調度機制可能會(huì )影響RUM服務(wù)的運行。
通常,生產(chǎn)環(huán)境中的js文件會(huì )經(jīng)過(guò)各種轉換和壓縮,與開(kāi)發(fā)時(shí)的源代碼有較大差異,不方便調試。如果需要在源代碼中定位錯誤,則必須使用 sourcemap 文件。
DataKit支持將js對應的sourcemap文件壓縮打包,命名為--.zip,上傳到/data/rum/,從而實(shí)現上報的錯誤指標集數據自動(dòng)轉換 error_stack_source 字段并將其附加到指標集。
6. 云原生安全
SChecker插件,絕對安全的安全檢查器,lua沙箱只讀分析,支持300+安全事件發(fā)現,用戶(hù)可以自定義自己的規則文件和lib庫。
一般來(lái)說(shuō),運維過(guò)程中一項非常重要的工作就是檢查系統、軟件、日志等一系列狀態(tài)。傳統的解決方案往往是由工程師編寫(xiě)shell(bash)腳本來(lái)執行類(lèi)似的工作,并使用一些遠程腳本來(lái)執行類(lèi)似的任務(wù)。管理工具實(shí)現集群管理。然而,這種方法實(shí)際上是非常危險的。由于系統檢查操作中權限過(guò)多的問(wèn)題,經(jīng)常以root模式運行。一旦惡意腳本被執行,后果將是災難性的。在實(shí)踐中,惡意腳本有兩種,一種是惡意命令,如rm -rf,另一種是數據竊取,如通過(guò)網(wǎng)絡(luò )IO向外部泄露數據。
因此,Security Checker 希望提供一種新型的安全腳本方法(限制命令執行、限制本地 IO、限制網(wǎng)絡(luò ) IO)來(lái)保證所有行為安全可控,Security Checker 將通過(guò)統一的網(wǎng)絡(luò )模型在日志的形式采集事件。同時(shí),Security Checker 將提供大量可更新的規則庫腳本,包括對系統、容器、網(wǎng)絡(luò )和安全的一系列檢查。scheck 是安全檢查器的縮寫(xiě)。
7、基于eBPF的網(wǎng)絡(luò )監控
DataKit eBPF 采集器 支持采集主機/進(jìn)程/容器的網(wǎng)絡(luò )層 4/7 性能和異常數據。
eBPF采集器、采集主機網(wǎng)絡(luò )TCP、UDP連接信息、Bash執行日志等。這個(gè)采集器主要包括兩種:ebpf-net和ebpf-bash:
ebpf 網(wǎng):
數據類(lèi)別:網(wǎng)絡(luò )
完整的解決方案:面向開(kāi)源軟件的自動(dòng)化漏洞數據采集與處理技術(shù)研究
漏洞數據分散在數百個(gè)資源中,數據碎片化、無(wú)格式,導致采集不便、處理復雜。然而,人工構建的漏洞數據集樣本類(lèi)型簡(jiǎn)單、特征單一,難以支撐真實(shí)軟件漏洞檢測的研究。因此,軟件安全領(lǐng)域缺乏大規模、真實(shí)、有效的漏洞數據集。針對這一問(wèn)題,本文提出了一種開(kāi)源軟件漏洞數據自動(dòng)化采集及處理系統,能夠自動(dòng)實(shí)現來(lái)自多源平臺的采集補丁文件,進(jìn)行冗余處理和一致性處理。得到一個(gè)縮減的數據集,進(jìn)一步生成大量的漏洞樣本。與現有研究相比,本文構建的系統可以采集更多源平臺的漏洞數據,漏洞數據更豐富,樣本質(zhì)量更高。通過(guò)深度學(xué)習漏洞檢測實(shí)驗證明,本文在數據集上訓練的模型在實(shí)際軟件漏洞檢測中更為有效。
該成果已在實(shí)驗室github組織下開(kāi)源,相關(guān)內容請訪(fǎng)問(wèn)。
背景和動(dòng)機
在軟件安全領(lǐng)域,漏洞檢測技術(shù)是一個(gè)具有挑戰性的問(wèn)題。為了減少人工參與,提高漏洞的檢測規模和檢測速度,基于深度學(xué)習的漏洞檢測模型應運而生。然而,漏洞檢測領(lǐng)域缺乏大規模的、真實(shí)的漏洞數據集。一方面,目前公開(kāi)的人工構建的數據集,如SARD數據集,只能作為學(xué)術(shù)研究的對象,對真實(shí)漏洞的研究輔助相對有限。漏洞檢測不是很有效。另一方面,漏洞數據分散在數百個(gè)資源上,沒(méi)有統一的訪(fǎng)問(wèn)渠道,而且這些數據是碎片化的、無(wú)格式的,這給數據采集和處理帶來(lái)了挑戰。此外,不同來(lái)源的漏洞數據質(zhì)量參差不齊,其中一些是安全缺陷,不一定是漏洞補丁。傳統的采集方法依賴(lài)安全專(zhuān)家通過(guò)人工分析進(jìn)行過(guò)濾,耗時(shí)耗力、效率低、成本高。為了解決這些問(wèn)題,本文構建了漏洞數據自動(dòng)化采集處理系統,旨在總結漏洞數據的分布規律和內容特征,突破漏洞數據準確提取等關(guān)鍵點(diǎn)。自動(dòng)過(guò)濾漏洞補丁鏈接。技術(shù),解決自動(dòng)化問(wèn)題采集和多源漏洞補丁采集 大數據環(huán)境下海量異構的漏洞信息,從而實(shí)現構建大規模、高質(zhì)量的漏洞數據集,為深度學(xué)習漏洞檢測提供有效的訓練數據,提高模型檢測精度。設計與實(shí)現如圖1所示。系統主要有三個(gè)模塊: 1)Data采集模塊,輸入為美國國家漏洞數據庫NVD和一般漏洞,輸出為漏洞信息和補丁文件;2)數據處理模塊,輸入為多源采集的補丁文件,輸出為處理后的簡(jiǎn)化補丁庫;3)數據生成模塊,輸入為補丁庫和上一步輸出的開(kāi)源項目的源代碼,
圖 1 系統架構圖
在data采集模塊中,我們對權威漏洞庫NVD的數據進(jìn)行解析提取,得到結構化的漏洞屬性信息。進(jìn)一步系統分析研究主流開(kāi)源軟件的漏洞參考鏈接,找出存在漏洞的平臺鏈接,獲取不同安全發(fā)布平臺的漏洞補丁文件,從而獲取漏洞樣本,為深度學(xué)習漏洞檢測提供數據支持研究。. 我們提出了一種基于多源補丁的數據自動(dòng)化采集 模型,通過(guò)三種方法自動(dòng)化采集補丁。首先是從補丁的安全漏洞公告平臺獲取補丁,軟件廠(chǎng)商自己的漏洞公告平臺,和代碼管理倉庫。在對數百個(gè)補丁發(fā)布平臺進(jìn)行系統分析總結后,總結出20多種補丁自動(dòng)化。采集網(wǎng)站,如圖2。二是通過(guò)“CVE”過(guò)濾GitHub的歷史修改Commits " 關(guān)鍵詞,查找CVE的修改記錄,自動(dòng)過(guò)濾歷史修改。三是在bug追蹤平臺Bugzilla的NVD Reference中搜索與CVE匹配的bugid,得到對應的bug修復文件或補丁。
圖2 補丁源平臺
在數據處理模塊中,我們系統地分析了多源補丁的結構和格式,總結了標準的補丁文件結構和內容信息,并對通過(guò)多種采集方法得到的補丁文件進(jìn)行了合并和去冗余。相同軟件版本冗余如圖3,不同版本軟件冗余如圖4。我們提出了一套基于多種信息的補丁有效性評估機制,并結合提取的漏洞文件名,函數名和補丁源平臺,判斷補丁文件和漏洞的相關(guān)性。如果補丁是直接針對漏洞功能的補丁,則認為是最準確的類(lèi)型1;如果補丁是針對漏洞文件的補丁,它被認為是下一個(gè)準確的類(lèi)型2;如果補丁無(wú)法判斷是打漏洞函數還是漏洞文件,則可以判斷補丁是針對CVE的,則為T(mén)ype 3;如果不能通過(guò)現有信息直接判斷,需要進(jìn)一步人工處理,則暫按第4類(lèi)處理。
圖 3 相同軟件版本的補丁冗余
圖 4 不同軟件版本的補丁冗余
在數據生成模塊中,我們將補丁文件與代碼庫進(jìn)行匹配,以獲取函數級別和文件級別的細粒度漏洞樣本。由于源代碼漏洞數據集均為線(xiàn)性文本形式,無(wú)法反映代碼程序的控制依賴(lài)信息和層次結構信息,缺乏程序語(yǔ)義與漏洞特征的關(guān)系,難以獲得準確的語(yǔ)法結構信息通過(guò)進(jìn)一步分析。具有更多語(yǔ)義信息的中間語(yǔ)言形式的漏洞數據可以提供更全面、更直接的代碼表示,提高漏洞檢測模型的檢測能力和準確性。本模塊搭建各版本主流軟件的編譯環(huán)境,查找編譯漏洞文件所需的頭文件、庫文件等依賴(lài)項,并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。
表 1 數據集統計
采用基于深度學(xué)習的漏洞檢測框架 SySeVR() 訓練最有效的模型 BGRU。實(shí)驗一是原創(chuàng )數據集在真實(shí)漏洞數據NVD上的檢測結果。原創(chuàng )數據集有14000個(gè)SARD程序和1591個(gè)NVD程序,包括13906個(gè)SADR易受攻擊程序(包括易受攻擊的函數和修補函數),94個(gè)非易受攻擊程序,874個(gè)NVD易受攻擊程序,717個(gè)無(wú)bug程序。實(shí)驗2使用一個(gè)新的數據集,使用原創(chuàng )數據集中來(lái)自SARD的數據集,將部分NVD數據集替換為本文構建的6847個(gè)易受攻擊程序和6573個(gè)非易受攻擊程序,并在真實(shí)數據集上進(jìn)行測試軟件漏洞數據集 NVD。測試結果如表2所示。
表2 漏洞檢測實(shí)驗結果對比
可以看出,用系統構建的數據集訓練的模型在真實(shí)數據集的漏洞檢測方面表現更好。這體現在假陰性率和假陽(yáng)性率的降低,以及準確率、準確率和召回率的提高上。這是因為在模型訓練中加入了大量真實(shí)的軟件漏洞數據,提供了豐富的漏洞樣本,使得模型可以用于漏洞特征進(jìn)行更全面的學(xué)習。 查看全部
文章采集api 完美:Datakit,真正的統一可觀(guān)測性 Agent
隨著(zhù)云和云原生的發(fā)展,越來(lái)越多的客戶(hù)意識到“數據”的重要性,掀起了一波又一波的數據積累浪潮。
如今,國內外數據量很大采集器,但采集的能力大多是單一的。比如 Telegraf 只支持指標,Filebeat 只服務(wù)日志,OpenTelemetry 的 Collector 對非云原生組件不友好。需要大量安裝 Exporter 插件。為了實(shí)現系統的可觀(guān)察性,需要使用多個(gè)采集器,造成資源的浪費。
Datakit是目前唯一真正整合各種環(huán)境(傳統環(huán)境,云/云原生)數據統一的平臺采集,一個(gè)進(jìn)程或者Daemonset Pod就可以實(shí)現全方位的數據采集,配置體驗不錯,開(kāi)源且可擴展。本文將對Datakit相關(guān)功能進(jìn)行全面介紹。
?。―ataKit 內部架構)
多維可觀(guān)測性數據采集
Datakit 支持來(lái)自各種基礎設施和技術(shù)棧的采集 Metrics、Logs、Traces 等數據,并對這些數據進(jìn)行結構化處理。
1.實(shí)時(shí)基礎設施對象
DataKit 支持從主機、容器、k8s、進(jìn)程、云產(chǎn)品等所有基礎設施對象的實(shí)時(shí)狀態(tài),一氣呵成。例如:
(1) Datakit hostobject用于采集基本的主機信息,如硬件型號、基本資源消耗等。
?。?)進(jìn)程采集器可以監控系統中各種正在運行的進(jìn)程,獲取并分析進(jìn)程運行時(shí)的各種指標,包括內存使用率、CPU時(shí)間、進(jìn)程當前狀態(tài)、進(jìn)程監控的端口等..,并且根據進(jìn)程運行時(shí)各種指標的信息,用戶(hù)可以在觀(guān)察云中配置相關(guān)的告警,以便用戶(hù)了解進(jìn)程的狀態(tài),當進(jìn)程發(fā)生故障時(shí),故障進(jìn)程可以及時(shí)維護。
二、指標
相比Telegraf只能采集系列數據,DataKit涵蓋的數據更全面采集類(lèi)型,擁有海量技術(shù)棧指標采集能力,采集器配置更簡(jiǎn)單,數據質(zhì)量更好.
3. 日志
針對日志數據的整體可觀(guān)測性,提供了一種足夠靈活多變的信息組合方式。正因為如此,相比指標和追蹤,日志有更多的采集和處理方式,以適應不同的采集環(huán)境、架構和技術(shù)棧的場(chǎng)景。
從磁盤(pán)文件中獲取日志

這是最原創(chuàng )的日志處理方式。無(wú)論是開(kāi)發(fā)者還是傳統的日志采集方案,一般都是先將日志直接寫(xiě)入磁盤(pán)文件。寫(xiě)入磁盤(pán)文件的日志具有以下特點(diǎn):
(1) 順序寫(xiě)入:一般的日志框架可以保證日志在磁盤(pán)文件中,保持時(shí)間的序列性
自動(dòng)分片:由于磁盤(pán)日志文件是物理增量的,為了防止日志炸毀磁盤(pán),一般的日志框架會(huì )自動(dòng)進(jìn)行分片,或者通過(guò)一些外部常駐腳本來(lái)實(shí)現日志分片
(2) 基于以上特性,DataKit 只需要跟蹤這些文件的變化(即采集 最新更新),一旦寫(xiě)入日志,DataKit 就可以采集 到達,其部署也很簡(jiǎn)單,在日志采集器的conf中填寫(xiě)文件路徑(或通配符路徑)為采集即可。
通過(guò)調用環(huán)境API獲取日志
這個(gè)采集方法目前主要針對容器環(huán)境下的stdout日志。這種日志需要容器(或Kubernetes Pod)中運行的應用程序將日志輸出到stdout,然后通過(guò)Docker的日志接口,將對應的stdout的日志同步到DataKit。
遠程推送日志到 DataKit
對于遠程日志推送,主要是
(1) 開(kāi)發(fā)者直接將應用日志推送到DataKit指定的服務(wù)中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持將日志發(fā)送到遠程服務(wù)。
(2) 第三方平臺日志訪(fǎng)問(wèn)
這種形式的特點(diǎn)是日志直接發(fā)送到DataKit,不需要把日志放在中間。
Sidecar 形式的日志采集
采集這個(gè)方法其實(shí)結合了磁盤(pán)日志采集和日志遠程推送兩種方法。具體來(lái)說(shuō)就是在用戶(hù)的Pod中添加一個(gè)兼容DataKit的Sidecar(即logfwd)。應用,采集方法如下:

4.鏈接跟蹤
DataKit目前支持多種廣泛使用的trace數據,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要將對應的數據地址指向Datakit即可。
5.終端行為
DataKit支持全面采集前端行為數據,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集網(wǎng)頁(yè)或移動(dòng)設備上報的用戶(hù)訪(fǎng)問(wèn)監控數據。建議將 RUM 單獨部署在公網(wǎng)上,不要與現有服務(wù)(如 Kubernetes 集群)一起部署。因為RUM接口上的流量可能非常大,集群內部的流量會(huì )受到干擾,集群內部一些可能的資源調度機制可能會(huì )影響RUM服務(wù)的運行。
通常,生產(chǎn)環(huán)境中的js文件會(huì )經(jīng)過(guò)各種轉換和壓縮,與開(kāi)發(fā)時(shí)的源代碼有較大差異,不方便調試。如果需要在源代碼中定位錯誤,則必須使用 sourcemap 文件。
DataKit支持將js對應的sourcemap文件壓縮打包,命名為--.zip,上傳到/data/rum/,從而實(shí)現上報的錯誤指標集數據自動(dòng)轉換 error_stack_source 字段并將其附加到指標集。
6. 云原生安全
SChecker插件,絕對安全的安全檢查器,lua沙箱只讀分析,支持300+安全事件發(fā)現,用戶(hù)可以自定義自己的規則文件和lib庫。
一般來(lái)說(shuō),運維過(guò)程中一項非常重要的工作就是檢查系統、軟件、日志等一系列狀態(tài)。傳統的解決方案往往是由工程師編寫(xiě)shell(bash)腳本來(lái)執行類(lèi)似的工作,并使用一些遠程腳本來(lái)執行類(lèi)似的任務(wù)。管理工具實(shí)現集群管理。然而,這種方法實(shí)際上是非常危險的。由于系統檢查操作中權限過(guò)多的問(wèn)題,經(jīng)常以root模式運行。一旦惡意腳本被執行,后果將是災難性的。在實(shí)踐中,惡意腳本有兩種,一種是惡意命令,如rm -rf,另一種是數據竊取,如通過(guò)網(wǎng)絡(luò )IO向外部泄露數據。
因此,Security Checker 希望提供一種新型的安全腳本方法(限制命令執行、限制本地 IO、限制網(wǎng)絡(luò ) IO)來(lái)保證所有行為安全可控,Security Checker 將通過(guò)統一的網(wǎng)絡(luò )模型在日志的形式采集事件。同時(shí),Security Checker 將提供大量可更新的規則庫腳本,包括對系統、容器、網(wǎng)絡(luò )和安全的一系列檢查。scheck 是安全檢查器的縮寫(xiě)。
7、基于eBPF的網(wǎng)絡(luò )監控
DataKit eBPF 采集器 支持采集主機/進(jìn)程/容器的網(wǎng)絡(luò )層 4/7 性能和異常數據。
eBPF采集器、采集主機網(wǎng)絡(luò )TCP、UDP連接信息、Bash執行日志等。這個(gè)采集器主要包括兩種:ebpf-net和ebpf-bash:
ebpf 網(wǎng):
數據類(lèi)別:網(wǎng)絡(luò )
完整的解決方案:面向開(kāi)源軟件的自動(dòng)化漏洞數據采集與處理技術(shù)研究
漏洞數據分散在數百個(gè)資源中,數據碎片化、無(wú)格式,導致采集不便、處理復雜。然而,人工構建的漏洞數據集樣本類(lèi)型簡(jiǎn)單、特征單一,難以支撐真實(shí)軟件漏洞檢測的研究。因此,軟件安全領(lǐng)域缺乏大規模、真實(shí)、有效的漏洞數據集。針對這一問(wèn)題,本文提出了一種開(kāi)源軟件漏洞數據自動(dòng)化采集及處理系統,能夠自動(dòng)實(shí)現來(lái)自多源平臺的采集補丁文件,進(jìn)行冗余處理和一致性處理。得到一個(gè)縮減的數據集,進(jìn)一步生成大量的漏洞樣本。與現有研究相比,本文構建的系統可以采集更多源平臺的漏洞數據,漏洞數據更豐富,樣本質(zhì)量更高。通過(guò)深度學(xué)習漏洞檢測實(shí)驗證明,本文在數據集上訓練的模型在實(shí)際軟件漏洞檢測中更為有效。
該成果已在實(shí)驗室github組織下開(kāi)源,相關(guān)內容請訪(fǎng)問(wèn)。
背景和動(dòng)機
在軟件安全領(lǐng)域,漏洞檢測技術(shù)是一個(gè)具有挑戰性的問(wèn)題。為了減少人工參與,提高漏洞的檢測規模和檢測速度,基于深度學(xué)習的漏洞檢測模型應運而生。然而,漏洞檢測領(lǐng)域缺乏大規模的、真實(shí)的漏洞數據集。一方面,目前公開(kāi)的人工構建的數據集,如SARD數據集,只能作為學(xué)術(shù)研究的對象,對真實(shí)漏洞的研究輔助相對有限。漏洞檢測不是很有效。另一方面,漏洞數據分散在數百個(gè)資源上,沒(méi)有統一的訪(fǎng)問(wèn)渠道,而且這些數據是碎片化的、無(wú)格式的,這給數據采集和處理帶來(lái)了挑戰。此外,不同來(lái)源的漏洞數據質(zhì)量參差不齊,其中一些是安全缺陷,不一定是漏洞補丁。傳統的采集方法依賴(lài)安全專(zhuān)家通過(guò)人工分析進(jìn)行過(guò)濾,耗時(shí)耗力、效率低、成本高。為了解決這些問(wèn)題,本文構建了漏洞數據自動(dòng)化采集處理系統,旨在總結漏洞數據的分布規律和內容特征,突破漏洞數據準確提取等關(guān)鍵點(diǎn)。自動(dòng)過(guò)濾漏洞補丁鏈接。技術(shù),解決自動(dòng)化問(wèn)題采集和多源漏洞補丁采集 大數據環(huán)境下海量異構的漏洞信息,從而實(shí)現構建大規模、高質(zhì)量的漏洞數據集,為深度學(xué)習漏洞檢測提供有效的訓練數據,提高模型檢測精度。設計與實(shí)現如圖1所示。系統主要有三個(gè)模塊: 1)Data采集模塊,輸入為美國國家漏洞數據庫NVD和一般漏洞,輸出為漏洞信息和補丁文件;2)數據處理模塊,輸入為多源采集的補丁文件,輸出為處理后的簡(jiǎn)化補丁庫;3)數據生成模塊,輸入為補丁庫和上一步輸出的開(kāi)源項目的源代碼,
圖 1 系統架構圖
在data采集模塊中,我們對權威漏洞庫NVD的數據進(jìn)行解析提取,得到結構化的漏洞屬性信息。進(jìn)一步系統分析研究主流開(kāi)源軟件的漏洞參考鏈接,找出存在漏洞的平臺鏈接,獲取不同安全發(fā)布平臺的漏洞補丁文件,從而獲取漏洞樣本,為深度學(xué)習漏洞檢測提供數據支持研究。. 我們提出了一種基于多源補丁的數據自動(dòng)化采集 模型,通過(guò)三種方法自動(dòng)化采集補丁。首先是從補丁的安全漏洞公告平臺獲取補丁,軟件廠(chǎng)商自己的漏洞公告平臺,和代碼管理倉庫。在對數百個(gè)補丁發(fā)布平臺進(jìn)行系統分析總結后,總結出20多種補丁自動(dòng)化。采集網(wǎng)站,如圖2。二是通過(guò)“CVE”過(guò)濾GitHub的歷史修改Commits " 關(guān)鍵詞,查找CVE的修改記錄,自動(dòng)過(guò)濾歷史修改。三是在bug追蹤平臺Bugzilla的NVD Reference中搜索與CVE匹配的bugid,得到對應的bug修復文件或補丁。

圖2 補丁源平臺
在數據處理模塊中,我們系統地分析了多源補丁的結構和格式,總結了標準的補丁文件結構和內容信息,并對通過(guò)多種采集方法得到的補丁文件進(jìn)行了合并和去冗余。相同軟件版本冗余如圖3,不同版本軟件冗余如圖4。我們提出了一套基于多種信息的補丁有效性評估機制,并結合提取的漏洞文件名,函數名和補丁源平臺,判斷補丁文件和漏洞的相關(guān)性。如果補丁是直接針對漏洞功能的補丁,則認為是最準確的類(lèi)型1;如果補丁是針對漏洞文件的補丁,它被認為是下一個(gè)準確的類(lèi)型2;如果補丁無(wú)法判斷是打漏洞函數還是漏洞文件,則可以判斷補丁是針對CVE的,則為T(mén)ype 3;如果不能通過(guò)現有信息直接判斷,需要進(jìn)一步人工處理,則暫按第4類(lèi)處理。
圖 3 相同軟件版本的補丁冗余
圖 4 不同軟件版本的補丁冗余

在數據生成模塊中,我們將補丁文件與代碼庫進(jìn)行匹配,以獲取函數級別和文件級別的細粒度漏洞樣本。由于源代碼漏洞數據集均為線(xiàn)性文本形式,無(wú)法反映代碼程序的控制依賴(lài)信息和層次結構信息,缺乏程序語(yǔ)義與漏洞特征的關(guān)系,難以獲得準確的語(yǔ)法結構信息通過(guò)進(jìn)一步分析。具有更多語(yǔ)義信息的中間語(yǔ)言形式的漏洞數據可以提供更全面、更直接的代碼表示,提高漏洞檢測模型的檢測能力和準確性。本模塊搭建各版本主流軟件的編譯環(huán)境,查找編譯漏洞文件所需的頭文件、庫文件等依賴(lài)項,并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。
表 1 數據集統計
采用基于深度學(xué)習的漏洞檢測框架 SySeVR() 訓練最有效的模型 BGRU。實(shí)驗一是原創(chuàng )數據集在真實(shí)漏洞數據NVD上的檢測結果。原創(chuàng )數據集有14000個(gè)SARD程序和1591個(gè)NVD程序,包括13906個(gè)SADR易受攻擊程序(包括易受攻擊的函數和修補函數),94個(gè)非易受攻擊程序,874個(gè)NVD易受攻擊程序,717個(gè)無(wú)bug程序。實(shí)驗2使用一個(gè)新的數據集,使用原創(chuàng )數據集中來(lái)自SARD的數據集,將部分NVD數據集替換為本文構建的6847個(gè)易受攻擊程序和6573個(gè)非易受攻擊程序,并在真實(shí)數據集上進(jìn)行測試軟件漏洞數據集 NVD。測試結果如表2所示。
表2 漏洞檢測實(shí)驗結果對比
可以看出,用系統構建的數據集訓練的模型在真實(shí)數據集的漏洞檢測方面表現更好。這體現在假陰性率和假陽(yáng)性率的降低,以及準確率、準確率和召回率的提高上。這是因為在模型訓練中加入了大量真實(shí)的軟件漏洞數據,提供了豐富的漏洞樣本,使得模型可以用于漏洞特征進(jìn)行更全面的學(xué)習。
實(shí)用文章:【php 帶cookie采集某頁(yè)面】的更多相關(guān)文章
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-10-11 21:20
如果在基于 vue 的 webpack 基架開(kāi)發(fā)中使用代理轉發(fā),結果瀏覽器在沒(méi)有 cookie 的情況下發(fā)出請求,導致登錄始終使會(huì )話(huà)失敗,該怎么辦?
環(huán)境:有2個(gè)業(yè)務(wù)接口需要轉發(fā)到82臺服務(wù)器:/用戶(hù)/getCode.do.do./user/doLogin.do現象:使用以上兩個(gè)接口實(shí)現用戶(hù)登錄功能,首先顯示登錄頁(yè)面,調用:/user/getCode.do獲取驗證碼,然后在用戶(hù)界面中輸入用戶(hù)名。點(diǎn)擊登錄后調用密碼和驗證碼: /用戶(hù)/do登錄接口實(shí)現登錄.結果: /用戶(hù)/do登錄后臺始終找不到驗證碼,因為瀏覽器沒(méi)有將 JSE 放入 cookie 中...
教程:python爬蟲(chóng)之 requests實(shí)戰之網(wǎng)頁(yè)采集器
今天繼續我們的爬蟲(chóng)學(xué)習,采集器學(xué)習一個(gè)請求實(shí)用的網(wǎng)頁(yè):以搜狗主頁(yè)為例
代碼的設計步驟:
我們遵循以下設計過(guò)程來(lái)開(kāi)發(fā)Web采集器:
?。?) UA偽裝:將相應的用戶(hù)代理封裝到字典中
在這里,添加了一些知識:
UA:用戶(hù)代理(請求運營(yíng)商的身份)
?。?。
UA檢測:服務(wù)器網(wǎng)站門(mén)戶(hù)檢測到相應請求載體的身份,如果是瀏覽器,則為正常請求,否則很可能拒絕請求
UA偽裝:使爬蟲(chóng)的請求向量身份偽裝成某個(gè)瀏覽器
?。?) 發(fā)起請求,get 模式返回響應對象
?。?)獲取響應數據,文本以字符串的形式返回響應數據
?。?) 數據的持久存儲
下面,附加“我的代碼”部分:
import requests
'''
網(wǎng)頁(yè)采集器
UA:User-Agent(請求載體的身份標識)
UA檢測:門(mén)戶(hù)網(wǎng)站的服務(wù)器會(huì )檢測對應請求載體的身份標識,如果是瀏覽器則說(shuō)明是一個(gè)正常請求,否則很有可能拒絕該請求
UA偽裝:讓爬蟲(chóng)對應的請求載體身份標識偽裝成某一個(gè)瀏覽器
'''
if __name__ == "__main__":
#UA偽裝:將對應的User-Agent封裝到一個(gè)字典內
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.發(fā)起請求,get方式會(huì )返回一個(gè)響應對象
#處理url攜帶的參數:封裝到字典內
kw = input('enter a word:')
param = {
'query':kw
}
#對指定的url發(fā)起的請求對應的url是攜帶參數的,并且請求過(guò)程中處理了參數
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詳細代碼為:
化妝品生產(chǎn)許可信息管理系統服務(wù)平臺
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部許可證】【業(yè)務(wù)辦理】
許可證編號
企業(yè)名稱(chēng)
社會(huì )信用代碼
所屬省份
生產(chǎn)類(lèi)別
<p>
發(fā)證日期
企業(yè)名稱(chēng)
許可證編號
發(fā)證機關(guān) 有效期至
本站由國家藥品監督管理局主辦
版權所有 未經(jīng)許可禁止轉載或建立鏡像 Copyright © NMPA All Rights Reserved
</p> 查看全部
實(shí)用文章:【php 帶cookie采集某頁(yè)面】的更多相關(guān)文章

如果在基于 vue 的 webpack 基架開(kāi)發(fā)中使用代理轉發(fā),結果瀏覽器在沒(méi)有 cookie 的情況下發(fā)出請求,導致登錄始終使會(huì )話(huà)失敗,該怎么辦?

環(huán)境:有2個(gè)業(yè)務(wù)接口需要轉發(fā)到82臺服務(wù)器:/用戶(hù)/getCode.do.do./user/doLogin.do現象:使用以上兩個(gè)接口實(shí)現用戶(hù)登錄功能,首先顯示登錄頁(yè)面,調用:/user/getCode.do獲取驗證碼,然后在用戶(hù)界面中輸入用戶(hù)名。點(diǎn)擊登錄后調用密碼和驗證碼: /用戶(hù)/do登錄接口實(shí)現登錄.結果: /用戶(hù)/do登錄后臺始終找不到驗證碼,因為瀏覽器沒(méi)有將 JSE 放入 cookie 中...
教程:python爬蟲(chóng)之 requests實(shí)戰之網(wǎng)頁(yè)采集器
今天繼續我們的爬蟲(chóng)學(xué)習,采集器學(xué)習一個(gè)請求實(shí)用的網(wǎng)頁(yè):以搜狗主頁(yè)為例
代碼的設計步驟:
我們遵循以下設計過(guò)程來(lái)開(kāi)發(fā)Web采集器:
?。?) UA偽裝:將相應的用戶(hù)代理封裝到字典中
在這里,添加了一些知識:
UA:用戶(hù)代理(請求運營(yíng)商的身份)
?。?。
UA檢測:服務(wù)器網(wǎng)站門(mén)戶(hù)檢測到相應請求載體的身份,如果是瀏覽器,則為正常請求,否則很可能拒絕請求
UA偽裝:使爬蟲(chóng)的請求向量身份偽裝成某個(gè)瀏覽器
?。?) 發(fā)起請求,get 模式返回響應對象
?。?)獲取響應數據,文本以字符串的形式返回響應數據
?。?) 數據的持久存儲
下面,附加“我的代碼”部分:
import requests
'''
網(wǎng)頁(yè)采集器
UA:User-Agent(請求載體的身份標識)
UA檢測:門(mén)戶(hù)網(wǎng)站的服務(wù)器會(huì )檢測對應請求載體的身份標識,如果是瀏覽器則說(shuō)明是一個(gè)正常請求,否則很有可能拒絕該請求
UA偽裝:讓爬蟲(chóng)對應的請求載體身份標識偽裝成某一個(gè)瀏覽器
'''
if __name__ == "__main__":
#UA偽裝:將對應的User-Agent封裝到一個(gè)字典內
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.發(fā)起請求,get方式會(huì )返回一個(gè)響應對象
#處理url攜帶的參數:封裝到字典內
kw = input('enter a word:')
param = {
'query':kw
}
#對指定的url發(fā)起的請求對應的url是攜帶參數的,并且請求過(guò)程中處理了參數
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詳細代碼為:
化妝品生產(chǎn)許可信息管理系統服務(wù)平臺
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部許可證】【業(yè)務(wù)辦理】
許可證編號
企業(yè)名稱(chēng)
社會(huì )信用代碼
所屬省份
生產(chǎn)類(lèi)別
<p>

發(fā)證日期
企業(yè)名稱(chēng)
許可證編號
發(fā)證機關(guān) 有效期至
本站由國家藥品監督管理局主辦
版權所有 未經(jīng)許可禁止轉載或建立鏡像 Copyright © NMPA All Rights Reserved
</p>
干貨:wordpress子比主題免費文章批量翻譯工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 74 次瀏覽 ? 2022-10-10 18:23
wordpress子主題文章翻譯可以讓我們批量對需要翻譯的文章進(jìn)行中英文翻譯,一鍵自動(dòng)發(fā)布到我們對應的欄目。翻譯不僅支持中英文,還支持日文、泰文、阿拉伯文、德文等多種語(yǔ)言。翻譯插件對接百度翻譯、有道翻譯、谷歌翻譯等API。
wordpress子主題文章翻譯插件對接多家大廠(chǎng)翻譯接口,自帶翻譯接口。無(wú)論是文章批量翻譯還是語(yǔ)言之間的來(lái)回翻譯,都可以一鍵點(diǎn)擊,批量操作。WordPress子主題文章翻譯插件支持各類(lèi)cms,不僅WordPress、zblog、易友cms等各類(lèi)cms都可以輕松對接。
WordPress子主題文章翻譯插件支持全網(wǎng)內容采集、批量翻譯、文章偽原創(chuàng )發(fā)布。想象一下使用一個(gè)wordpress子主題文章翻譯插件,導入一個(gè)關(guān)鍵詞列表,然后讓AI翻譯寫(xiě)出我們網(wǎng)站需要的原創(chuàng )文章。
搜索引擎正在識別由人工智能翻譯編寫(xiě)的內容。這包括由人工智能或機器學(xué)習生成的內容。搜索引擎政策更新是為了打擊那些使用人工智能以欺騙搜索引擎算法的方式翻譯書(shū)面內容的人。這種類(lèi)型的內容通常被設計為在搜索結果中排名靠前,但與手工翻譯的內容質(zhì)量不同。
搜索引擎表示,在確定內容是合成的還是操縱的時(shí),它會(huì )考慮許多因素。這包括使用“旋轉”技術(shù)生成相同內容的多個(gè)版本,以及使用人工智能生成旨在欺騙搜索引擎算法的文本??赡軙?huì )對發(fā)現發(fā)布此類(lèi)內容的 網(wǎng)站 采取行動(dòng),包括從搜索結果中刪除。這是打擊那些使用人工智能玩系統的人的重要一步。
毫無(wú)疑問(wèn),人工智能 (AI) 正在徹底改變內容寫(xiě)作領(lǐng)域。然而,人工智能書(shū)面內容的使用增加也可能產(chǎn)生潛在的問(wèn)題。一個(gè)潛在的問(wèn)題是,由 AI 翻譯人員編寫(xiě)的內容可能會(huì )變得過(guò)于公式化和重復。隨著(zhù)人工智能算法變得越來(lái)越復雜,它們將能夠更有效地識別數據中的模式。隨著(zhù)算法識別和復制成功的模式,這可能導致由人工智能翻譯編寫(xiě)的內容變得越來(lái)越公式化。另一個(gè)潛在問(wèn)題是 AI 翻譯人員編寫(xiě)的內容可能是非個(gè)人的。
隨著(zhù) AI 越來(lái)越多地參與到內容翻譯寫(xiě)作過(guò)程中,WordPress 字幕可能會(huì )失去人類(lèi)翻譯寫(xiě)作的溫暖和個(gè)性。最后,人工智能翻譯的內容有可能被用來(lái)操縱公眾輿論。隨著(zhù)人工智能在理解和復制人類(lèi)情感方面變得更好,它可以用來(lái)翻譯為引發(fā)某種情感反應而編寫(xiě)的內容。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,WordPress 子主題越來(lái)越多地使用人工智能來(lái)翻譯可能會(huì )產(chǎn)生潛在問(wèn)題的內容。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果??傮w而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。
技術(shù)文章:谷歌seo特點(diǎn)技巧(網(wǎng)站google搜索優(yōu)化)
如何優(yōu)化谷歌排名?谷歌排名優(yōu)化有哪些網(wǎng)站要求?
中國是外貿出口大國。最近有很多出口企業(yè)問(wèn)我們對谷歌排名優(yōu)化有什么要求?什么是谷歌排名優(yōu)化?哪個(gè)品牌最適合谷歌排名優(yōu)化?下面小編將為您解答這個(gè)問(wèn)題:
疫情影響下,外貿企業(yè)迎難而上,求創(chuàng )新求變,數千家傳統外貿企業(yè)伸出援手,提質(zhì)增效。在客戶(hù)開(kāi)發(fā)和營(yíng)銷(xiāo)方面,外貿企業(yè)利用大數據精準營(yíng)銷(xiāo)工具、B2B平臺、線(xiàn)上展會(huì )等方式,開(kāi)發(fā)、推廣、引流客戶(hù),加速數字化轉型。
優(yōu)易華擁有超過(guò)15年的互聯(lián)網(wǎng)營(yíng)銷(xiāo)經(jīng)驗,讓優(yōu)易華擁有豐富的海外數字營(yíng)銷(xiāo)經(jīng)驗,積累了大量的營(yíng)銷(xiāo)資源。該公司是谷歌認證的合作伙伴,谷歌搜索引擎優(yōu)化是主要項目之一。
谷歌排名優(yōu)化說(shuō)明及詳情:
1、谷歌排名優(yōu)化的最大優(yōu)勢是沒(méi)有各個(gè)引擎的獨立性。即使你只要求優(yōu)化百度,結果在百度、谷歌等各大搜索引擎中都會(huì )有不錯的排名,而SEO只能在一個(gè)搜索引擎中使用。好的排名顯示在網(wǎng)站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都會(huì )有好的排名,從而減少投入和投入。
2. 對于每個(gè)類(lèi)別,列出相關(guān)的 文章。下面我們用問(wèn)答的方式來(lái)說(shuō)明什么是谷歌排名優(yōu)化?如何學(xué)習谷歌排名優(yōu)化?如何進(jìn)行谷歌排名優(yōu)化?將每一頁(yè)的相關(guān)問(wèn)題歸納為兩類(lèi):?jiǎn)?wèn)題大師關(guān)鍵詞的集合列表,以及類(lèi)似問(wèn)題的列表。從根本上說(shuō),它清理了所有相關(guān)的關(guān)鍵詞,讓頁(yè)面有更好的用戶(hù)體驗,讓谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方顯示類(lèi)似的文章,有利于谷歌排名優(yōu)化和推廣,可以打開(kāi)。另外,文章發(fā)布后,相關(guān)的關(guān)鍵詞也可以補充評論功能。與谷歌不同,百度的排名規則以PR值作為明確的標準。但是百度也有一套算法對每個(gè)網(wǎng)站進(jìn)行加權,因為沒(méi)有標準,就沒(méi)有排名的依據。這個(gè)事實(shí)是非常真實(shí)的。因此,在SEO實(shí)踐中,網(wǎng)站獲得更高的PR值,是每個(gè)SEO人追求的目標。但是要獲得高PR值,需要一些高質(zhì)量的反向鏈接或者足夠多的反向鏈接。
4、提高網(wǎng)站的曝光度。如果一個(gè)網(wǎng)站做SEO,你在搜索引擎中的排名就會(huì )上升,更多的人會(huì )點(diǎn)擊你的網(wǎng)站。而且你會(huì )受益于不止一個(gè)搜索引擎,百度、谷歌、雅虎、搜狗等各種搜索引擎一般都有數據展示。作為一名員工,編寫(xiě)觀(guān)眾喜歡的內容并不難。加入谷歌也是考慮這些因素的時(shí)候。一開(kāi)始可能會(huì )很麻煩,但有了這些 SEO 技巧,你很快就會(huì )得到意想不到的結果。
如何優(yōu)化谷歌排名
一:隱藏文字/隱藏鏈接
一般指網(wǎng)頁(yè)專(zhuān)為搜索引擎設計,但普通訪(fǎng)問(wèn)者看不到的文字內容或鏈接。在各種隱藏技術(shù)中,最常見(jiàn)的是將文本或鏈接文本的字體顏色設置為與背景顏色相同或非常接近。
不可見(jiàn)/隱藏文本
目的是在不影響網(wǎng)站美觀(guān)的情況下,增加收錄大量關(guān)鍵詞的頁(yè)面的關(guān)鍵詞相關(guān)性分數,從而提高搜索引擎排名。
不可見(jiàn)/隱藏鏈接
它旨在通過(guò)在不影響 網(wǎng)站 的美觀(guān)性的情況下在其他頁(yè)面上添加指向目標優(yōu)化頁(yè)面的不可見(jiàn)鏈接來(lái)提高鏈接分數,從而提高搜索引擎排名。
大多數搜索引擎現在檢測到隱藏的技術(shù)并認為它們作弊。結果,收錄隱藏文本的網(wǎng)頁(yè)面臨被搜索引擎降級甚至從列表中刪除的懲罰。雖然不乏 網(wǎng)站 Google 員工利用隱形技術(shù)僥幸成功,但大多數人仍然認為不值得冒險。實(shí)際上,通過(guò)添加可視化文本內容并保證一定的關(guān)鍵詞密度,也可以達到同樣的優(yōu)化效果。
2:頁(yè)面與谷歌描述不符
通常發(fā)生在一個(gè)網(wǎng)站被提交給搜索引擎,而網(wǎng)站在網(wǎng)站為收錄之后被另一個(gè)頁(yè)面替換?!罢T餌-&-切換”就屬于這種作弊——創(chuàng )建優(yōu)化頁(yè)面和普通頁(yè)面,然后將優(yōu)化頁(yè)面提交給搜索引擎,當優(yōu)化頁(yè)面被搜索引擎收錄替換它與普通頁(yè)面。
三:誤導或重復關(guān)鍵詞
誤導關(guān)鍵詞(誤導性詞語(yǔ))
在與頁(yè)面無(wú)關(guān)的頁(yè)面中使用誤導性的 關(guān)鍵詞 來(lái)吸引訪(fǎng)問(wèn)者網(wǎng)站 訪(fǎng)問(wèn)該主題。顯然,這些所謂的 關(guān)鍵詞 與這個(gè)頁(yè)面無(wú)關(guān)。這種做法嚴重影響了搜索引擎提供的結果的相關(guān)性和客觀(guān)性,被搜索引擎所憎惡。
重復 關(guān)鍵詞(重復的單??詞)
這種作弊技術(shù)也稱(chēng)為“關(guān)鍵詞Keyword Stuffing”,利用搜索引擎對關(guān)鍵詞出現在網(wǎng)頁(yè)正文和標題中的高度關(guān)注,進(jìn)行關(guān)鍵詞不合理(過(guò)度)重復。其他類(lèi)似的做法包括在 HTML 元標記中填充關(guān)鍵字或使用多個(gè)關(guān)鍵字元標記來(lái)增加 關(guān)鍵詞 的相關(guān)性。這種技術(shù)很容易被搜索引擎檢測到并受到相應的懲罰。
四:隱形頁(yè)面
對實(shí)際訪(fǎng)問(wèn)者或搜索引擎的任何一方隱藏真實(shí)的 網(wǎng)站 內容,以便向搜索引擎提供非真實(shí)的 SEO 友好內容以提高排名。
五:欺騙性重定向
指快速將用戶(hù)訪(fǎng)問(wèn)的第一頁(yè)(著(zhù)陸頁(yè))重定向到內容完全不同的頁(yè)面。
《影子領(lǐng)域》
這是最常見(jiàn)的欺騙性重定向技術(shù),欺騙性地將用戶(hù)重定向到另一個(gè) 網(wǎng)站 或頁(yè)面。一般是通過(guò)使用HTML刷新標記(Meta Refresh)來(lái)實(shí)現的。大多數搜索引擎不會(huì )索引使用此徽標的頁(yè)面。如果您使用刷新標志來(lái)檢測瀏覽器或分辨率,則使用 Javascript 并最大化重定向時(shí)間。如果必須使用重定向功能,請確保刷新周期不少于 10 秒。
另一種情況是當用戶(hù)打開(kāi)一個(gè)網(wǎng)站時(shí),網(wǎng)站聲稱(chēng)自己的網(wǎng)站已經(jīng)移到了一個(gè)新的域名,并要求用戶(hù)點(diǎn)擊新的域名鏈接輸入 網(wǎng)站。但是當用戶(hù)進(jìn)去的時(shí)候,他發(fā)現這個(gè)鏈接是一個(gè)“附屬”鏈接。這也是一個(gè)欺騙性的重定向。
六:門(mén)口頁(yè)
也稱(chēng)為“橋接/門(mén)戶(hù)/跳轉/入口頁(yè)面”。它是針對某些關(guān)鍵字的特制頁(yè)面,專(zhuān)門(mén)為搜索引擎設計的,目的是提高特定關(guān)鍵詞在搜索引擎中的排名。目的豐富的關(guān)鍵詞域名被重定向到另一個(gè)域名的真實(shí)網(wǎng)站。搜索引擎蜘蛛傾向于忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面。
七:復制的網(wǎng)站或網(wǎng)頁(yè)
最常見(jiàn)的是鏡像站點(diǎn)(Mirror Sites)。通過(guò)復制 網(wǎng)站 或頁(yè)面的內容并分配不同的域名和服務(wù)器,它可以欺騙搜索引擎多次索引同一站點(diǎn)或同一頁(yè)面。大多數搜索引擎現在提供能夠檢測鏡像站點(diǎn)的適當過(guò)濾系統。找到鏡像站點(diǎn)后,源站點(diǎn)和鏡像站點(diǎn)都會(huì )從索引數據庫中刪除。
八:作弊鏈接技術(shù)/惡意鏈接(Link Spamming)
典型的作弊鏈接技術(shù)包括:
鏈接農場(chǎng)
批量鏈接交換程序
交叉鏈接
“鏈接工廠(chǎng)”(也稱(chēng)為“海量鏈接機制”)是指由大量交叉鏈接的網(wǎng)頁(yè)組成的網(wǎng)絡(luò )系統。這些網(wǎng)頁(yè)可能來(lái)自同一個(gè)域或多個(gè)不同的域,甚至來(lái)自不同的服務(wù)器。站點(diǎn)加入這樣的“鏈接工廠(chǎng)”后,一方面可以從系統中的所有網(wǎng)頁(yè)獲取鏈接,同時(shí)還需要“捐贈”自己的鏈接作為交換,從而提高通過(guò)這種方法進(jìn)行鏈接評分,從而達到干預鏈接評分。的目標。它們現在很容易被搜索引擎發(fā)現。一經(jīng)發(fā)現,無(wú)論有意還是無(wú)意,“鏈接工廠(chǎng)”中的所有網(wǎng)站都是千絲萬(wàn)縷的鏈接。
九:其他
日志作弊
具有較高頁(yè)面排名的網(wǎng)站通過(guò)對其進(jìn)行大量虛假點(diǎn)擊來(lái)獲取其傳入鏈接,以便在這些網(wǎng)站的頂級引薦來(lái)源日志中列出。Google 知道這種行為,并將對使用此路由獲取傳入鏈接的網(wǎng)站采取適當的措施。
門(mén)口域
目標豐富的關(guān)鍵詞 域旨在提高特定關(guān)鍵詞 在搜索引擎中的排名,然后重定向到其他域的主頁(yè)。由于搜索引擎通常會(huì )忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面檢索,因此不鼓勵使用這種技術(shù)。 查看全部
干貨:wordpress子比主題免費文章批量翻譯工具
wordpress子主題文章翻譯可以讓我們批量對需要翻譯的文章進(jìn)行中英文翻譯,一鍵自動(dòng)發(fā)布到我們對應的欄目。翻譯不僅支持中英文,還支持日文、泰文、阿拉伯文、德文等多種語(yǔ)言。翻譯插件對接百度翻譯、有道翻譯、谷歌翻譯等API。
wordpress子主題文章翻譯插件對接多家大廠(chǎng)翻譯接口,自帶翻譯接口。無(wú)論是文章批量翻譯還是語(yǔ)言之間的來(lái)回翻譯,都可以一鍵點(diǎn)擊,批量操作。WordPress子主題文章翻譯插件支持各類(lèi)cms,不僅WordPress、zblog、易友cms等各類(lèi)cms都可以輕松對接。
WordPress子主題文章翻譯插件支持全網(wǎng)內容采集、批量翻譯、文章偽原創(chuàng )發(fā)布。想象一下使用一個(gè)wordpress子主題文章翻譯插件,導入一個(gè)關(guān)鍵詞列表,然后讓AI翻譯寫(xiě)出我們網(wǎng)站需要的原創(chuàng )文章。

搜索引擎正在識別由人工智能翻譯編寫(xiě)的內容。這包括由人工智能或機器學(xué)習生成的內容。搜索引擎政策更新是為了打擊那些使用人工智能以欺騙搜索引擎算法的方式翻譯書(shū)面內容的人。這種類(lèi)型的內容通常被設計為在搜索結果中排名靠前,但與手工翻譯的內容質(zhì)量不同。
搜索引擎表示,在確定內容是合成的還是操縱的時(shí),它會(huì )考慮許多因素。這包括使用“旋轉”技術(shù)生成相同內容的多個(gè)版本,以及使用人工智能生成旨在欺騙搜索引擎算法的文本??赡軙?huì )對發(fā)現發(fā)布此類(lèi)內容的 網(wǎng)站 采取行動(dòng),包括從搜索結果中刪除。這是打擊那些使用人工智能玩系統的人的重要一步。
毫無(wú)疑問(wèn),人工智能 (AI) 正在徹底改變內容寫(xiě)作領(lǐng)域。然而,人工智能書(shū)面內容的使用增加也可能產(chǎn)生潛在的問(wèn)題。一個(gè)潛在的問(wèn)題是,由 AI 翻譯人員編寫(xiě)的內容可能會(huì )變得過(guò)于公式化和重復。隨著(zhù)人工智能算法變得越來(lái)越復雜,它們將能夠更有效地識別數據中的模式。隨著(zhù)算法識別和復制成功的模式,這可能導致由人工智能翻譯編寫(xiě)的內容變得越來(lái)越公式化。另一個(gè)潛在問(wèn)題是 AI 翻譯人員編寫(xiě)的內容可能是非個(gè)人的。

隨著(zhù) AI 越來(lái)越多地參與到內容翻譯寫(xiě)作過(guò)程中,WordPress 字幕可能會(huì )失去人類(lèi)翻譯寫(xiě)作的溫暖和個(gè)性。最后,人工智能翻譯的內容有可能被用來(lái)操縱公眾輿論。隨著(zhù)人工智能在理解和復制人類(lèi)情感方面變得更好,它可以用來(lái)翻譯為引發(fā)某種情感反應而編寫(xiě)的內容。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,WordPress 子主題越來(lái)越多地使用人工智能來(lái)翻譯可能會(huì )產(chǎn)生潛在問(wèn)題的內容。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果??傮w而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。
技術(shù)文章:谷歌seo特點(diǎn)技巧(網(wǎng)站google搜索優(yōu)化)
如何優(yōu)化谷歌排名?谷歌排名優(yōu)化有哪些網(wǎng)站要求?
中國是外貿出口大國。最近有很多出口企業(yè)問(wèn)我們對谷歌排名優(yōu)化有什么要求?什么是谷歌排名優(yōu)化?哪個(gè)品牌最適合谷歌排名優(yōu)化?下面小編將為您解答這個(gè)問(wèn)題:
疫情影響下,外貿企業(yè)迎難而上,求創(chuàng )新求變,數千家傳統外貿企業(yè)伸出援手,提質(zhì)增效。在客戶(hù)開(kāi)發(fā)和營(yíng)銷(xiāo)方面,外貿企業(yè)利用大數據精準營(yíng)銷(xiāo)工具、B2B平臺、線(xiàn)上展會(huì )等方式,開(kāi)發(fā)、推廣、引流客戶(hù),加速數字化轉型。
優(yōu)易華擁有超過(guò)15年的互聯(lián)網(wǎng)營(yíng)銷(xiāo)經(jīng)驗,讓優(yōu)易華擁有豐富的海外數字營(yíng)銷(xiāo)經(jīng)驗,積累了大量的營(yíng)銷(xiāo)資源。該公司是谷歌認證的合作伙伴,谷歌搜索引擎優(yōu)化是主要項目之一。
谷歌排名優(yōu)化說(shuō)明及詳情:
1、谷歌排名優(yōu)化的最大優(yōu)勢是沒(méi)有各個(gè)引擎的獨立性。即使你只要求優(yōu)化百度,結果在百度、谷歌等各大搜索引擎中都會(huì )有不錯的排名,而SEO只能在一個(gè)搜索引擎中使用。好的排名顯示在網(wǎng)站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都會(huì )有好的排名,從而減少投入和投入。
2. 對于每個(gè)類(lèi)別,列出相關(guān)的 文章。下面我們用問(wèn)答的方式來(lái)說(shuō)明什么是谷歌排名優(yōu)化?如何學(xué)習谷歌排名優(yōu)化?如何進(jìn)行谷歌排名優(yōu)化?將每一頁(yè)的相關(guān)問(wèn)題歸納為兩類(lèi):?jiǎn)?wèn)題大師關(guān)鍵詞的集合列表,以及類(lèi)似問(wèn)題的列表。從根本上說(shuō),它清理了所有相關(guān)的關(guān)鍵詞,讓頁(yè)面有更好的用戶(hù)體驗,讓谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方顯示類(lèi)似的文章,有利于谷歌排名優(yōu)化和推廣,可以打開(kāi)。另外,文章發(fā)布后,相關(guān)的關(guān)鍵詞也可以補充評論功能。與谷歌不同,百度的排名規則以PR值作為明確的標準。但是百度也有一套算法對每個(gè)網(wǎng)站進(jìn)行加權,因為沒(méi)有標準,就沒(méi)有排名的依據。這個(gè)事實(shí)是非常真實(shí)的。因此,在SEO實(shí)踐中,網(wǎng)站獲得更高的PR值,是每個(gè)SEO人追求的目標。但是要獲得高PR值,需要一些高質(zhì)量的反向鏈接或者足夠多的反向鏈接。
4、提高網(wǎng)站的曝光度。如果一個(gè)網(wǎng)站做SEO,你在搜索引擎中的排名就會(huì )上升,更多的人會(huì )點(diǎn)擊你的網(wǎng)站。而且你會(huì )受益于不止一個(gè)搜索引擎,百度、谷歌、雅虎、搜狗等各種搜索引擎一般都有數據展示。作為一名員工,編寫(xiě)觀(guān)眾喜歡的內容并不難。加入谷歌也是考慮這些因素的時(shí)候。一開(kāi)始可能會(huì )很麻煩,但有了這些 SEO 技巧,你很快就會(huì )得到意想不到的結果。
如何優(yōu)化谷歌排名
一:隱藏文字/隱藏鏈接
一般指網(wǎng)頁(yè)專(zhuān)為搜索引擎設計,但普通訪(fǎng)問(wèn)者看不到的文字內容或鏈接。在各種隱藏技術(shù)中,最常見(jiàn)的是將文本或鏈接文本的字體顏色設置為與背景顏色相同或非常接近。
不可見(jiàn)/隱藏文本
目的是在不影響網(wǎng)站美觀(guān)的情況下,增加收錄大量關(guān)鍵詞的頁(yè)面的關(guān)鍵詞相關(guān)性分數,從而提高搜索引擎排名。

不可見(jiàn)/隱藏鏈接
它旨在通過(guò)在不影響 網(wǎng)站 的美觀(guān)性的情況下在其他頁(yè)面上添加指向目標優(yōu)化頁(yè)面的不可見(jiàn)鏈接來(lái)提高鏈接分數,從而提高搜索引擎排名。
大多數搜索引擎現在檢測到隱藏的技術(shù)并認為它們作弊。結果,收錄隱藏文本的網(wǎng)頁(yè)面臨被搜索引擎降級甚至從列表中刪除的懲罰。雖然不乏 網(wǎng)站 Google 員工利用隱形技術(shù)僥幸成功,但大多數人仍然認為不值得冒險。實(shí)際上,通過(guò)添加可視化文本內容并保證一定的關(guān)鍵詞密度,也可以達到同樣的優(yōu)化效果。
2:頁(yè)面與谷歌描述不符
通常發(fā)生在一個(gè)網(wǎng)站被提交給搜索引擎,而網(wǎng)站在網(wǎng)站為收錄之后被另一個(gè)頁(yè)面替換?!罢T餌-&-切換”就屬于這種作弊——創(chuàng )建優(yōu)化頁(yè)面和普通頁(yè)面,然后將優(yōu)化頁(yè)面提交給搜索引擎,當優(yōu)化頁(yè)面被搜索引擎收錄替換它與普通頁(yè)面。
三:誤導或重復關(guān)鍵詞
誤導關(guān)鍵詞(誤導性詞語(yǔ))
在與頁(yè)面無(wú)關(guān)的頁(yè)面中使用誤導性的 關(guān)鍵詞 來(lái)吸引訪(fǎng)問(wèn)者網(wǎng)站 訪(fǎng)問(wèn)該主題。顯然,這些所謂的 關(guān)鍵詞 與這個(gè)頁(yè)面無(wú)關(guān)。這種做法嚴重影響了搜索引擎提供的結果的相關(guān)性和客觀(guān)性,被搜索引擎所憎惡。
重復 關(guān)鍵詞(重復的單??詞)
這種作弊技術(shù)也稱(chēng)為“關(guān)鍵詞Keyword Stuffing”,利用搜索引擎對關(guān)鍵詞出現在網(wǎng)頁(yè)正文和標題中的高度關(guān)注,進(jìn)行關(guān)鍵詞不合理(過(guò)度)重復。其他類(lèi)似的做法包括在 HTML 元標記中填充關(guān)鍵字或使用多個(gè)關(guān)鍵字元標記來(lái)增加 關(guān)鍵詞 的相關(guān)性。這種技術(shù)很容易被搜索引擎檢測到并受到相應的懲罰。
四:隱形頁(yè)面
對實(shí)際訪(fǎng)問(wèn)者或搜索引擎的任何一方隱藏真實(shí)的 網(wǎng)站 內容,以便向搜索引擎提供非真實(shí)的 SEO 友好內容以提高排名。
五:欺騙性重定向
指快速將用戶(hù)訪(fǎng)問(wèn)的第一頁(yè)(著(zhù)陸頁(yè))重定向到內容完全不同的頁(yè)面。
《影子領(lǐng)域》
這是最常見(jiàn)的欺騙性重定向技術(shù),欺騙性地將用戶(hù)重定向到另一個(gè) 網(wǎng)站 或頁(yè)面。一般是通過(guò)使用HTML刷新標記(Meta Refresh)來(lái)實(shí)現的。大多數搜索引擎不會(huì )索引使用此徽標的頁(yè)面。如果您使用刷新標志來(lái)檢測瀏覽器或分辨率,則使用 Javascript 并最大化重定向時(shí)間。如果必須使用重定向功能,請確保刷新周期不少于 10 秒。

另一種情況是當用戶(hù)打開(kāi)一個(gè)網(wǎng)站時(shí),網(wǎng)站聲稱(chēng)自己的網(wǎng)站已經(jīng)移到了一個(gè)新的域名,并要求用戶(hù)點(diǎn)擊新的域名鏈接輸入 網(wǎng)站。但是當用戶(hù)進(jìn)去的時(shí)候,他發(fā)現這個(gè)鏈接是一個(gè)“附屬”鏈接。這也是一個(gè)欺騙性的重定向。
六:門(mén)口頁(yè)
也稱(chēng)為“橋接/門(mén)戶(hù)/跳轉/入口頁(yè)面”。它是針對某些關(guān)鍵字的特制頁(yè)面,專(zhuān)門(mén)為搜索引擎設計的,目的是提高特定關(guān)鍵詞在搜索引擎中的排名。目的豐富的關(guān)鍵詞域名被重定向到另一個(gè)域名的真實(shí)網(wǎng)站。搜索引擎蜘蛛傾向于忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面。
七:復制的網(wǎng)站或網(wǎng)頁(yè)
最常見(jiàn)的是鏡像站點(diǎn)(Mirror Sites)。通過(guò)復制 網(wǎng)站 或頁(yè)面的內容并分配不同的域名和服務(wù)器,它可以欺騙搜索引擎多次索引同一站點(diǎn)或同一頁(yè)面。大多數搜索引擎現在提供能夠檢測鏡像站點(diǎn)的適當過(guò)濾系統。找到鏡像站點(diǎn)后,源站點(diǎn)和鏡像站點(diǎn)都會(huì )從索引數據庫中刪除。
八:作弊鏈接技術(shù)/惡意鏈接(Link Spamming)
典型的作弊鏈接技術(shù)包括:
鏈接農場(chǎng)
批量鏈接交換程序
交叉鏈接
“鏈接工廠(chǎng)”(也稱(chēng)為“海量鏈接機制”)是指由大量交叉鏈接的網(wǎng)頁(yè)組成的網(wǎng)絡(luò )系統。這些網(wǎng)頁(yè)可能來(lái)自同一個(gè)域或多個(gè)不同的域,甚至來(lái)自不同的服務(wù)器。站點(diǎn)加入這樣的“鏈接工廠(chǎng)”后,一方面可以從系統中的所有網(wǎng)頁(yè)獲取鏈接,同時(shí)還需要“捐贈”自己的鏈接作為交換,從而提高通過(guò)這種方法進(jìn)行鏈接評分,從而達到干預鏈接評分。的目標。它們現在很容易被搜索引擎發(fā)現。一經(jīng)發(fā)現,無(wú)論有意還是無(wú)意,“鏈接工廠(chǎng)”中的所有網(wǎng)站都是千絲萬(wàn)縷的鏈接。
九:其他
日志作弊
具有較高頁(yè)面排名的網(wǎng)站通過(guò)對其進(jìn)行大量虛假點(diǎn)擊來(lái)獲取其傳入鏈接,以便在這些網(wǎng)站的頂級引薦來(lái)源日志中列出。Google 知道這種行為,并將對使用此路由獲取傳入鏈接的網(wǎng)站采取適當的措施。
門(mén)口域
目標豐富的關(guān)鍵詞 域旨在提高特定關(guān)鍵詞 在搜索引擎中的排名,然后重定向到其他域的主頁(yè)。由于搜索引擎通常會(huì )忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面檢索,因此不鼓勵使用這種技術(shù)。
解決方案:資源網(wǎng)采集api接口_cochrane library檢索
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-10-03 23:08
資源網(wǎng)采集api接口_cochrane庫檢索記錄Bintray網(wǎng)站Publishing LibraryBintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray上網(wǎng)站 開(kāi)啟。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。目前的androidstudio默認依賴(lài)jcenter庫,但是老版本的androidstudio依賴(lài)mavenC...
大家好,我是建筑師,一個(gè)會(huì )寫(xiě)代碼,會(huì )背詩(shī)的建筑師。今天講資源網(wǎng)采集api接口_cochrane庫檢索,希望能幫助大家提高?。?!
Recording Bintray網(wǎng)站發(fā)布庫
Bintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray網(wǎng)站上。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。
目前的android studio默認依賴(lài)jcenter庫,但是老版本的android studio依賴(lài)mavenCentral庫(因為上傳庫到mavenCentral對大部分開(kāi)發(fā)者來(lái)說(shuō)有點(diǎn)困難,改成jcenter了)。
我們可以在項目的 build.gradle 文件中看到
默認依賴(lài)庫.png
好了,廢話(huà)不多說(shuō),我們開(kāi)始吧。
向 Bintray 注冊一個(gè)帳戶(hù)
我這里使用github賬號直接登錄,但是需要郵箱驗證。注意這里不能使用qq郵箱。網(wǎng)易郵箱注冊可以使用谷歌郵箱。個(gè)人使用的是foxmail(qq郵箱的別稱(chēng))。
注冊成功后是這樣的:
Paste_Image.png
然后我們要創(chuàng )建我們的存儲庫,類(lèi)似于 github 的存儲庫。
創(chuàng )建倉庫.png
然后填寫(xiě)相應的信息就OK了。注意類(lèi)型要選擇maven,如果想讓不在你組織的人使用,需要選擇public。
Paste_Image.png
然后將包添加到存儲庫。用來(lái)存放我們要發(fā)布的jar包。
Paste_Image.png
然后填寫(xiě)相關(guān)信息,如圖:
Paste_Image.png
一旦完成,我們的準備工作就完成了。~
編譯并發(fā)布項目
首先,我們肯定需要一個(gè)已經(jīng)編寫(xiě)好的庫。項目結構如下:
Paste_Image.png
如果沒(méi)有,沒(méi)關(guān)系,我們可以新建一個(gè)庫,全面調試(如果你只是想知道怎么發(fā)布到bintry,在庫里寫(xiě)個(gè)測試方法就行了),把它作為要發(fā)布的jar包。
Paste_Image.png
好了,重頭戲來(lái)了,我們要在android stduio中搭建我們的上傳環(huán)境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只聽(tīng)到建筑師辦公室傳來(lái)建筑師的聲音:
此水何時(shí)止,此恨何時(shí)止?誰(shuí)將向上或向下匹配?
文件中的位置如圖: 注意這里可能存在版本問(wèn)題。如果版本錯誤,請嘗試使用最新版本。
Paste_Image.png
此代碼由Java架構師必看網(wǎng)-架構君整理
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上時(shí),只需要修改這里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 項目的主頁(yè)
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' //填寫(xiě)的一些基本信息(也可以不填)
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"//這個(gè)地方一定要填,一定要填 ?。。ㄟ@里需要修改你申請賬號是的組織id)
repo = "Maven"//發(fā)布到bintray上的倉庫名
name = "CheckEditText" //發(fā)布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8編碼否則會(huì )報“GBK的不可映射字符”錯誤
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
這里需要說(shuō)明一下:
所需的更改是:
Paste_Image.png
userOrg 填寫(xiě)你的組織ID,可以在如圖所示界面找到可信信息。
Paste_Image.png
repo 填寫(xiě)你的倉庫名稱(chēng),name 填寫(xiě)你的包名,可以找到對應的信息如圖。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我們需要在項目的local.properties中填寫(xiě)我們的身份信息。將以下兩句話(huà)添加到我們的目錄中:
此代碼由Java架構師必看網(wǎng)-架構君整理
bintray.user=用戶(hù)名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用戶(hù)名可以在這里找到
Paste_Image.png
在這里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我們離成功也不遠了。
接下來(lái)在終端輸入命令:
gradlew install
如果沒(méi)有報錯,會(huì )提示BUILD SUCCESSEUL,然后我們輸入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去網(wǎng)站看看~:
Paste_Image.png
將依賴(lài)項添加到項目中
發(fā)布后,我們可以將其引入到我們的項目中。
在要導入項目的build.gradle目錄下,添加依賴(lài):
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我們的組織地址。
Paste_Image.png
然后,在我們要依賴(lài)的模塊下,添加我們需要的依賴(lài),例如:
Paste_Image.png
這可以在這里找到:
Paste_Image.png
然后就可以使用我們之前寫(xiě)的函數了~??!.
簡(jiǎn)單的發(fā)布寫(xiě)作
將以下內容添加到 -root build.gradle 中的依賴(lài)項塊中:
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
添加到要發(fā)布的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 如果有組織就是組織名,反之用戶(hù)名
repoName = 'maven' //倉庫名
uploadName = 'GameSDK' //項目名
groupId = 'com.test' //compile引用時(shí)的第1部分groupId
artifactId = 'game-sdk' //compile引用時(shí)的第2部分項目名
publishVersion = '1.0.0' //compile引用時(shí)的第3部分版本號
desc = 'This is a game sdk extend library'
website = '網(wǎng)站網(wǎng)址或者github地址'
licences = ['Apache-2.0']
}
生成后的依賴(lài)地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:發(fā)布成功后:
* 1、在要引入項目的 build.gradle目錄下,添加依賴(lài):
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路徑{https://xxxx.bintray.com/maven},在未將library加入的jcenter中前,這是必須的
//userOrg 如果有組織就是組織名,反之用戶(hù)名
* }
*
* 2、在dependencies中添加依賴(lài):
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包發(fā)布后,仍然可以這樣寫(xiě):
gradlew clean build bintrayUpload -PbintrayUser=用戶(hù)名 -PbintrayKey=apiKey -PdryRun=false
我想你會(huì )喜歡:
解決方案:關(guān)鍵詞提取軟件下載(關(guān)鍵詞提取器)
優(yōu)采云采集器是網(wǎng)站采集大家最喜歡的工具,但是優(yōu)采云采集器在免費版中并沒(méi)有很多功能,除了支持關(guān)鍵詞采集中文文章和自動(dòng)發(fā)布功能,不能提供批量采集偽原創(chuàng )發(fā)布等完整的采集流程,不能同時(shí)一個(gè)-點(diǎn)擊批量自動(dòng)百度、神馬、360、搜狗等搜索引擎推送。
無(wú)論你有成百上千個(gè)不同的免費采集器網(wǎng)站還是其他網(wǎng)站都可以實(shí)現統一管理。一個(gè)人使用免費的采集器做網(wǎng)站優(yōu)化維護上百個(gè)網(wǎng)站文章更新不是問(wèn)題,有哪些細節需要注意。
一、域名
域名就像一個(gè)人的名字。簡(jiǎn)單好記的名字容易讓人記住,復雜的名字難記。域名也是如此,所以針對網(wǎng)站優(yōu)化了一個(gè)簡(jiǎn)單易記的域名,好在用戶(hù)想訪(fǎng)問(wèn)你的網(wǎng)站時(shí),不需要去百度搜索,他們可以通過(guò)輸入域名直接訪(fǎng)問(wèn)你的網(wǎng)站。免費采集器可以批量監控管理不同的cms網(wǎng)站數據(無(wú)論你的網(wǎng)站是Empire, Yiyou, ZBLOG, 織夢(mèng), WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同時(shí)批處理工具來(lái)管理 采集偽原創(chuàng ) 并發(fā)布推送)。
二、空間
空間是存儲網(wǎng)站 程序文件的地方??臻g打開(kāi)越快,空間越穩定,網(wǎng)站用戶(hù)瀏覽體驗自然會(huì )更好。更快的速度和更穩定的空間對于網(wǎng)站來(lái)說(shuō)很重要,優(yōu)化排名極其重要。免費采集器可以設置批量發(fā)布次數(可以設置發(fā)布間隔/單日發(fā)布總數)。
三、網(wǎng)頁(yè)上的三大標簽
1)標題標簽
網(wǎng)頁(yè)有標題標簽。搜索蜘蛛在抓取網(wǎng)頁(yè)內容時(shí),首先抓取的是網(wǎng)頁(yè)標題標簽的內容,而網(wǎng)頁(yè)標題標簽的內容可以參與搜索結果的排名。我們通常所說(shuō)的關(guān)鍵詞排名指的是標題標簽排名,而不是關(guān)鍵詞標簽排名,所以頁(yè)面標題標簽的內容很重要。免費 采集器 使內容與標題一致(使內容與標題相關(guān)性一致)。根據關(guān)鍵詞采集文章,通過(guò)免費的采集器采集填充內容。(免費的 采集器采集 插件還配置了 關(guān)鍵詞采集 功能和無(wú)關(guān)的詞塊功能)。注意不要出錯,否則會(huì )被搜索引擎懲罰。
2)關(guān)鍵詞標簽
免費采集器可以提高關(guān)鍵詞密度和頁(yè)面原創(chuàng )度,增加用戶(hù)體驗,實(shí)現優(yōu)質(zhì)內容。
關(guān)鍵詞標簽的內容不參與排名,部分站長(cháng)朋友認為不需要寫(xiě)。免費采集器插入內容的能力關(guān)鍵詞(合理增加關(guān)鍵詞密度)。雖然這個(gè)標簽不涉及排名,但我們仍然需要維護這個(gè)標簽內容的完整性。百度搜索在相關(guān)算法中也有提及。建議你寫(xiě)下這個(gè)標簽的內容,以免被百度搜索命中。
3)描述標簽
描述標簽寫(xiě)入當前網(wǎng)頁(yè)的一般內容。簡(jiǎn)而言之,就是對當前網(wǎng)頁(yè)內容的介紹。一個(gè)好的網(wǎng)頁(yè)描述也可以吸引用戶(hù)點(diǎn)擊該網(wǎng)頁(yè)的網(wǎng)頁(yè),描述標簽的內容也可以參與排名。
4)alt 標簽
alt標簽是圖片的專(zhuān)屬標簽,因為搜索蜘蛛不能直接識別圖片,所以只能通過(guò)alt標簽的內容來(lái)識別圖片。alt標簽的內容只需要簡(jiǎn)單的告訴搜索蜘蛛圖片的內容,不要在alt標簽>里面堆關(guān)鍵詞,否則會(huì )影響搜索蜘蛛對網(wǎng)頁(yè)的評分。
5)機器人,txt 文件
網(wǎng)站機器人,txt文件是網(wǎng)站和搜索引擎之間的協(xié)議文件,用來(lái)告訴搜索蜘蛛網(wǎng)站可以抓取哪些頁(yè)面。免費采集器隨機圖片插入(文章如果沒(méi)有圖片可以隨機插入相關(guān)圖片)。哪些頁(yè)面不能被爬取,可以有效保護網(wǎng)站隱私頁(yè)面,提高網(wǎng)站的安全性。
6)nofollow 標簽
免費采集器可以支持多個(gè)采集來(lái)源采集(涵蓋所有行業(yè)新聞來(lái)源,內容庫海量每天都有新內容,采集新內容)。nofollow 標簽通常應用于出站鏈接。站內鏈接很少用于告訴蜘蛛該鏈接是非信任鏈接并且不傳遞權重。
7)網(wǎng)站網(wǎng)站地圖
免費的采集器可以推送到搜索引擎(文章發(fā)布成功后主動(dòng)推送文章到搜索引擎,保證新鏈接及時(shí)被搜索引擎搜索到收錄 )。網(wǎng)站sitemap地圖有利于提高搜索蜘蛛的網(wǎng)站頁(yè)面的爬取率,所有網(wǎng)站頁(yè)面的鏈接都集中在這個(gè)文件中,可以幫助搜索蜘蛛快速爬取整個(gè)網(wǎng)站頁(yè)面。免費的采集器可以定時(shí)發(fā)布(定時(shí)發(fā)布網(wǎng)站內容可以讓搜索引擎養成定時(shí)抓取網(wǎng)頁(yè)的習慣,從而提高網(wǎng)站的收錄)。
搜索蜘蛛爬行網(wǎng)站,第一個(gè)訪(fǎng)問(wèn)的文件是robots文件,我們可以在robots文件中寫(xiě)網(wǎng)站站點(diǎn)地圖地圖,搜索蜘蛛會(huì )沿著(zhù)網(wǎng)站地圖文件爬行網(wǎng)站 頁(yè)面。每日蜘蛛、收錄、網(wǎng)站權重可以通過(guò)免費的采集器直接查看。
8)鏈接
免費的采集器可以發(fā)布也可以配置很多SEO功能,不僅可以通過(guò)免費的采集器發(fā)布實(shí)現采集偽原創(chuàng )的發(fā)布和主動(dòng)推送到搜索引擎,還可以有很多搜索引擎優(yōu)化功能。與相關(guān)行業(yè)的高權重網(wǎng)站交換友情鏈接,可以增加網(wǎng)站的PR值,給網(wǎng)站帶來(lái)一定的流量,提高搜索引擎對你的興趣網(wǎng)站頁(yè)面的收錄速率。免費采集器自動(dòng)批量掛機采集偽原創(chuàng )自動(dòng)發(fā)布推送到搜索引擎。
9)外部鏈接
免費采集器可以直接監控已發(fā)布、待發(fā)布、偽原創(chuàng )、發(fā)布狀態(tài)、URL、程序、發(fā)布時(shí)間等。外部鏈接是給別人留下自己的網(wǎng)站鏈接網(wǎng)站。外鏈對于新站優(yōu)化初期非常重要,外鏈的好壞直接影響搜索引擎中的網(wǎng)站。的評分。免費的采集器可以自動(dòng)內鏈(在執行發(fā)布任務(wù)時(shí)自動(dòng)在文章內容中生成內鏈,有利于引導頁(yè)面蜘蛛抓取,提高頁(yè)面權限)。
10)404 錯誤頁(yè)面
免費的采集器提供偽原創(chuàng )保留字(文章原創(chuàng )時(shí)偽原創(chuàng )不設置核心字)。網(wǎng)站修改、破解代碼或其他原因導致網(wǎng)站中出現大量死鏈接。這時(shí)候,404錯誤頁(yè)面就派上用場(chǎng)了。404錯誤頁(yè)面向搜索引擎返回一個(gè)404狀態(tài)碼,可以幫助搜索引擎快速去除死鏈接頁(yè)面。
今天關(guān)于免費采集器的解釋就到這里了。下期我會(huì )分享更多的SEO相關(guān)知識。希望你能通過(guò)我的文章得到你想要的,下期再見(jiàn)。 查看全部
解決方案:資源網(wǎng)采集api接口_cochrane library檢索
資源網(wǎng)采集api接口_cochrane庫檢索記錄Bintray網(wǎng)站Publishing LibraryBintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray上網(wǎng)站 開(kāi)啟。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。目前的androidstudio默認依賴(lài)jcenter庫,但是老版本的androidstudio依賴(lài)mavenC...
大家好,我是建筑師,一個(gè)會(huì )寫(xiě)代碼,會(huì )背詩(shī)的建筑師。今天講資源網(wǎng)采集api接口_cochrane庫檢索,希望能幫助大家提高?。?!
Recording Bintray網(wǎng)站發(fā)布庫
Bintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray網(wǎng)站上。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。
目前的android studio默認依賴(lài)jcenter庫,但是老版本的android studio依賴(lài)mavenCentral庫(因為上傳庫到mavenCentral對大部分開(kāi)發(fā)者來(lái)說(shuō)有點(diǎn)困難,改成jcenter了)。
我們可以在項目的 build.gradle 文件中看到
默認依賴(lài)庫.png
好了,廢話(huà)不多說(shuō),我們開(kāi)始吧。
向 Bintray 注冊一個(gè)帳戶(hù)
我這里使用github賬號直接登錄,但是需要郵箱驗證。注意這里不能使用qq郵箱。網(wǎng)易郵箱注冊可以使用谷歌郵箱。個(gè)人使用的是foxmail(qq郵箱的別稱(chēng))。
注冊成功后是這樣的:
Paste_Image.png
然后我們要創(chuàng )建我們的存儲庫,類(lèi)似于 github 的存儲庫。
創(chuàng )建倉庫.png
然后填寫(xiě)相應的信息就OK了。注意類(lèi)型要選擇maven,如果想讓不在你組織的人使用,需要選擇public。
Paste_Image.png
然后將包添加到存儲庫。用來(lái)存放我們要發(fā)布的jar包。
Paste_Image.png
然后填寫(xiě)相關(guān)信息,如圖:
Paste_Image.png
一旦完成,我們的準備工作就完成了。~
編譯并發(fā)布項目
首先,我們肯定需要一個(gè)已經(jīng)編寫(xiě)好的庫。項目結構如下:
Paste_Image.png
如果沒(méi)有,沒(méi)關(guān)系,我們可以新建一個(gè)庫,全面調試(如果你只是想知道怎么發(fā)布到bintry,在庫里寫(xiě)個(gè)測試方法就行了),把它作為要發(fā)布的jar包。
Paste_Image.png
好了,重頭戲來(lái)了,我們要在android stduio中搭建我們的上傳環(huán)境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只聽(tīng)到建筑師辦公室傳來(lái)建筑師的聲音:
此水何時(shí)止,此恨何時(shí)止?誰(shuí)將向上或向下匹配?
文件中的位置如圖: 注意這里可能存在版本問(wèn)題。如果版本錯誤,請嘗試使用最新版本。
Paste_Image.png
此代碼由Java架構師必看網(wǎng)-架構君整理
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上時(shí),只需要修改這里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 項目的主頁(yè)
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' //填寫(xiě)的一些基本信息(也可以不填)
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"//這個(gè)地方一定要填,一定要填 ?。。ㄟ@里需要修改你申請賬號是的組織id)
repo = "Maven"//發(fā)布到bintray上的倉庫名
name = "CheckEditText" //發(fā)布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8編碼否則會(huì )報“GBK的不可映射字符”錯誤
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
這里需要說(shuō)明一下:
所需的更改是:
Paste_Image.png
userOrg 填寫(xiě)你的組織ID,可以在如圖所示界面找到可信信息。
Paste_Image.png
repo 填寫(xiě)你的倉庫名稱(chēng),name 填寫(xiě)你的包名,可以找到對應的信息如圖。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我們需要在項目的local.properties中填寫(xiě)我們的身份信息。將以下兩句話(huà)添加到我們的目錄中:
此代碼由Java架構師必看網(wǎng)-架構君整理
bintray.user=用戶(hù)名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用戶(hù)名可以在這里找到
Paste_Image.png
在這里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我們離成功也不遠了。
接下來(lái)在終端輸入命令:
gradlew install
如果沒(méi)有報錯,會(huì )提示BUILD SUCCESSEUL,然后我們輸入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去網(wǎng)站看看~:
Paste_Image.png

將依賴(lài)項添加到項目中
發(fā)布后,我們可以將其引入到我們的項目中。
在要導入項目的build.gradle目錄下,添加依賴(lài):
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我們的組織地址。
Paste_Image.png
然后,在我們要依賴(lài)的模塊下,添加我們需要的依賴(lài),例如:
Paste_Image.png
這可以在這里找到:
Paste_Image.png
然后就可以使用我們之前寫(xiě)的函數了~??!.
簡(jiǎn)單的發(fā)布寫(xiě)作
將以下內容添加到 -root build.gradle 中的依賴(lài)項塊中:
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
添加到要發(fā)布的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 如果有組織就是組織名,反之用戶(hù)名
repoName = 'maven' //倉庫名
uploadName = 'GameSDK' //項目名
groupId = 'com.test' //compile引用時(shí)的第1部分groupId
artifactId = 'game-sdk' //compile引用時(shí)的第2部分項目名
publishVersion = '1.0.0' //compile引用時(shí)的第3部分版本號
desc = 'This is a game sdk extend library'
website = '網(wǎng)站網(wǎng)址或者github地址'
licences = ['Apache-2.0']
}
生成后的依賴(lài)地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:發(fā)布成功后:
* 1、在要引入項目的 build.gradle目錄下,添加依賴(lài):
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路徑{https://xxxx.bintray.com/maven},在未將library加入的jcenter中前,這是必須的
//userOrg 如果有組織就是組織名,反之用戶(hù)名
* }
*
* 2、在dependencies中添加依賴(lài):
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包發(fā)布后,仍然可以這樣寫(xiě):
gradlew clean build bintrayUpload -PbintrayUser=用戶(hù)名 -PbintrayKey=apiKey -PdryRun=false
我想你會(huì )喜歡:
解決方案:關(guān)鍵詞提取軟件下載(關(guān)鍵詞提取器)
優(yōu)采云采集器是網(wǎng)站采集大家最喜歡的工具,但是優(yōu)采云采集器在免費版中并沒(méi)有很多功能,除了支持關(guān)鍵詞采集中文文章和自動(dòng)發(fā)布功能,不能提供批量采集偽原創(chuàng )發(fā)布等完整的采集流程,不能同時(shí)一個(gè)-點(diǎn)擊批量自動(dòng)百度、神馬、360、搜狗等搜索引擎推送。
無(wú)論你有成百上千個(gè)不同的免費采集器網(wǎng)站還是其他網(wǎng)站都可以實(shí)現統一管理。一個(gè)人使用免費的采集器做網(wǎng)站優(yōu)化維護上百個(gè)網(wǎng)站文章更新不是問(wèn)題,有哪些細節需要注意。
一、域名
域名就像一個(gè)人的名字。簡(jiǎn)單好記的名字容易讓人記住,復雜的名字難記。域名也是如此,所以針對網(wǎng)站優(yōu)化了一個(gè)簡(jiǎn)單易記的域名,好在用戶(hù)想訪(fǎng)問(wèn)你的網(wǎng)站時(shí),不需要去百度搜索,他們可以通過(guò)輸入域名直接訪(fǎng)問(wèn)你的網(wǎng)站。免費采集器可以批量監控管理不同的cms網(wǎng)站數據(無(wú)論你的網(wǎng)站是Empire, Yiyou, ZBLOG, 織夢(mèng), WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同時(shí)批處理工具來(lái)管理 采集偽原創(chuàng ) 并發(fā)布推送)。
二、空間
空間是存儲網(wǎng)站 程序文件的地方??臻g打開(kāi)越快,空間越穩定,網(wǎng)站用戶(hù)瀏覽體驗自然會(huì )更好。更快的速度和更穩定的空間對于網(wǎng)站來(lái)說(shuō)很重要,優(yōu)化排名極其重要。免費采集器可以設置批量發(fā)布次數(可以設置發(fā)布間隔/單日發(fā)布總數)。
三、網(wǎng)頁(yè)上的三大標簽
1)標題標簽
網(wǎng)頁(yè)有標題標簽。搜索蜘蛛在抓取網(wǎng)頁(yè)內容時(shí),首先抓取的是網(wǎng)頁(yè)標題標簽的內容,而網(wǎng)頁(yè)標題標簽的內容可以參與搜索結果的排名。我們通常所說(shuō)的關(guān)鍵詞排名指的是標題標簽排名,而不是關(guān)鍵詞標簽排名,所以頁(yè)面標題標簽的內容很重要。免費 采集器 使內容與標題一致(使內容與標題相關(guān)性一致)。根據關(guān)鍵詞采集文章,通過(guò)免費的采集器采集填充內容。(免費的 采集器采集 插件還配置了 關(guān)鍵詞采集 功能和無(wú)關(guān)的詞塊功能)。注意不要出錯,否則會(huì )被搜索引擎懲罰。

2)關(guān)鍵詞標簽
免費采集器可以提高關(guān)鍵詞密度和頁(yè)面原創(chuàng )度,增加用戶(hù)體驗,實(shí)現優(yōu)質(zhì)內容。
關(guān)鍵詞標簽的內容不參與排名,部分站長(cháng)朋友認為不需要寫(xiě)。免費采集器插入內容的能力關(guān)鍵詞(合理增加關(guān)鍵詞密度)。雖然這個(gè)標簽不涉及排名,但我們仍然需要維護這個(gè)標簽內容的完整性。百度搜索在相關(guān)算法中也有提及。建議你寫(xiě)下這個(gè)標簽的內容,以免被百度搜索命中。
3)描述標簽
描述標簽寫(xiě)入當前網(wǎng)頁(yè)的一般內容。簡(jiǎn)而言之,就是對當前網(wǎng)頁(yè)內容的介紹。一個(gè)好的網(wǎng)頁(yè)描述也可以吸引用戶(hù)點(diǎn)擊該網(wǎng)頁(yè)的網(wǎng)頁(yè),描述標簽的內容也可以參與排名。
4)alt 標簽
alt標簽是圖片的專(zhuān)屬標簽,因為搜索蜘蛛不能直接識別圖片,所以只能通過(guò)alt標簽的內容來(lái)識別圖片。alt標簽的內容只需要簡(jiǎn)單的告訴搜索蜘蛛圖片的內容,不要在alt標簽>里面堆關(guān)鍵詞,否則會(huì )影響搜索蜘蛛對網(wǎng)頁(yè)的評分。
5)機器人,txt 文件
網(wǎng)站機器人,txt文件是網(wǎng)站和搜索引擎之間的協(xié)議文件,用來(lái)告訴搜索蜘蛛網(wǎng)站可以抓取哪些頁(yè)面。免費采集器隨機圖片插入(文章如果沒(méi)有圖片可以隨機插入相關(guān)圖片)。哪些頁(yè)面不能被爬取,可以有效保護網(wǎng)站隱私頁(yè)面,提高網(wǎng)站的安全性。
6)nofollow 標簽
免費采集器可以支持多個(gè)采集來(lái)源采集(涵蓋所有行業(yè)新聞來(lái)源,內容庫海量每天都有新內容,采集新內容)。nofollow 標簽通常應用于出站鏈接。站內鏈接很少用于告訴蜘蛛該鏈接是非信任鏈接并且不傳遞權重。
7)網(wǎng)站網(wǎng)站地圖

免費的采集器可以推送到搜索引擎(文章發(fā)布成功后主動(dòng)推送文章到搜索引擎,保證新鏈接及時(shí)被搜索引擎搜索到收錄 )。網(wǎng)站sitemap地圖有利于提高搜索蜘蛛的網(wǎng)站頁(yè)面的爬取率,所有網(wǎng)站頁(yè)面的鏈接都集中在這個(gè)文件中,可以幫助搜索蜘蛛快速爬取整個(gè)網(wǎng)站頁(yè)面。免費的采集器可以定時(shí)發(fā)布(定時(shí)發(fā)布網(wǎng)站內容可以讓搜索引擎養成定時(shí)抓取網(wǎng)頁(yè)的習慣,從而提高網(wǎng)站的收錄)。
搜索蜘蛛爬行網(wǎng)站,第一個(gè)訪(fǎng)問(wèn)的文件是robots文件,我們可以在robots文件中寫(xiě)網(wǎng)站站點(diǎn)地圖地圖,搜索蜘蛛會(huì )沿著(zhù)網(wǎng)站地圖文件爬行網(wǎng)站 頁(yè)面。每日蜘蛛、收錄、網(wǎng)站權重可以通過(guò)免費的采集器直接查看。
8)鏈接
免費的采集器可以發(fā)布也可以配置很多SEO功能,不僅可以通過(guò)免費的采集器發(fā)布實(shí)現采集偽原創(chuàng )的發(fā)布和主動(dòng)推送到搜索引擎,還可以有很多搜索引擎優(yōu)化功能。與相關(guān)行業(yè)的高權重網(wǎng)站交換友情鏈接,可以增加網(wǎng)站的PR值,給網(wǎng)站帶來(lái)一定的流量,提高搜索引擎對你的興趣網(wǎng)站頁(yè)面的收錄速率。免費采集器自動(dòng)批量掛機采集偽原創(chuàng )自動(dòng)發(fā)布推送到搜索引擎。
9)外部鏈接
免費采集器可以直接監控已發(fā)布、待發(fā)布、偽原創(chuàng )、發(fā)布狀態(tài)、URL、程序、發(fā)布時(shí)間等。外部鏈接是給別人留下自己的網(wǎng)站鏈接網(wǎng)站。外鏈對于新站優(yōu)化初期非常重要,外鏈的好壞直接影響搜索引擎中的網(wǎng)站。的評分。免費的采集器可以自動(dòng)內鏈(在執行發(fā)布任務(wù)時(shí)自動(dòng)在文章內容中生成內鏈,有利于引導頁(yè)面蜘蛛抓取,提高頁(yè)面權限)。
10)404 錯誤頁(yè)面
免費的采集器提供偽原創(chuàng )保留字(文章原創(chuàng )時(shí)偽原創(chuàng )不設置核心字)。網(wǎng)站修改、破解代碼或其他原因導致網(wǎng)站中出現大量死鏈接。這時(shí)候,404錯誤頁(yè)面就派上用場(chǎng)了。404錯誤頁(yè)面向搜索引擎返回一個(gè)404狀態(tài)碼,可以幫助搜索引擎快速去除死鏈接頁(yè)面。
今天關(guān)于免費采集器的解釋就到這里了。下期我會(huì )分享更多的SEO相關(guān)知識。希望你能通過(guò)我的文章得到你想要的,下期再見(jiàn)。
完整解決方案:支持推薦應用的PaaS平臺4A能力組件
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 170 次瀏覽 ? 2022-10-03 04:46
平臺即服務(wù)(PaaS,platform as a service)作為云計算的一種應用形式,為應用開(kāi)發(fā)者提供高效、安全的應用托管能力[]。隨著(zhù)PaaS云平臺的不斷發(fā)展,平臺能力的豐富性和多樣化已經(jīng)成為PaaS平臺的核心競爭點(diǎn)和關(guān)鍵指標[]。所謂平臺的“能力組件”,主要是指PaaS平臺提供的、可供平臺上其他應用調用的軟件能力。4A是Authentication(認證)。)、Authorization(認證)、Accounting(計費)和Audit(審計)的縮寫(xiě),4A為用戶(hù)提供統一的用戶(hù)身份認證管理,應用訪(fǎng)問(wèn)(access)權限控制,記賬和賬戶(hù)管理,以及基于操作的日志審計等功能。通過(guò)分析PaaS平臺上的應用[-]可以發(fā)現,很多應用都需要基本的4A能力,比如用戶(hù)信息管理、賬戶(hù)管理等。因此,4A能力組件正是在PaaS云平臺中??芍赜玫闹匾M件之一,可有效減少應用程序開(kāi)發(fā)量,增加軟件資產(chǎn)的重用性。同時(shí),豐富強大的平臺能力也可以讓平臺上的應用擁有更豐富、更強大的功能,提高應用競爭力。. 4A能力組件在提供4A能力的同時(shí),還為用戶(hù)提供單點(diǎn)登錄(SSO,single sign on)功能,方便用戶(hù)在各種應用之間無(wú)縫切換,一站式滿(mǎn)足用戶(hù)和應用的需求。提供統一認證、認證管理、賬號管理、審計管理、SSO等功能需求。
1 4A能力組件需求分析
4A能力組件為用戶(hù)提供用戶(hù)注冊、密碼找回、信息管理、計費管理等賬戶(hù)管理相關(guān)功能,提供統一的認證服務(wù),為不同的應用提供認證管理,提供用戶(hù)行為信息的審計管理,支持單點(diǎn)登錄和其他功能。
4A能力組件的應用對象是PaaS云中的應用開(kāi)發(fā)者、應用用戶(hù)和管理員。4A能力組件為應用開(kāi)發(fā)者提供了一個(gè)簡(jiǎn)單、安全、高效的接口,方便開(kāi)發(fā)者使用。為保證一站式服務(wù)用戶(hù)體驗,4A能力組件為應用用戶(hù)和管理員提供用戶(hù)入口和管理員入口,完成對用戶(hù)信息和應用信息的管理。
4A組件的功能主要包括賬戶(hù)管理、認證管理、認證管理、審計管理和SSO。
1) 賬戶(hù)管理:賬戶(hù)管理分為三個(gè)部分。一是基本賬戶(hù)管理,包括用戶(hù)注冊、找回密碼、修改密碼等;二是用戶(hù)信息管理,包括基本用戶(hù)信息(基本用戶(hù)信息、用戶(hù)分機信息和用戶(hù)權限信息)和好友信息(好友信息、朋友關(guān)系和朋友組)。最后是賬單信息,包括用戶(hù)余額和交易詳情。
2) 統一認證:統一認證用于判斷用戶(hù)是否合法。認證過(guò)程通過(guò) OAuth2.0 協(xié)議實(shí)現。應用開(kāi)發(fā)者在使用能力組件提供的開(kāi)放接口之前,需要獲取用戶(hù)的授權憑證access_token。. access_token 是第三方訪(fǎng)問(wèn)用戶(hù)資源的憑證。只有通過(guò)這個(gè)憑證,第三方應用程序才能訪(fǎng)問(wèn) 4A 能力組件中的數據。
3) 應用認證:只有經(jīng)過(guò)系統授權的應用才能獲取用戶(hù)信息。當應用通過(guò)4A能力組件獲取用戶(hù)信息時(shí),會(huì )對第三方應用進(jìn)行授權檢查,未經(jīng)授權的應用不會(huì )獲取任何用戶(hù)信息。
4)系統審計:4A能力組件通過(guò)日志系統記錄用戶(hù)行為和系統操作信息,完成相關(guān)日志的采集、存儲和分析。
5) SSO:SSO 是一種流行的系統集成解決方案。SSO可以保證在多個(gè)應用系統中,用戶(hù)只需要登錄一次就可以訪(fǎng)問(wèn)所有相互信任的應用系統。
2 4A 能力組件設計2.1 系統架構
系統架構圖如圖所示。該系統分為三個(gè)部分。最上層是Web服務(wù)層,即接口服務(wù)器(API Server)和與開(kāi)發(fā)者、用戶(hù)和管理員交互的Web接口。Web服務(wù)層主要負責管理員門(mén)戶(hù),特別是4A能力組件將用戶(hù)門(mén)戶(hù)作為能力組件的第三方應用,不與管理員門(mén)戶(hù)在同一層。. 這是因為管理員門(mén)戶(hù)需要更高的權限,開(kāi)放API不提供相關(guān)功能,調用開(kāi)放API也會(huì )造成效率下降。中間是邏輯功能層,主要完成系統中所有邏輯功能的實(shí)現,包括賬戶(hù)管理、統一認證[]、應用認證、系統審計和SSO[]等。系統的底層是基礎組件層,包括基礎組件和支撐組件?;A組件是系統運行的必備組件,主要包括MySQL、NFS和郵件服務(wù)等。支持組件是支持系統運行的可選組件,主要包括日志系統等。下面將重點(diǎn)介紹日志系統和接口服務(wù)器。
圖1
圖1
圖1 4A能力組件系統架構圖
2.2 日志系統
日志系統是4A能力組件的支撐組件,負責在4A能力組件中記錄用戶(hù)的行為信息,并與4A能力組件中的審計模塊相關(guān)聯(lián)。其系統架構如下圖所示。
圖 2
圖 2
圖2 日志系統架構圖
日志系統支持采集,海量日志數據的存儲和分析。系統提供高性能的日志讀寫(xiě),包括實(shí)時(shí)讀取最新日志和批量讀取歷史數據。日志系統由Kafka分布式消息隊列、HBase分布式數據庫、生產(chǎn)者程序和消費者程序[]組成。生產(chǎn)者程序是4A能力組件中的一個(gè)審計模塊,可以為用戶(hù)提供用戶(hù)行為數據。消費者程序是一個(gè)基于HTTP協(xié)議的API服務(wù)器,日志系統通過(guò)API向4A能力組件提供各種日志信息。
2.3 API 服務(wù)器
4A能力組件提供的開(kāi)放API由4A能力組件中Web服務(wù)層的API Server提供。
2.3.1 API 設計
根據4A能力組件的開(kāi)發(fā)者需求,開(kāi)放API定義為兩類(lèi):
1)用戶(hù)級API:OAuth2.0登錄的用戶(hù),必須攜帶access_token參數。用戶(hù)級 API 主要用于訪(fǎng)問(wèn)個(gè)人用戶(hù)信息。
2)應用級API:用于不使用OAuth2.0登錄并已授權的第三方應用。應用程序級 API 將具有參數 source 而不是參數 access_token。參數 source 是 4A 能力的一個(gè)組成部分 管理員分配給應用的唯一 ID。
根據系統功能,API分為以下7類(lèi):
1) 身份驗證 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用戶(hù)關(guān)系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 組 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用戶(hù)信息 API:/api/users/" target="_blank">/api/users/。
5) 帳戶(hù) 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安全解決方案
為了保證用戶(hù)信息的安全可靠,用戶(hù)級API和應用級API采用不同的安全方案。
1) 用戶(hù)級 API
用戶(hù)級 API 使用 access_token 是否過(guò)期或有效來(lái)判斷用戶(hù)的真實(shí)性,并返回相應的數據。用戶(hù)的access_token僅在用戶(hù)登錄期間有效,有效期為24小時(shí)。
對于OAuth2.0相關(guān)的API,還增加了以下安全措施:
?、?OAuth2.0 獲取參數代碼時(shí),可以添加參數狀態(tài),維護請求和回調的狀態(tài)。當4A能力組件重定向到應用程序時(shí),將返回該參數。開(kāi)發(fā)者可以通過(guò)該參數驗證請求的有效性,從而防止跨站請求偽造攻擊。
?、?OAuth2.0通過(guò)參數code獲取參數access_token時(shí),盡量選擇HTTP協(xié)議的POST方式傳輸請求。
2) 應用程序級 API
應用級API只傳遞參數源作為應用身份的認證是不安全的,所以4A能力組件使用參數簽名來(lái)保護用戶(hù)信息。構造參數簽名的過(guò)程如下:
?、俜诸?lèi)參數:API中攜帶的參數分為系統參數和非系統參數。系統參數包括應用ID(參數來(lái)源)和應用密鑰(與參數來(lái)源唯一匹配)。非系統參數是除系統參數外的所有參數。范圍。
?、?構造源字符串:將所有非系統參數和參數源按名稱(chēng)值升序排列,并用“&”連接,如k1=v1 & k2=v2 & ...,然后執行第一個(gè)MD5加密。
?、?構造密鑰:在應用密鑰末尾添加字符“&”。
?、?生成簽名值簽名:將源字符串和密鑰以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一個(gè)新的字符串,再用MD5加密該值。注意連接的順序會(huì )影響最終的簽名值。
4A能力組件的API Server獲取API中的各種參數,按照上述算法進(jìn)行相同的加密過(guò)程。如果得到的簽名值與參數簽名一致,則證明API是安全的。
3 基于4A能力組件的推薦應用3.1 4A能力組件與推薦應用的關(guān)系
傳統的4A組件只提供4A功能,如用戶(hù)信息、好友信息等,而4A數據的特性讓這些數據可以在更廣泛的應用中使用?;?A能力組件的推薦應用是PaaS云平臺4A能力組件的一個(gè)應用示例。本應用分析4A能力組件中采集的用戶(hù)行為信息,為用戶(hù)推薦PaaS云平臺現有的第三方應用。用戶(hù)可以通過(guò)個(gè)性化服務(wù)快速定位到自己的采集夾。應用程序來(lái)解決人們在訪(fǎng)問(wèn)互聯(lián)網(wǎng)時(shí)面臨的“信息過(guò)載”問(wèn)題。
4A能力組件記錄用戶(hù)使用4A能力組件時(shí)的所有用戶(hù)行為,并提供日志API。根據4A能力組件的特點(diǎn),用戶(hù)行為包括用戶(hù)注冊、用戶(hù)登錄、首次登錄、登錄時(shí)長(cháng)等。此外,在4A能力組件的用戶(hù)門(mén)戶(hù)中,用戶(hù)還可以填寫(xiě)個(gè)人興趣信息以進(jìn)行為個(gè)性化推薦提供直接的數據支持。
推薦的應用程序首先需要連接到 4A 能力組件。訪(fǎng)問(wèn)工作主要由 4A 能力組件的管理員執行,對應用進(jìn)行審核,并為應用分配唯一的應用 ID 和應用密鑰對。然后,被推薦的應用程序可以通過(guò)日志API采集4A組件提供的用戶(hù)行為數據,并基于這些數據進(jìn)行數據處理、用戶(hù)興趣建模和算法推薦。
3.2 推薦應用系統架構
用戶(hù)訪(fǎng)問(wèn)應用程序,通常具有某些偏好。推薦應用根據用戶(hù)注冊的個(gè)人信息定制用戶(hù)描述文件。該文件可以由用戶(hù)主動(dòng)修改或由應用程序自動(dòng)修改。當文件被應用修改時(shí),應用需要采集用戶(hù)行為數據,學(xué)習用戶(hù)興趣,從而調整用戶(hù)興趣模型,完成推薦算法。推薦應用的系統架構如圖所示。推薦過(guò)程分三個(gè)階段完成:數據采集、用戶(hù)建模和個(gè)性化推薦。
圖 3
圖 3
圖3 推薦應用系統架構圖
1) 數據采集階段:該階段根據4A能力組件提供的用戶(hù)信息和用戶(hù)行為信息,完成用戶(hù)行為采集和數據處理。用戶(hù)數據的采集方法包括顯式反饋和隱式反饋。類(lèi)型。明確的反饋需要用戶(hù)主動(dòng)給出反饋和評價(jià)。隱式反饋由應用程序自動(dòng)完成,不會(huì )給用戶(hù)增加額外的負擔。應用程序使用顯式反饋和隱式反饋共同實(shí)現數據采集的過(guò)程。顯式反饋使用填寫(xiě)用戶(hù)信息的方法,隱式反饋調用4A能力組件的日志接口獲取用戶(hù)行為數據。4A能力組件的審計模塊詳細記錄用戶(hù)訪(fǎng)問(wèn)站點(diǎn)的數據,站點(diǎn)上的頁(yè)面每被訪(fǎng)問(wèn)一次,web服務(wù)器在日志中添加一條日志記錄,包括用戶(hù)IP、請求頁(yè)面的用戶(hù)名、應用程序名稱(chēng)、請求時(shí)間和 URL。此外,審計模塊還將完成基本的數據處理。
2) 用戶(hù)興趣建模階段:該階段根據用戶(hù)興趣建立評價(jià)矩陣模型。user-item評估矩陣使用一個(gè)Rm×n矩陣來(lái)表示用戶(hù)模型,其中m是用戶(hù)數,n是項目數。矩陣 R=[rij] 中的每個(gè)元素 rij 代表用戶(hù) i 對項目 j 的評價(jià)結果??,一般為一定實(shí)數范圍內的整數值(如 1~10)。通常越高價(jià)值越高,用戶(hù)對項目的興趣程度越高。這種表示簡(jiǎn)單、直觀(guān),可以直接從顯式反饋采集的信息中生成。
(1)
在本應用中,rij 是用戶(hù) i 在一段時(shí)間內對應用 j 的興趣程度。興趣度的值由用戶(hù)i對應用j的訪(fǎng)問(wèn)次數、訪(fǎng)問(wèn)時(shí)長(cháng)、SSO流程中第一次登錄是否進(jìn)入應用以及是否在此注冊等方面加權應用。
3) 個(gè)性化推薦階段:在這個(gè)階段,根據用戶(hù)相似度得到一組用戶(hù)鄰居。然后根據鄰居用戶(hù),對目標用戶(hù)沒(méi)有評分的物品進(jìn)行預測和評分,返回評分最高的N(Top-N)個(gè)物品。
4。結論
針對現有PaaS平臺開(kāi)放能力的局限性,以及現有應用功能列表4A體系不規范,提出了PaaS云中的4A能力組件。該組件分為賬戶(hù)管理、統一認證、應用授權。、系統審計和 SSO 5 模塊,并通過(guò)開(kāi)放的 API、用戶(hù)門(mén)戶(hù)和管理員門(mén)戶(hù)為開(kāi)發(fā)人員、用戶(hù)和管理員提供豐富和安全的 Web 服務(wù)。根據4A數據的特點(diǎn)和4A能力組件提供的能力,創(chuàng )新設計并實(shí)現了基于4A能力組件的推薦應用。該應用使用用戶(hù)興趣模型和協(xié)同過(guò)濾算法來(lái)實(shí)現對PaaS云平臺現有應用的推薦,同時(shí)也驗證了4A能力組件的可用性及其應用范圍的廣泛性。.
設計并實(shí)現的4A能力組件已應用于北京郵電大學(xué)“云?!盤(pán)aaS平臺,并被平臺上多個(gè)第三方應用使用,如:面向群體的在線(xiàn)知識管理應用及其管理員門(mén)戶(hù)(、)等。第三方應用開(kāi)??發(fā)者通過(guò)使用4A能力組件,簡(jiǎn)化應用開(kāi)發(fā)流程,節省應用開(kāi)發(fā)時(shí)間。PaaS云中的4A能力組件增加了軟件資產(chǎn)的復用,更好地規范了用戶(hù)信息的管理流程,開(kāi)創(chuàng )了用戶(hù)信息管理服務(wù)的新模式。
經(jīng)驗:數據采集技術(shù)包括哪幾方面(優(yōu)缺點(diǎn)分別是什么)
很多人不知道data采集技術(shù)包括哪些,優(yōu)缺點(diǎn),一起來(lái)看看吧!
1、通過(guò)各軟件廠(chǎng)商開(kāi)放的數據接口,可以實(shí)現不同軟件數據的互聯(lián)互通。這是目前最常見(jiàn)的數據連接方式。
2、優(yōu)點(diǎn):接口連接方式數據可靠性和價(jià)值高,一般不會(huì )出現數據重復;通過(guò)該接口可以實(shí)時(shí)傳輸數據,滿(mǎn)足實(shí)時(shí)數據應用的要求。
3、缺點(diǎn):接口開(kāi)發(fā)成本高;(2)需要與多個(gè)軟件廠(chǎng)商協(xié)調,工作量大,容易破解;擴展性低。比如由于新業(yè)務(wù)需要開(kāi)發(fā)每個(gè)軟件系統對于一個(gè)新的業(yè)務(wù)模塊,它和它之間的數據接口大數據平臺也需要做相應的修改和改變,甚至之前的數據接口代碼都要全部翻過(guò)來(lái),工作量大,時(shí)間長(cháng)。
4、機器人是目前比較前沿的軟件數據對接技術(shù),即可以采集客戶(hù)端軟件數據和網(wǎng)站軟件數據。
5、俗稱(chēng)博是小幫手軟件機器人,產(chǎn)品設計原則是“所見(jiàn)即所得”,即無(wú)需軟件廠(chǎng)商合作,采集上的數據軟件界面將被輸出。結果是結構化的數據庫或 Excel 表。
6、如果只需要界面上的業(yè)務(wù)數據,或者軟件廠(chǎng)商不配合/崩潰,數據庫分析困難,最好使用軟件機器人采集數據,尤其是詳情頁(yè)的data采集功能比較有特色。
7、技術(shù)特點(diǎn)是:無(wú)需原軟件廠(chǎng)商的配合;兼容性強,可以采集和匯總Windows平臺上各種軟件系統的數據;輸出結構化數據;即用型,實(shí)現周期短,簡(jiǎn)單高效;配置簡(jiǎn)單,無(wú)需編程,人人都可以DIY一個(gè)軟件機器人;價(jià)格遠低于手動(dòng)和界面。
8、缺點(diǎn):采集軟件數據的實(shí)時(shí)性有限。
9、網(wǎng)絡(luò )爬蟲(chóng)是模擬客戶(hù)端的網(wǎng)絡(luò )請求并接收請求響應,并按照一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。
10、爬蟲(chóng)數據采集缺點(diǎn):輸出數據多為非結構化數據;只能采集網(wǎng)站數據,易受網(wǎng)站反爬機制影響;用戶(hù)臉窄,需要專(zhuān)業(yè)的編程知識才能玩。
11、開(kāi)放式數據庫是采集和整合數據最直接的方式。
12、優(yōu)點(diǎn):開(kāi)放數據庫方式可以直接從目標數據庫中獲取需要的數據,準確率高,實(shí)時(shí)性有保證。這是最直接、最方便的方法。
13、缺點(diǎn):開(kāi)放數據庫模式還需要協(xié)調各個(gè)軟件廠(chǎng)商的數據庫開(kāi)放,這取決于對方的意愿。一般出于安全原因不會(huì )開(kāi)放;如果一個(gè)平臺同時(shí)連接多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)獲取數據,對平臺的性能也是一個(gè)很大的挑戰。 查看全部
完整解決方案:支持推薦應用的PaaS平臺4A能力組件
平臺即服務(wù)(PaaS,platform as a service)作為云計算的一種應用形式,為應用開(kāi)發(fā)者提供高效、安全的應用托管能力[]。隨著(zhù)PaaS云平臺的不斷發(fā)展,平臺能力的豐富性和多樣化已經(jīng)成為PaaS平臺的核心競爭點(diǎn)和關(guān)鍵指標[]。所謂平臺的“能力組件”,主要是指PaaS平臺提供的、可供平臺上其他應用調用的軟件能力。4A是Authentication(認證)。)、Authorization(認證)、Accounting(計費)和Audit(審計)的縮寫(xiě),4A為用戶(hù)提供統一的用戶(hù)身份認證管理,應用訪(fǎng)問(wèn)(access)權限控制,記賬和賬戶(hù)管理,以及基于操作的日志審計等功能。通過(guò)分析PaaS平臺上的應用[-]可以發(fā)現,很多應用都需要基本的4A能力,比如用戶(hù)信息管理、賬戶(hù)管理等。因此,4A能力組件正是在PaaS云平臺中??芍赜玫闹匾M件之一,可有效減少應用程序開(kāi)發(fā)量,增加軟件資產(chǎn)的重用性。同時(shí),豐富強大的平臺能力也可以讓平臺上的應用擁有更豐富、更強大的功能,提高應用競爭力。. 4A能力組件在提供4A能力的同時(shí),還為用戶(hù)提供單點(diǎn)登錄(SSO,single sign on)功能,方便用戶(hù)在各種應用之間無(wú)縫切換,一站式滿(mǎn)足用戶(hù)和應用的需求。提供統一認證、認證管理、賬號管理、審計管理、SSO等功能需求。
1 4A能力組件需求分析
4A能力組件為用戶(hù)提供用戶(hù)注冊、密碼找回、信息管理、計費管理等賬戶(hù)管理相關(guān)功能,提供統一的認證服務(wù),為不同的應用提供認證管理,提供用戶(hù)行為信息的審計管理,支持單點(diǎn)登錄和其他功能。
4A能力組件的應用對象是PaaS云中的應用開(kāi)發(fā)者、應用用戶(hù)和管理員。4A能力組件為應用開(kāi)發(fā)者提供了一個(gè)簡(jiǎn)單、安全、高效的接口,方便開(kāi)發(fā)者使用。為保證一站式服務(wù)用戶(hù)體驗,4A能力組件為應用用戶(hù)和管理員提供用戶(hù)入口和管理員入口,完成對用戶(hù)信息和應用信息的管理。
4A組件的功能主要包括賬戶(hù)管理、認證管理、認證管理、審計管理和SSO。
1) 賬戶(hù)管理:賬戶(hù)管理分為三個(gè)部分。一是基本賬戶(hù)管理,包括用戶(hù)注冊、找回密碼、修改密碼等;二是用戶(hù)信息管理,包括基本用戶(hù)信息(基本用戶(hù)信息、用戶(hù)分機信息和用戶(hù)權限信息)和好友信息(好友信息、朋友關(guān)系和朋友組)。最后是賬單信息,包括用戶(hù)余額和交易詳情。
2) 統一認證:統一認證用于判斷用戶(hù)是否合法。認證過(guò)程通過(guò) OAuth2.0 協(xié)議實(shí)現。應用開(kāi)發(fā)者在使用能力組件提供的開(kāi)放接口之前,需要獲取用戶(hù)的授權憑證access_token。. access_token 是第三方訪(fǎng)問(wèn)用戶(hù)資源的憑證。只有通過(guò)這個(gè)憑證,第三方應用程序才能訪(fǎng)問(wèn) 4A 能力組件中的數據。
3) 應用認證:只有經(jīng)過(guò)系統授權的應用才能獲取用戶(hù)信息。當應用通過(guò)4A能力組件獲取用戶(hù)信息時(shí),會(huì )對第三方應用進(jìn)行授權檢查,未經(jīng)授權的應用不會(huì )獲取任何用戶(hù)信息。
4)系統審計:4A能力組件通過(guò)日志系統記錄用戶(hù)行為和系統操作信息,完成相關(guān)日志的采集、存儲和分析。
5) SSO:SSO 是一種流行的系統集成解決方案。SSO可以保證在多個(gè)應用系統中,用戶(hù)只需要登錄一次就可以訪(fǎng)問(wèn)所有相互信任的應用系統。
2 4A 能力組件設計2.1 系統架構
系統架構圖如圖所示。該系統分為三個(gè)部分。最上層是Web服務(wù)層,即接口服務(wù)器(API Server)和與開(kāi)發(fā)者、用戶(hù)和管理員交互的Web接口。Web服務(wù)層主要負責管理員門(mén)戶(hù),特別是4A能力組件將用戶(hù)門(mén)戶(hù)作為能力組件的第三方應用,不與管理員門(mén)戶(hù)在同一層。. 這是因為管理員門(mén)戶(hù)需要更高的權限,開(kāi)放API不提供相關(guān)功能,調用開(kāi)放API也會(huì )造成效率下降。中間是邏輯功能層,主要完成系統中所有邏輯功能的實(shí)現,包括賬戶(hù)管理、統一認證[]、應用認證、系統審計和SSO[]等。系統的底層是基礎組件層,包括基礎組件和支撐組件?;A組件是系統運行的必備組件,主要包括MySQL、NFS和郵件服務(wù)等。支持組件是支持系統運行的可選組件,主要包括日志系統等。下面將重點(diǎn)介紹日志系統和接口服務(wù)器。
圖1
圖1
圖1 4A能力組件系統架構圖
2.2 日志系統
日志系統是4A能力組件的支撐組件,負責在4A能力組件中記錄用戶(hù)的行為信息,并與4A能力組件中的審計模塊相關(guān)聯(lián)。其系統架構如下圖所示。
圖 2
圖 2
圖2 日志系統架構圖
日志系統支持采集,海量日志數據的存儲和分析。系統提供高性能的日志讀寫(xiě),包括實(shí)時(shí)讀取最新日志和批量讀取歷史數據。日志系統由Kafka分布式消息隊列、HBase分布式數據庫、生產(chǎn)者程序和消費者程序[]組成。生產(chǎn)者程序是4A能力組件中的一個(gè)審計模塊,可以為用戶(hù)提供用戶(hù)行為數據。消費者程序是一個(gè)基于HTTP協(xié)議的API服務(wù)器,日志系統通過(guò)API向4A能力組件提供各種日志信息。

2.3 API 服務(wù)器
4A能力組件提供的開(kāi)放API由4A能力組件中Web服務(wù)層的API Server提供。
2.3.1 API 設計
根據4A能力組件的開(kāi)發(fā)者需求,開(kāi)放API定義為兩類(lèi):
1)用戶(hù)級API:OAuth2.0登錄的用戶(hù),必須攜帶access_token參數。用戶(hù)級 API 主要用于訪(fǎng)問(wèn)個(gè)人用戶(hù)信息。
2)應用級API:用于不使用OAuth2.0登錄并已授權的第三方應用。應用程序級 API 將具有參數 source 而不是參數 access_token。參數 source 是 4A 能力的一個(gè)組成部分 管理員分配給應用的唯一 ID。
根據系統功能,API分為以下7類(lèi):
1) 身份驗證 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用戶(hù)關(guān)系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 組 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用戶(hù)信息 API:/api/users/" target="_blank">/api/users/。
5) 帳戶(hù) 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安全解決方案
為了保證用戶(hù)信息的安全可靠,用戶(hù)級API和應用級API采用不同的安全方案。
1) 用戶(hù)級 API
用戶(hù)級 API 使用 access_token 是否過(guò)期或有效來(lái)判斷用戶(hù)的真實(shí)性,并返回相應的數據。用戶(hù)的access_token僅在用戶(hù)登錄期間有效,有效期為24小時(shí)。
對于OAuth2.0相關(guān)的API,還增加了以下安全措施:
?、?OAuth2.0 獲取參數代碼時(shí),可以添加參數狀態(tài),維護請求和回調的狀態(tài)。當4A能力組件重定向到應用程序時(shí),將返回該參數。開(kāi)發(fā)者可以通過(guò)該參數驗證請求的有效性,從而防止跨站請求偽造攻擊。
?、?OAuth2.0通過(guò)參數code獲取參數access_token時(shí),盡量選擇HTTP協(xié)議的POST方式傳輸請求。
2) 應用程序級 API
應用級API只傳遞參數源作為應用身份的認證是不安全的,所以4A能力組件使用參數簽名來(lái)保護用戶(hù)信息。構造參數簽名的過(guò)程如下:
?、俜诸?lèi)參數:API中攜帶的參數分為系統參數和非系統參數。系統參數包括應用ID(參數來(lái)源)和應用密鑰(與參數來(lái)源唯一匹配)。非系統參數是除系統參數外的所有參數。范圍。

?、?構造源字符串:將所有非系統參數和參數源按名稱(chēng)值升序排列,并用“&”連接,如k1=v1 & k2=v2 & ...,然后執行第一個(gè)MD5加密。
?、?構造密鑰:在應用密鑰末尾添加字符“&”。
?、?生成簽名值簽名:將源字符串和密鑰以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一個(gè)新的字符串,再用MD5加密該值。注意連接的順序會(huì )影響最終的簽名值。
4A能力組件的API Server獲取API中的各種參數,按照上述算法進(jìn)行相同的加密過(guò)程。如果得到的簽名值與參數簽名一致,則證明API是安全的。
3 基于4A能力組件的推薦應用3.1 4A能力組件與推薦應用的關(guān)系
傳統的4A組件只提供4A功能,如用戶(hù)信息、好友信息等,而4A數據的特性讓這些數據可以在更廣泛的應用中使用?;?A能力組件的推薦應用是PaaS云平臺4A能力組件的一個(gè)應用示例。本應用分析4A能力組件中采集的用戶(hù)行為信息,為用戶(hù)推薦PaaS云平臺現有的第三方應用。用戶(hù)可以通過(guò)個(gè)性化服務(wù)快速定位到自己的采集夾。應用程序來(lái)解決人們在訪(fǎng)問(wèn)互聯(lián)網(wǎng)時(shí)面臨的“信息過(guò)載”問(wèn)題。
4A能力組件記錄用戶(hù)使用4A能力組件時(shí)的所有用戶(hù)行為,并提供日志API。根據4A能力組件的特點(diǎn),用戶(hù)行為包括用戶(hù)注冊、用戶(hù)登錄、首次登錄、登錄時(shí)長(cháng)等。此外,在4A能力組件的用戶(hù)門(mén)戶(hù)中,用戶(hù)還可以填寫(xiě)個(gè)人興趣信息以進(jìn)行為個(gè)性化推薦提供直接的數據支持。
推薦的應用程序首先需要連接到 4A 能力組件。訪(fǎng)問(wèn)工作主要由 4A 能力組件的管理員執行,對應用進(jìn)行審核,并為應用分配唯一的應用 ID 和應用密鑰對。然后,被推薦的應用程序可以通過(guò)日志API采集4A組件提供的用戶(hù)行為數據,并基于這些數據進(jìn)行數據處理、用戶(hù)興趣建模和算法推薦。
3.2 推薦應用系統架構
用戶(hù)訪(fǎng)問(wèn)應用程序,通常具有某些偏好。推薦應用根據用戶(hù)注冊的個(gè)人信息定制用戶(hù)描述文件。該文件可以由用戶(hù)主動(dòng)修改或由應用程序自動(dòng)修改。當文件被應用修改時(shí),應用需要采集用戶(hù)行為數據,學(xué)習用戶(hù)興趣,從而調整用戶(hù)興趣模型,完成推薦算法。推薦應用的系統架構如圖所示。推薦過(guò)程分三個(gè)階段完成:數據采集、用戶(hù)建模和個(gè)性化推薦。
圖 3
圖 3
圖3 推薦應用系統架構圖
1) 數據采集階段:該階段根據4A能力組件提供的用戶(hù)信息和用戶(hù)行為信息,完成用戶(hù)行為采集和數據處理。用戶(hù)數據的采集方法包括顯式反饋和隱式反饋。類(lèi)型。明確的反饋需要用戶(hù)主動(dòng)給出反饋和評價(jià)。隱式反饋由應用程序自動(dòng)完成,不會(huì )給用戶(hù)增加額外的負擔。應用程序使用顯式反饋和隱式反饋共同實(shí)現數據采集的過(guò)程。顯式反饋使用填寫(xiě)用戶(hù)信息的方法,隱式反饋調用4A能力組件的日志接口獲取用戶(hù)行為數據。4A能力組件的審計模塊詳細記錄用戶(hù)訪(fǎng)問(wèn)站點(diǎn)的數據,站點(diǎn)上的頁(yè)面每被訪(fǎng)問(wèn)一次,web服務(wù)器在日志中添加一條日志記錄,包括用戶(hù)IP、請求頁(yè)面的用戶(hù)名、應用程序名稱(chēng)、請求時(shí)間和 URL。此外,審計模塊還將完成基本的數據處理。
2) 用戶(hù)興趣建模階段:該階段根據用戶(hù)興趣建立評價(jià)矩陣模型。user-item評估矩陣使用一個(gè)Rm×n矩陣來(lái)表示用戶(hù)模型,其中m是用戶(hù)數,n是項目數。矩陣 R=[rij] 中的每個(gè)元素 rij 代表用戶(hù) i 對項目 j 的評價(jià)結果??,一般為一定實(shí)數范圍內的整數值(如 1~10)。通常越高價(jià)值越高,用戶(hù)對項目的興趣程度越高。這種表示簡(jiǎn)單、直觀(guān),可以直接從顯式反饋采集的信息中生成。
(1)
在本應用中,rij 是用戶(hù) i 在一段時(shí)間內對應用 j 的興趣程度。興趣度的值由用戶(hù)i對應用j的訪(fǎng)問(wèn)次數、訪(fǎng)問(wèn)時(shí)長(cháng)、SSO流程中第一次登錄是否進(jìn)入應用以及是否在此注冊等方面加權應用。
3) 個(gè)性化推薦階段:在這個(gè)階段,根據用戶(hù)相似度得到一組用戶(hù)鄰居。然后根據鄰居用戶(hù),對目標用戶(hù)沒(méi)有評分的物品進(jìn)行預測和評分,返回評分最高的N(Top-N)個(gè)物品。
4。結論
針對現有PaaS平臺開(kāi)放能力的局限性,以及現有應用功能列表4A體系不規范,提出了PaaS云中的4A能力組件。該組件分為賬戶(hù)管理、統一認證、應用授權。、系統審計和 SSO 5 模塊,并通過(guò)開(kāi)放的 API、用戶(hù)門(mén)戶(hù)和管理員門(mén)戶(hù)為開(kāi)發(fā)人員、用戶(hù)和管理員提供豐富和安全的 Web 服務(wù)。根據4A數據的特點(diǎn)和4A能力組件提供的能力,創(chuàng )新設計并實(shí)現了基于4A能力組件的推薦應用。該應用使用用戶(hù)興趣模型和協(xié)同過(guò)濾算法來(lái)實(shí)現對PaaS云平臺現有應用的推薦,同時(shí)也驗證了4A能力組件的可用性及其應用范圍的廣泛性。.
設計并實(shí)現的4A能力組件已應用于北京郵電大學(xué)“云?!盤(pán)aaS平臺,并被平臺上多個(gè)第三方應用使用,如:面向群體的在線(xiàn)知識管理應用及其管理員門(mén)戶(hù)(、)等。第三方應用開(kāi)??發(fā)者通過(guò)使用4A能力組件,簡(jiǎn)化應用開(kāi)發(fā)流程,節省應用開(kāi)發(fā)時(shí)間。PaaS云中的4A能力組件增加了軟件資產(chǎn)的復用,更好地規范了用戶(hù)信息的管理流程,開(kāi)創(chuàng )了用戶(hù)信息管理服務(wù)的新模式。
經(jīng)驗:數據采集技術(shù)包括哪幾方面(優(yōu)缺點(diǎn)分別是什么)
很多人不知道data采集技術(shù)包括哪些,優(yōu)缺點(diǎn),一起來(lái)看看吧!
1、通過(guò)各軟件廠(chǎng)商開(kāi)放的數據接口,可以實(shí)現不同軟件數據的互聯(lián)互通。這是目前最常見(jiàn)的數據連接方式。
2、優(yōu)點(diǎn):接口連接方式數據可靠性和價(jià)值高,一般不會(huì )出現數據重復;通過(guò)該接口可以實(shí)時(shí)傳輸數據,滿(mǎn)足實(shí)時(shí)數據應用的要求。
3、缺點(diǎn):接口開(kāi)發(fā)成本高;(2)需要與多個(gè)軟件廠(chǎng)商協(xié)調,工作量大,容易破解;擴展性低。比如由于新業(yè)務(wù)需要開(kāi)發(fā)每個(gè)軟件系統對于一個(gè)新的業(yè)務(wù)模塊,它和它之間的數據接口大數據平臺也需要做相應的修改和改變,甚至之前的數據接口代碼都要全部翻過(guò)來(lái),工作量大,時(shí)間長(cháng)。

4、機器人是目前比較前沿的軟件數據對接技術(shù),即可以采集客戶(hù)端軟件數據和網(wǎng)站軟件數據。
5、俗稱(chēng)博是小幫手軟件機器人,產(chǎn)品設計原則是“所見(jiàn)即所得”,即無(wú)需軟件廠(chǎng)商合作,采集上的數據軟件界面將被輸出。結果是結構化的數據庫或 Excel 表。
6、如果只需要界面上的業(yè)務(wù)數據,或者軟件廠(chǎng)商不配合/崩潰,數據庫分析困難,最好使用軟件機器人采集數據,尤其是詳情頁(yè)的data采集功能比較有特色。
7、技術(shù)特點(diǎn)是:無(wú)需原軟件廠(chǎng)商的配合;兼容性強,可以采集和匯總Windows平臺上各種軟件系統的數據;輸出結構化數據;即用型,實(shí)現周期短,簡(jiǎn)單高效;配置簡(jiǎn)單,無(wú)需編程,人人都可以DIY一個(gè)軟件機器人;價(jià)格遠低于手動(dòng)和界面。
8、缺點(diǎn):采集軟件數據的實(shí)時(shí)性有限。

9、網(wǎng)絡(luò )爬蟲(chóng)是模擬客戶(hù)端的網(wǎng)絡(luò )請求并接收請求響應,并按照一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。
10、爬蟲(chóng)數據采集缺點(diǎn):輸出數據多為非結構化數據;只能采集網(wǎng)站數據,易受網(wǎng)站反爬機制影響;用戶(hù)臉窄,需要專(zhuān)業(yè)的編程知識才能玩。
11、開(kāi)放式數據庫是采集和整合數據最直接的方式。
12、優(yōu)點(diǎn):開(kāi)放數據庫方式可以直接從目標數據庫中獲取需要的數據,準確率高,實(shí)時(shí)性有保證。這是最直接、最方便的方法。
13、缺點(diǎn):開(kāi)放數據庫模式還需要協(xié)調各個(gè)軟件廠(chǎng)商的數據庫開(kāi)放,這取決于對方的意愿。一般出于安全原因不會(huì )開(kāi)放;如果一個(gè)平臺同時(shí)連接多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)獲取數據,對平臺的性能也是一個(gè)很大的挑戰。
總結:連載|淺談紅隊中的外網(wǎng)信息收集(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-09-28 00:06
文章首次發(fā)表于:
火線(xiàn)區社區()
前言
最近一直在整理總結以往學(xué)過(guò)的關(guān)于紅隊的知識點(diǎn)。這里我主要指的是ATT&CK矩陣模型,不過(guò)做了簡(jiǎn)化,增加了一些國內獨有的情況。
一般會(huì )按照外網(wǎng)信息采集、管理、權限維護、權限升級、內網(wǎng)信息采集、橫向移動(dòng)、痕跡清理的順序進(jìn)行。
因為是總結文章,所以文章的重點(diǎn)是在“面”上而不是在具體的“點(diǎn)”上,所以文中的具體技術(shù)細節不再贅述,否則內容會(huì )有很多。
想了解具體細節的讀者可以去我個(gè)人公眾號TeamsSix的歷史文章,里面會(huì )有一些點(diǎn)的描述文章。
限于個(gè)人水平,文中難免有錯誤或不恰當的描述,希望在評論中指出,希望理解。
確定目標
在開(kāi)始信息采集之前,您必須首先確定目標。在紅隊項目或HW項目中,一般目標是公司名稱(chēng),然后通過(guò)公司名稱(chēng)獲取各種信息,進(jìn)而進(jìn)行外網(wǎng)管理、內網(wǎng)穿透等。
知道了目標公司的名稱(chēng)后,我們就可以開(kāi)始采集信息的工作了。
外網(wǎng)信息采集
在這里我整理了以下信息采集的方法。當然,它肯定是不完整的。歡迎大家在評論區一起補充討論:
1、組織所有權結構
拿到公司名稱(chēng)后,先別急著(zhù)查記錄找域名,而是先看公司的股權結構,因為一般一家公司的子公司也可以瞄準,但有時(shí)需要50%的股份。股份或100%持股,視實(shí)際情況而定。
比較常見(jiàn)的網(wǎng)站查詢(xún)公司組織股權結構的有天眼查、七叉叉、愛(ài)七叉、小藍本、釘釘七點(diǎn)等。
如果標的控股公司不多,可以直接看股權滲透圖,比較直觀(guān);如果控股公司多,看股權滲透圖就比較費勁了。
除了股權滲透,還可以看到它的外資信息
在這兩個(gè)地方都可以找到目標持股的公司。
目標少一點(diǎn)沒(méi)關(guān)系,一個(gè)一個(gè)的,但是目標太多了,效率就會(huì )很低。幸運的是,現在有現成的工具。
ENScanGo
ENScanGo 是現有開(kāi)源項目 ENScan 的升級版。工具地址為:
這是沃爾夫集團安全團隊Keac先生為解決企業(yè)信息采集難的問(wèn)題而編寫(xiě)的工具。一鍵采集標的及其控股公司的ICP備案、APP、小程序、微信公眾號等信息。然后聚合導出。
比如這里我采集的信息是“北京百度網(wǎng)通科技有限公司”。以及他持有50%股份的公司。
enscan -n 北京百度網(wǎng)訊科技有限公司 -invest-num 50
采集到的結果如下:
這樣就直接省略了采集ICP備案的步驟,可以一鍵獲取目標公司及其子公司的公司名稱(chēng)、APP、微信公眾號、ICP備案等信息。
2、主域名查詢(xún)
主域名查詢(xún)可分為注冊域名查詢(xún)和未注冊域名查詢(xún)。
記錄域名查詢(xún)
除了上述企業(yè)信息查詢(xún)網(wǎng)站獲得的備案信息外,最完整、最準確的方法是去國家備案信息查詢(xún)網(wǎng)站查詢(xún),地址為:。
除了官方渠道,還有一些第三方注冊域名查詢(xún)網(wǎng)站,比如站長(cháng)之家等。
未注冊域名查詢(xún)
一些公司會(huì )將他們的其他業(yè)務(wù)站點(diǎn)放在 網(wǎng)站 的末尾,其中可能收錄未記錄的站點(diǎn)。
3、子域獲取
比較常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目標,也可以提前采集一波子域,然后在項目即將啟動(dòng)的時(shí)候再采集一波子域,比較兩次采集的結果,優(yōu)先新的子域。
4、端口掃描
一般來(lái)說(shuō),最常見(jiàn)的是nmap和masscan。這是一個(gè) 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
不過(guò)除了這些方法,fscan其實(shí)還可以用于外網(wǎng)的端口掃描,而且速度更快。
例如,使用 fscan 只掃描端口,而不是掃描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默認線(xiàn)程是600,因為外網(wǎng)掃描600的線(xiàn)程比較大,所以這里設置為100。如果掃描結果不理想,可以將線(xiàn)程設置得更小。
端口掃描可以與空間搜索引擎的結果相結合。如果空間搜索引擎發(fā)現目標中有很多高級端口,那么在進(jìn)行端口掃描時(shí)記得添加這些高級端口。
5、指紋識別
指紋識別對我來(lái)說(shuō)是很重要的一點(diǎn),因為指紋識別的結果對管理很有幫助,可以讓管理更有針對性,同時(shí)也可以節省很多時(shí)間。
比較常見(jiàn)的在線(xiàn)指紋查詢(xún)網(wǎng)站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空間搜索引擎
通過(guò)使用空間搜索引擎,您有時(shí)可以在首次識別目標時(shí)發(fā)現目標弱點(diǎn)。
目前比較常見(jiàn)的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鷹、智創(chuàng )宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer為圖形界面,使用友好。
下載鏈接:
FofaX 是一個(gè)命令行界面。FofaX 可以與其他工具結合使用。除了這兩個(gè)工具調用Fofa接口外,上面提到的Ehole還可以調用Fofa查詢(xún)。
坤宇調用ZoomEye的接口,工具下載地址:
7、api接口
獲取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果發(fā)現一些未經(jīng)授權的接口,可能會(huì )獲得一些高價(jià)值的信息,例如大量敏感信息泄露。
另外,在翻轉js文件的時(shí)候,可以注意是否有以runtime命名的js文件,因為這個(gè)js文件會(huì )收錄其他js文件的名字(包括當前頁(yè)面沒(méi)有加載的js文件),所以使用運行時(shí)js文件我發(fā)現了更多的js文件,這使得找到api接口的概率更高。
8、目錄訪(fǎng)問(wèn)
比較常用的目錄掃描工具有dirsearch、ffuf
ffuf 更側重于 FFUZ,但無(wú)論是目錄掃描還是 FFUZ,掃描的結果都是字典,Github 上超過(guò) 4k 個(gè)star 的字典:
9、郵箱地址獲取
郵件地址比較常用的方法是通過(guò)搜索引擎直接找到網(wǎng)上公開(kāi)的郵件信息,往往指向目標的網(wǎng)站,例如目標的某個(gè)網(wǎng)頁(yè)的附件中收錄email和其他信息。
此外,您還可以使用Github在代碼中搜索目標公司的開(kāi)發(fā)人員評論的郵箱信息。其實(shí)我不明白為什么開(kāi)發(fā)者喜歡在代碼中評論自己的郵箱。
也可以通過(guò)LinkedIn找到目標公司的員工姓名,通過(guò)“拼音+@公司域名”的方式構建員工郵箱。
還有一些網(wǎng)站可以查詢(xún)郵箱,比較方便,比如下面的網(wǎng)站:
另外,如果采集到目標Outlook站點(diǎn),也可以嘗試爆破郵箱用戶(hù)名。
10、網(wǎng)盤(pán)信息
有時(shí)候可以在網(wǎng)盤(pán)資料中找到很多好東西,這樣的網(wǎng)站還有很多。在愛(ài)達雜貨店導航站可以找到很多網(wǎng)盤(pán)搜索網(wǎng)站。
11、附加信息
其他信息,如app、小程序、供應商、外包合作伙伴、公眾號等,都可以從上面的組織股權結構類(lèi)網(wǎng)站中或多或少的查詢(xún)到,也可以使用ENScan。
其中,供應商和外包合作伙伴值得注意。如果拿下供應商,或許可以直接進(jìn)入目標內網(wǎng)。如果贏(yíng)得外包合作伙伴,可以利用這一層關(guān)系進(jìn)行社會(huì )工作或嘗試進(jìn)入目標內網(wǎng)。
后記
當然,紅隊中采集的信息遠不止上面所說(shuō)的。其他常用的還有資產(chǎn)監控平臺、社會(huì )工程庫、自動(dòng)化信息采集工具(如水澤)、各種內部紅隊平臺等,篇幅有限。再次展開(kāi)。
美好的過(guò)去文章
技巧:下載自媒體內容素材,幫你快速創(chuàng )造內容
下載自媒體內容材料,幫助您快速創(chuàng )建內容。在這個(gè)自媒體飛速發(fā)展的時(shí)代,大家都在這方面發(fā)展,但是對于一些新手來(lái)說(shuō),如何進(jìn)行內容創(chuàng )作就成了一個(gè)難題,因為大家的知識儲備都不是很豐富,經(jīng)常會(huì )遇到?jīng)]有靈感的情況。
對于這種情況,我們有一個(gè)很好的解決辦法,就是找內容素材。內容素材的采集可以參考以下方法,一起來(lái)看看吧。
第一個(gè):使用工具采集材料
當大家想到工具采集材質(zhì)的時(shí)候,首先想到的就是一轉,因為一轉已經(jīng)是家喻戶(hù)曉的材質(zhì)采集工具,它可以用于采集視頻和文章素材,沒(méi)有靈感的時(shí)候可以去一轉搜索相關(guān)關(guān)鍵詞,可以找到相關(guān)素材,還可以選擇時(shí)間和平臺材料發(fā)布。
二:搜索引擎找素材
這種找素材的方法也是比較常用的方法,很多人習慣直接去百度找素材。對于需要少量素材的自媒體的人來(lái)說(shuō)也比較方便。選擇您自己的主題。
第三:微博熱搜榜
一般來(lái)說(shuō),關(guān)注微博熱搜榜自媒體的人往往更多地在娛樂(lè )和社交領(lǐng)域。微博有實(shí)時(shí)列表。如果根據熱點(diǎn)進(jìn)行創(chuàng )作,你的流量肯定會(huì )增加。會(huì )很大,其他領(lǐng)域的作者也可以試試。
第四:知乎
知乎也是不錯的素材采集,知乎素材很多,是一個(gè)問(wèn)答平臺,里面的答案也很精彩,你可以直接搜索相關(guān)知識,相信你會(huì )有所收獲。大家素材采集完成后,可以直接使用易小兒一鍵發(fā)視頻或者文章,省心省力。 查看全部
總結:連載|淺談紅隊中的外網(wǎng)信息收集(一)
文章首次發(fā)表于:
火線(xiàn)區社區()
前言
最近一直在整理總結以往學(xué)過(guò)的關(guān)于紅隊的知識點(diǎn)。這里我主要指的是ATT&CK矩陣模型,不過(guò)做了簡(jiǎn)化,增加了一些國內獨有的情況。
一般會(huì )按照外網(wǎng)信息采集、管理、權限維護、權限升級、內網(wǎng)信息采集、橫向移動(dòng)、痕跡清理的順序進(jìn)行。
因為是總結文章,所以文章的重點(diǎn)是在“面”上而不是在具體的“點(diǎn)”上,所以文中的具體技術(shù)細節不再贅述,否則內容會(huì )有很多。
想了解具體細節的讀者可以去我個(gè)人公眾號TeamsSix的歷史文章,里面會(huì )有一些點(diǎn)的描述文章。
限于個(gè)人水平,文中難免有錯誤或不恰當的描述,希望在評論中指出,希望理解。
確定目標
在開(kāi)始信息采集之前,您必須首先確定目標。在紅隊項目或HW項目中,一般目標是公司名稱(chēng),然后通過(guò)公司名稱(chēng)獲取各種信息,進(jìn)而進(jìn)行外網(wǎng)管理、內網(wǎng)穿透等。
知道了目標公司的名稱(chēng)后,我們就可以開(kāi)始采集信息的工作了。
外網(wǎng)信息采集
在這里我整理了以下信息采集的方法。當然,它肯定是不完整的。歡迎大家在評論區一起補充討論:
1、組織所有權結構
拿到公司名稱(chēng)后,先別急著(zhù)查記錄找域名,而是先看公司的股權結構,因為一般一家公司的子公司也可以瞄準,但有時(shí)需要50%的股份。股份或100%持股,視實(shí)際情況而定。
比較常見(jiàn)的網(wǎng)站查詢(xún)公司組織股權結構的有天眼查、七叉叉、愛(ài)七叉、小藍本、釘釘七點(diǎn)等。
如果標的控股公司不多,可以直接看股權滲透圖,比較直觀(guān);如果控股公司多,看股權滲透圖就比較費勁了。
除了股權滲透,還可以看到它的外資信息
在這兩個(gè)地方都可以找到目標持股的公司。
目標少一點(diǎn)沒(méi)關(guān)系,一個(gè)一個(gè)的,但是目標太多了,效率就會(huì )很低。幸運的是,現在有現成的工具。
ENScanGo
ENScanGo 是現有開(kāi)源項目 ENScan 的升級版。工具地址為:
這是沃爾夫集團安全團隊Keac先生為解決企業(yè)信息采集難的問(wèn)題而編寫(xiě)的工具。一鍵采集標的及其控股公司的ICP備案、APP、小程序、微信公眾號等信息。然后聚合導出。
比如這里我采集的信息是“北京百度網(wǎng)通科技有限公司”。以及他持有50%股份的公司。

enscan -n 北京百度網(wǎng)訊科技有限公司 -invest-num 50
采集到的結果如下:
這樣就直接省略了采集ICP備案的步驟,可以一鍵獲取目標公司及其子公司的公司名稱(chēng)、APP、微信公眾號、ICP備案等信息。
2、主域名查詢(xún)
主域名查詢(xún)可分為注冊域名查詢(xún)和未注冊域名查詢(xún)。
記錄域名查詢(xún)
除了上述企業(yè)信息查詢(xún)網(wǎng)站獲得的備案信息外,最完整、最準確的方法是去國家備案信息查詢(xún)網(wǎng)站查詢(xún),地址為:。
除了官方渠道,還有一些第三方注冊域名查詢(xún)網(wǎng)站,比如站長(cháng)之家等。
未注冊域名查詢(xún)
一些公司會(huì )將他們的其他業(yè)務(wù)站點(diǎn)放在 網(wǎng)站 的末尾,其中可能收錄未記錄的站點(diǎn)。
3、子域獲取
比較常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目標,也可以提前采集一波子域,然后在項目即將啟動(dòng)的時(shí)候再采集一波子域,比較兩次采集的結果,優(yōu)先新的子域。
4、端口掃描
一般來(lái)說(shuō),最常見(jiàn)的是nmap和masscan。這是一個(gè) 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
不過(guò)除了這些方法,fscan其實(shí)還可以用于外網(wǎng)的端口掃描,而且速度更快。
例如,使用 fscan 只掃描端口,而不是掃描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默認線(xiàn)程是600,因為外網(wǎng)掃描600的線(xiàn)程比較大,所以這里設置為100。如果掃描結果不理想,可以將線(xiàn)程設置得更小。
端口掃描可以與空間搜索引擎的結果相結合。如果空間搜索引擎發(fā)現目標中有很多高級端口,那么在進(jìn)行端口掃描時(shí)記得添加這些高級端口。
5、指紋識別
指紋識別對我來(lái)說(shuō)是很重要的一點(diǎn),因為指紋識別的結果對管理很有幫助,可以讓管理更有針對性,同時(shí)也可以節省很多時(shí)間。
比較常見(jiàn)的在線(xiàn)指紋查詢(xún)網(wǎng)站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空間搜索引擎
通過(guò)使用空間搜索引擎,您有時(shí)可以在首次識別目標時(shí)發(fā)現目標弱點(diǎn)。

目前比較常見(jiàn)的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鷹、智創(chuàng )宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer為圖形界面,使用友好。
下載鏈接:
FofaX 是一個(gè)命令行界面。FofaX 可以與其他工具結合使用。除了這兩個(gè)工具調用Fofa接口外,上面提到的Ehole還可以調用Fofa查詢(xún)。
坤宇調用ZoomEye的接口,工具下載地址:
7、api接口
獲取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果發(fā)現一些未經(jīng)授權的接口,可能會(huì )獲得一些高價(jià)值的信息,例如大量敏感信息泄露。
另外,在翻轉js文件的時(shí)候,可以注意是否有以runtime命名的js文件,因為這個(gè)js文件會(huì )收錄其他js文件的名字(包括當前頁(yè)面沒(méi)有加載的js文件),所以使用運行時(shí)js文件我發(fā)現了更多的js文件,這使得找到api接口的概率更高。
8、目錄訪(fǎng)問(wèn)
比較常用的目錄掃描工具有dirsearch、ffuf
ffuf 更側重于 FFUZ,但無(wú)論是目錄掃描還是 FFUZ,掃描的結果都是字典,Github 上超過(guò) 4k 個(gè)star 的字典:
9、郵箱地址獲取
郵件地址比較常用的方法是通過(guò)搜索引擎直接找到網(wǎng)上公開(kāi)的郵件信息,往往指向目標的網(wǎng)站,例如目標的某個(gè)網(wǎng)頁(yè)的附件中收錄email和其他信息。
此外,您還可以使用Github在代碼中搜索目標公司的開(kāi)發(fā)人員評論的郵箱信息。其實(shí)我不明白為什么開(kāi)發(fā)者喜歡在代碼中評論自己的郵箱。
也可以通過(guò)LinkedIn找到目標公司的員工姓名,通過(guò)“拼音+@公司域名”的方式構建員工郵箱。
還有一些網(wǎng)站可以查詢(xún)郵箱,比較方便,比如下面的網(wǎng)站:
另外,如果采集到目標Outlook站點(diǎn),也可以嘗試爆破郵箱用戶(hù)名。
10、網(wǎng)盤(pán)信息
有時(shí)候可以在網(wǎng)盤(pán)資料中找到很多好東西,這樣的網(wǎng)站還有很多。在愛(ài)達雜貨店導航站可以找到很多網(wǎng)盤(pán)搜索網(wǎng)站。
11、附加信息
其他信息,如app、小程序、供應商、外包合作伙伴、公眾號等,都可以從上面的組織股權結構類(lèi)網(wǎng)站中或多或少的查詢(xún)到,也可以使用ENScan。
其中,供應商和外包合作伙伴值得注意。如果拿下供應商,或許可以直接進(jìn)入目標內網(wǎng)。如果贏(yíng)得外包合作伙伴,可以利用這一層關(guān)系進(jìn)行社會(huì )工作或嘗試進(jìn)入目標內網(wǎng)。
后記
當然,紅隊中采集的信息遠不止上面所說(shuō)的。其他常用的還有資產(chǎn)監控平臺、社會(huì )工程庫、自動(dòng)化信息采集工具(如水澤)、各種內部紅隊平臺等,篇幅有限。再次展開(kāi)。
美好的過(guò)去文章
技巧:下載自媒體內容素材,幫你快速創(chuàng )造內容
下載自媒體內容材料,幫助您快速創(chuàng )建內容。在這個(gè)自媒體飛速發(fā)展的時(shí)代,大家都在這方面發(fā)展,但是對于一些新手來(lái)說(shuō),如何進(jìn)行內容創(chuàng )作就成了一個(gè)難題,因為大家的知識儲備都不是很豐富,經(jīng)常會(huì )遇到?jīng)]有靈感的情況。
對于這種情況,我們有一個(gè)很好的解決辦法,就是找內容素材。內容素材的采集可以參考以下方法,一起來(lái)看看吧。
第一個(gè):使用工具采集材料

當大家想到工具采集材質(zhì)的時(shí)候,首先想到的就是一轉,因為一轉已經(jīng)是家喻戶(hù)曉的材質(zhì)采集工具,它可以用于采集視頻和文章素材,沒(méi)有靈感的時(shí)候可以去一轉搜索相關(guān)關(guān)鍵詞,可以找到相關(guān)素材,還可以選擇時(shí)間和平臺材料發(fā)布。
二:搜索引擎找素材
這種找素材的方法也是比較常用的方法,很多人習慣直接去百度找素材。對于需要少量素材的自媒體的人來(lái)說(shuō)也比較方便。選擇您自己的主題。
第三:微博熱搜榜

一般來(lái)說(shuō),關(guān)注微博熱搜榜自媒體的人往往更多地在娛樂(lè )和社交領(lǐng)域。微博有實(shí)時(shí)列表。如果根據熱點(diǎn)進(jìn)行創(chuàng )作,你的流量肯定會(huì )增加。會(huì )很大,其他領(lǐng)域的作者也可以試試。
第四:知乎
知乎也是不錯的素材采集,知乎素材很多,是一個(gè)問(wèn)答平臺,里面的答案也很精彩,你可以直接搜索相關(guān)知識,相信你會(huì )有所收獲。大家素材采集完成后,可以直接使用易小兒一鍵發(fā)視頻或者文章,省心省力。
秘密:如何對專(zhuān)屬SRC進(jìn)行信息收集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2022-09-27 23:15
前言
一直覺(jué)得自己的資料采集不太好,最近才在挖獨家。順便總結一下公司的信息采集方式
以xxx公司為例
根域名:
涉及本公司的部分已經(jīng)編碼,補充部分使用一定的安心和一定的度數
一、子域集合1.Oneforall
盡量把API湊齊,如果fofa可以請大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
運行后會(huì )生成兩個(gè)txt文本,JSurl.txt是URL,里面會(huì )有一些接口,
JSdomain.txt 是一個(gè)子域
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 環(huán)境中
卡利:
<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
非常好用的域名搜索網(wǎng)站,還會(huì )自動(dòng)匯總同一個(gè)IP的多個(gè)域名
7.在線(xiàn)域名爆炸
8. 小藍圖
9.谷歌語(yǔ)法
谷歌/必應:網(wǎng)站:
<p style="outline: 0px;">site:xxx.cn</p>
如果你發(fā)現很多檢索到的結果都是www,那是眾所周知的,主站點(diǎn)一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
結果會(huì )自動(dòng)刪除www
然后一一減去網(wǎng)站
二、公眾號采集1.搜狗搜索引擎
2.企業(yè)叉叉
三、微信小程序七叉戟
愛(ài)奇茶之類(lèi)的都可以用,但是我發(fā)現愛(ài)奇茶找到的奇茶并不多,不過(guò)大家都可以試試
四、 應用程序1.小藍圖
2.企業(yè)叉叉
3.浸
4.七麥
七麥也可以在這里切換蘋(píng)果和安卓
然后獲取下載鏈接下載apk并扔進(jìn)模擬器
五、 指紋識別1. BugScaner
主站不識別,其他分站可以扔進(jìn)去看看
2.潮汐指紋
3.Kscan
此工具需要go環(huán)境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github
github敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區。安全意識薄弱的同事經(jīng)常將公司代碼、各種服務(wù)賬號等極其敏感的信息“開(kāi)源”到github。
這里可以使用github找到帶有這個(gè)關(guān)鍵字的代碼,這樣可以采集到更廣泛的方面
2.網(wǎng)盤(pán)搜索
很多磁盤(pán):
磁盤(pán)搜搜:
磁盤(pán)搜索:
凌云峰搜索:
直接輸入廠(chǎng)家名稱(chēng),然后搜索看看源代碼是否泄露,或者什么賬號密碼之類(lèi)的
3.路徑掃描
404,403頁(yè),并不是真的什么都沒(méi)有,需要一層一層的fuzz,一層一層的往下掃
工具:
1.目錄搜索
2.劍
3.7kbscan
當每個(gè)工具掃描同一個(gè)站點(diǎn)時(shí),會(huì )顯示不同的路徑。建議掃描所有三個(gè)工具。
找到一些其他的東西,比如背景、登錄系統等。你可以使用 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.基于證書(shū)
5. 查找 網(wǎng)站
這個(gè)圖標基于 shodan
Shodan搜索中有一個(gè)網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以用這個(gè)語(yǔ)法搜索網(wǎng)站
使用相同圖標的圖標
因為哈希是一個(gè)未知的隨機數
所以通過(guò)輸入某個(gè)hash值來(lái)搜索指定圖標的網(wǎng)站是不可能的
只有查看一個(gè)已經(jīng)被Shodan收錄使用過(guò)的網(wǎng)站的hash值,才能進(jìn)一步得到所有帶有某個(gè)圖標的網(wǎng)站。
那么這里的用法就很有限了,你只能?chē)L試找到你需要找到的網(wǎng)站,因為Shodan不一定收錄你要搜索的網(wǎng)站。
那么如果Shodan收錄有某個(gè)ip,并且這個(gè)服務(wù)器有某個(gè)圖標,我可以搜索所有有這個(gè)圖標的服務(wù)器ip嗎?答案是肯定的。
以百度為例,這里是一個(gè)ip為180.97.34.35的服務(wù)器,截圖如下
如果我想搜索所有帶有這個(gè)圖標的ip地址,我可以先在Shodan中搜索這個(gè)ip
在此之前我沒(méi)有注意到的一件事是 Shodan 的原創(chuàng )數據(Raw Data)函數
點(diǎn)擊詳情中的查看原創(chuàng )數據,打開(kāi)原創(chuàng )數據,可以看到Shodan存儲的這個(gè)ip的所有信息。因為東西太多,就不一一截圖了
這里我們需要用到這個(gè)關(guān)于圖標hash的字段,data。0.http.favicon.hash,
如圖
可以看到結果是-1507567067,
知識和經(jīng)驗:信息采集
這個(gè)功能是第一個(gè)數據采集功能,我也做了一個(gè)用于第二個(gè)整理:存檔
如果你有更好的想法和使用方法,歡迎交流
---
以obsidian作為數據處理中心,支持日常工作采集和一鍵生成tick list to-do
支持的采集方式:
1、選擇文字快速采集
2、OCR識別與采集
3、截圖集
4、快速文件采集
操作方法:復制文件或文件夾,可以快速將文件分類(lèi)成黑曜石。如果是文件夾,會(huì )自動(dòng)刪除文件夾,按文件采集
5、數學(xué)公式快速采集(使用默認界面,每次識別花費Q豆)
6、生成待辦事項并設置提醒時(shí)間
一鍵生成文本待辦,并在tick list中回寫(xiě)黑曜石鏈接
一鍵生成文件待辦,在tick列表中回寫(xiě)黑曜石鏈接
7、結合手機日歷功能,可實(shí)現手機自動(dòng)提醒,華為手機可一次性播放日歷內容,使用更方便!
使用前需要下載tick list、obsidian、需要設置的日歷文件夾、附件存放文件夾 查看全部
秘密:如何對專(zhuān)屬SRC進(jìn)行信息收集
前言
一直覺(jué)得自己的資料采集不太好,最近才在挖獨家。順便總結一下公司的信息采集方式
以xxx公司為例
根域名:
涉及本公司的部分已經(jīng)編碼,補充部分使用一定的安心和一定的度數
一、子域集合1.Oneforall
盡量把API湊齊,如果fofa可以請大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
運行后會(huì )生成兩個(gè)txt文本,JSurl.txt是URL,里面會(huì )有一些接口,
JSdomain.txt 是一個(gè)子域
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 環(huán)境中
卡利:
<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
非常好用的域名搜索網(wǎng)站,還會(huì )自動(dòng)匯總同一個(gè)IP的多個(gè)域名
7.在線(xiàn)域名爆炸
8. 小藍圖
9.谷歌語(yǔ)法
谷歌/必應:網(wǎng)站:

<p style="outline: 0px;">site:xxx.cn</p>
如果你發(fā)現很多檢索到的結果都是www,那是眾所周知的,主站點(diǎn)一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
結果會(huì )自動(dòng)刪除www
然后一一減去網(wǎng)站
二、公眾號采集1.搜狗搜索引擎
2.企業(yè)叉叉
三、微信小程序七叉戟
愛(ài)奇茶之類(lèi)的都可以用,但是我發(fā)現愛(ài)奇茶找到的奇茶并不多,不過(guò)大家都可以試試
四、 應用程序1.小藍圖
2.企業(yè)叉叉
3.浸
4.七麥
七麥也可以在這里切換蘋(píng)果和安卓
然后獲取下載鏈接下載apk并扔進(jìn)模擬器
五、 指紋識別1. BugScaner
主站不識別,其他分站可以扔進(jìn)去看看
2.潮汐指紋
3.Kscan
此工具需要go環(huán)境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github

github敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區。安全意識薄弱的同事經(jīng)常將公司代碼、各種服務(wù)賬號等極其敏感的信息“開(kāi)源”到github。
這里可以使用github找到帶有這個(gè)關(guān)鍵字的代碼,這樣可以采集到更廣泛的方面
2.網(wǎng)盤(pán)搜索
很多磁盤(pán):
磁盤(pán)搜搜:
磁盤(pán)搜索:
凌云峰搜索:
直接輸入廠(chǎng)家名稱(chēng),然后搜索看看源代碼是否泄露,或者什么賬號密碼之類(lèi)的
3.路徑掃描
404,403頁(yè),并不是真的什么都沒(méi)有,需要一層一層的fuzz,一層一層的往下掃
工具:
1.目錄搜索
2.劍
3.7kbscan
當每個(gè)工具掃描同一個(gè)站點(diǎn)時(shí),會(huì )顯示不同的路徑。建議掃描所有三個(gè)工具。
找到一些其他的東西,比如背景、登錄系統等。你可以使用 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.基于證書(shū)
5. 查找 網(wǎng)站
這個(gè)圖標基于 shodan
Shodan搜索中有一個(gè)網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以用這個(gè)語(yǔ)法搜索網(wǎng)站
使用相同圖標的圖標
因為哈希是一個(gè)未知的隨機數
所以通過(guò)輸入某個(gè)hash值來(lái)搜索指定圖標的網(wǎng)站是不可能的
只有查看一個(gè)已經(jīng)被Shodan收錄使用過(guò)的網(wǎng)站的hash值,才能進(jìn)一步得到所有帶有某個(gè)圖標的網(wǎng)站。
那么這里的用法就很有限了,你只能?chē)L試找到你需要找到的網(wǎng)站,因為Shodan不一定收錄你要搜索的網(wǎng)站。
那么如果Shodan收錄有某個(gè)ip,并且這個(gè)服務(wù)器有某個(gè)圖標,我可以搜索所有有這個(gè)圖標的服務(wù)器ip嗎?答案是肯定的。
以百度為例,這里是一個(gè)ip為180.97.34.35的服務(wù)器,截圖如下
如果我想搜索所有帶有這個(gè)圖標的ip地址,我可以先在Shodan中搜索這個(gè)ip
在此之前我沒(méi)有注意到的一件事是 Shodan 的原創(chuàng )數據(Raw Data)函數
點(diǎn)擊詳情中的查看原創(chuàng )數據,打開(kāi)原創(chuàng )數據,可以看到Shodan存儲的這個(gè)ip的所有信息。因為東西太多,就不一一截圖了
這里我們需要用到這個(gè)關(guān)于圖標hash的字段,data。0.http.favicon.hash,
如圖
可以看到結果是-1507567067,
知識和經(jīng)驗:信息采集
這個(gè)功能是第一個(gè)數據采集功能,我也做了一個(gè)用于第二個(gè)整理:存檔
如果你有更好的想法和使用方法,歡迎交流
---
以obsidian作為數據處理中心,支持日常工作采集和一鍵生成tick list to-do
支持的采集方式:
1、選擇文字快速采集

2、OCR識別與采集
3、截圖集
4、快速文件采集
操作方法:復制文件或文件夾,可以快速將文件分類(lèi)成黑曜石。如果是文件夾,會(huì )自動(dòng)刪除文件夾,按文件采集
5、數學(xué)公式快速采集(使用默認界面,每次識別花費Q豆)
6、生成待辦事項并設置提醒時(shí)間
一鍵生成文本待辦,并在tick list中回寫(xiě)黑曜石鏈接

一鍵生成文件待辦,在tick列表中回寫(xiě)黑曜石鏈接
7、結合手機日歷功能,可實(shí)現手機自動(dòng)提醒,華為手機可一次性播放日歷內容,使用更方便!
使用前需要下載tick list、obsidian、需要設置的日歷文件夾、附件存放文件夾
官方數據:爬蟲(chóng)數據采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-09-26 07:16
經(jīng)常有小伙伴需要將互聯(lián)網(wǎng)上的數據保存在本地,但又不想一一復制。我們首先想到的就是爬蟲(chóng),可以說(shuō)是組成了我們精彩的互聯(lián)網(wǎng)世界。
網(wǎng)絡(luò )搜索引擎和其他一些網(wǎng)站使用網(wǎng)絡(luò )爬蟲(chóng)或蜘蛛軟件來(lái)更新他們的網(wǎng)絡(luò )內容或其他網(wǎng)站網(wǎng)絡(luò )內容索引。網(wǎng)絡(luò )爬蟲(chóng)復制頁(yè)面以供搜索引擎處理,搜索引擎將下載的頁(yè)面編入索引,以便用戶(hù)更有效地搜索。
這一切都歸功于爬蟲(chóng)數據采集。在這篇文章我總結了爬蟲(chóng)數據采集的過(guò)程,從最簡(jiǎn)單的基礎爬蟲(chóng)開(kāi)始,到爬蟲(chóng)獲取到的數據采集如何存儲,我們如何規避它。采取一些反爬措施,獲取我們需要的數據,進(jìn)行爬蟲(chóng)的數據采集:
通過(guò)以上18篇文章,詳細介紹了整個(gè)爬蟲(chóng)采集流程,幾乎涉及到爬蟲(chóng)的方方面面采集。
解決方案:任意網(wǎng)頁(yè)文章內容提取(采集)算法
任意網(wǎng)頁(yè)文章內容提?。ú杉┧惴?br /> 標簽:采集程序開(kāi)發(fā) 2014-04-09 19:10 星期三
做過(guò)采集的人都知道,要采集一個(gè)網(wǎng)站,需要按照網(wǎng)站的結構寫(xiě)一個(gè)正則模式。這是最傳統的方法。這種方法的好處是采集精度可以很精細,采集任意結構網(wǎng)站,但是這種方法也很有限,一套規則只能用于一個(gè)網(wǎng)站 ,如果結構發(fā)生變化,需要重新分析和調整規則,非常被動(dòng)。
我一直在想,如果程序能達到人類(lèi)的識別水平,那么它就可以采集any網(wǎng)站文本的內容。網(wǎng)上搜索了一下,已經(jīng)有很多類(lèi)似的算法了。有以下幾種:
1、基于Dom樹(shù)
1),使用開(kāi)源包HTML Tidy處理HTML,糾正錯誤或不規范;
2),按照更標準的HTML構建Dom樹(shù),然后遞歸遍歷Dom樹(shù),比較識別各種非文本信息,包括廣告、鏈接組和非重要節點(diǎn)信息;廣告信息清除:需要建立廣告服務(wù)器頻繁更新列表;鏈接組去除:計算網(wǎng)頁(yè)中收錄的鏈接數與非鏈接詞數的比值;
3),去掉非文本信息后,Dom樹(shù)中剩下的內容就是文本信息,直接從剩余的樹(shù)節
從點(diǎn)中提取。
有一個(gè)問(wèn)題:Dom樹(shù)的建立對HTML是否良構有很高的要求,樹(shù)的建立和遍歷是時(shí)空的
復雜度高,遍歷樹(shù)的方式會(huì )因HTML標簽的不同而有所差異。
2、根據網(wǎng)頁(yè)切分查找文本塊
1),網(wǎng)頁(yè)正確切分后,文本提取工作簡(jiǎn)化為對文本塊的判斷;
2),分割是在HTML標簽和一些視覺(jué)信息(如文本顏色、字體大小、文本信息等)中使用分隔線(xiàn)。
存在問(wèn)題:不同網(wǎng)站的HTML樣式差異很大,沒(méi)有統一的切分方法,通用性難以保證。
3、基于標記窗口
1),先取出文章標題;
2),這兩個(gè)標簽和它們一起收錄的文本稱(chēng)為標簽窗口(例如text in text就是標簽窗口中的文本),將標簽窗口中的文本全部取出;
3),每個(gè)標記窗口內的文章標題和文本的分詞;
4),計算標題序列與每個(gè)標簽窗口文本序列之間的單詞距離L,如果L小于某個(gè)閾值,則認為該標簽窗口中的文本為正文。
有一個(gè)問(wèn)題:標注窗口的制定很好,但是每個(gè)標注窗口的文本都要先切分,還要計算詞序距離,效率?
4、基于數據挖掘或機器學(xué)習
使用了文本分類(lèi)、聚類(lèi)、隱馬模型、數據挖掘等。
有問(wèn)題:簡(jiǎn)單的問(wèn)題復雜化。
5、基于邏輯行數和最大接受距離的網(wǎng)頁(yè)文本提取
1),在人們寫(xiě)網(wǎng)頁(yè)的時(shí)候考慮一??些啟發(fā)式規則,考慮到文字的物理位置會(huì )很接近;
2),做出以下推論:
HTML的每一行代表一個(gè)完整的語(yǔ)義;
身體代碼將在物理上靠近;
一行正文代碼主要是文本;
一行正文代碼中的非HTML標簽數量較多;
一行正文代碼中超鏈接長(cháng)度的比例不會(huì )很大;
3),任何符合上述推論的代碼行都被認為是正文行;
有一個(gè)問(wèn)題:文字確實(shí)會(huì )在物理上接近,但是長(cháng)標題和長(cháng)文章評論的鏈接組也滿(mǎn)足上述條件。還是靠html標簽來(lái)做判斷的。
6、基于行塊分布函數的通用網(wǎng)頁(yè)文本提?。壕€(xiàn)性時(shí)間,不建DOM樹(shù),獨立于HTML標簽
首次將網(wǎng)頁(yè)文本提取問(wèn)題轉化為頁(yè)面的行塊分布函數。這種方法不需要構建Dom樹(shù),也沒(méi)有病態(tài)HTML的包袱(其實(shí)和HTML標簽無(wú)關(guān))。通過(guò)線(xiàn)性時(shí)間建立的線(xiàn)塊分布函數圖,可以直接準確定位網(wǎng)頁(yè)正文。同時(shí)采用統計與規則相結合的方法來(lái)處理一般性問(wèn)題。作者認為,簡(jiǎn)單的事情總是應該用最簡(jiǎn)單的方法來(lái)解決。整個(gè)算法實(shí)現代碼不到一百行。但數額并不多,這是在法律規定的。
項目網(wǎng)址:,/p/cx-extractor/
以上算法均來(lái)自第六種算法的分析論文。
第 6 種算法在我看來(lái)是最好的算法,它快速且易于實(shí)現。但也有缺點(diǎn)。該算法主要針對采集文章,即文本內容較多的網(wǎng)頁(yè),因為原理是對網(wǎng)頁(yè)進(jìn)行去標簽,然后分塊,哪個(gè)塊有更多的文字。認為是文字,在使用過(guò)程中發(fā)現如下問(wèn)題:
1、不能采集圖像;
2、誤區采集鏈接聚合塊作為正文,如:相關(guān)文章、文章導讀,這些地方的標題文字有時(shí)可能會(huì )超出正文文本;
3、沒(méi)有標題識別。
對代碼的簡(jiǎn)單修復解決了上述問(wèn)題:
1、保存圖片標簽,改用[img=x];
2、保存鏈接文本,使用[a=x]代替鏈接塊;
3、標題識別比較容易,可以從標題中獲取,然后做簡(jiǎn)單的過(guò)濾。
修改后的程序匹配結果比原算法準確很多,還有很大的調整空間。作者也在論文中解釋了這一點(diǎn)。
目前方案還沒(méi)有完全準確,個(gè)別類(lèi)型網(wǎng)站還是不適用的,比如相冊(純圖片)、電影(線(xiàn)路鏈接)。
應用:,/
網(wǎng)站內容有點(diǎn)亂,基本不能用,還是垃圾網(wǎng)站。相信有的朋友會(huì )在百度找到類(lèi)似的網(wǎng)站,但那些網(wǎng)站可能不是這樣的,也可能是簡(jiǎn)單的關(guān)鍵詞積累。
相信經(jīng)過(guò)重新設計,我們可以實(shí)現更精準的匹配,效果會(huì )越來(lái)越好!
修復完美,到時(shí)候分享代碼。請關(guān)注我的博客Slipper Station(,/),希望和大家一起學(xué)習。 查看全部
官方數據:爬蟲(chóng)數據采集
經(jīng)常有小伙伴需要將互聯(lián)網(wǎng)上的數據保存在本地,但又不想一一復制。我們首先想到的就是爬蟲(chóng),可以說(shuō)是組成了我們精彩的互聯(lián)網(wǎng)世界。

網(wǎng)絡(luò )搜索引擎和其他一些網(wǎng)站使用網(wǎng)絡(luò )爬蟲(chóng)或蜘蛛軟件來(lái)更新他們的網(wǎng)絡(luò )內容或其他網(wǎng)站網(wǎng)絡(luò )內容索引。網(wǎng)絡(luò )爬蟲(chóng)復制頁(yè)面以供搜索引擎處理,搜索引擎將下載的頁(yè)面編入索引,以便用戶(hù)更有效地搜索。
這一切都歸功于爬蟲(chóng)數據采集。在這篇文章我總結了爬蟲(chóng)數據采集的過(guò)程,從最簡(jiǎn)單的基礎爬蟲(chóng)開(kāi)始,到爬蟲(chóng)獲取到的數據采集如何存儲,我們如何規避它。采取一些反爬措施,獲取我們需要的數據,進(jìn)行爬蟲(chóng)的數據采集:

通過(guò)以上18篇文章,詳細介紹了整個(gè)爬蟲(chóng)采集流程,幾乎涉及到爬蟲(chóng)的方方面面采集。
解決方案:任意網(wǎng)頁(yè)文章內容提取(采集)算法
任意網(wǎng)頁(yè)文章內容提?。ú杉┧惴?br /> 標簽:采集程序開(kāi)發(fā) 2014-04-09 19:10 星期三
做過(guò)采集的人都知道,要采集一個(gè)網(wǎng)站,需要按照網(wǎng)站的結構寫(xiě)一個(gè)正則模式。這是最傳統的方法。這種方法的好處是采集精度可以很精細,采集任意結構網(wǎng)站,但是這種方法也很有限,一套規則只能用于一個(gè)網(wǎng)站 ,如果結構發(fā)生變化,需要重新分析和調整規則,非常被動(dòng)。
我一直在想,如果程序能達到人類(lèi)的識別水平,那么它就可以采集any網(wǎng)站文本的內容。網(wǎng)上搜索了一下,已經(jīng)有很多類(lèi)似的算法了。有以下幾種:
1、基于Dom樹(shù)
1),使用開(kāi)源包HTML Tidy處理HTML,糾正錯誤或不規范;
2),按照更標準的HTML構建Dom樹(shù),然后遞歸遍歷Dom樹(shù),比較識別各種非文本信息,包括廣告、鏈接組和非重要節點(diǎn)信息;廣告信息清除:需要建立廣告服務(wù)器頻繁更新列表;鏈接組去除:計算網(wǎng)頁(yè)中收錄的鏈接數與非鏈接詞數的比值;
3),去掉非文本信息后,Dom樹(shù)中剩下的內容就是文本信息,直接從剩余的樹(shù)節
從點(diǎn)中提取。
有一個(gè)問(wèn)題:Dom樹(shù)的建立對HTML是否良構有很高的要求,樹(shù)的建立和遍歷是時(shí)空的
復雜度高,遍歷樹(shù)的方式會(huì )因HTML標簽的不同而有所差異。
2、根據網(wǎng)頁(yè)切分查找文本塊
1),網(wǎng)頁(yè)正確切分后,文本提取工作簡(jiǎn)化為對文本塊的判斷;
2),分割是在HTML標簽和一些視覺(jué)信息(如文本顏色、字體大小、文本信息等)中使用分隔線(xiàn)。
存在問(wèn)題:不同網(wǎng)站的HTML樣式差異很大,沒(méi)有統一的切分方法,通用性難以保證。
3、基于標記窗口
1),先取出文章標題;

2),這兩個(gè)標簽和它們一起收錄的文本稱(chēng)為標簽窗口(例如text in text就是標簽窗口中的文本),將標簽窗口中的文本全部取出;
3),每個(gè)標記窗口內的文章標題和文本的分詞;
4),計算標題序列與每個(gè)標簽窗口文本序列之間的單詞距離L,如果L小于某個(gè)閾值,則認為該標簽窗口中的文本為正文。
有一個(gè)問(wèn)題:標注窗口的制定很好,但是每個(gè)標注窗口的文本都要先切分,還要計算詞序距離,效率?
4、基于數據挖掘或機器學(xué)習
使用了文本分類(lèi)、聚類(lèi)、隱馬模型、數據挖掘等。
有問(wèn)題:簡(jiǎn)單的問(wèn)題復雜化。
5、基于邏輯行數和最大接受距離的網(wǎng)頁(yè)文本提取
1),在人們寫(xiě)網(wǎng)頁(yè)的時(shí)候考慮一??些啟發(fā)式規則,考慮到文字的物理位置會(huì )很接近;
2),做出以下推論:
HTML的每一行代表一個(gè)完整的語(yǔ)義;
身體代碼將在物理上靠近;
一行正文代碼主要是文本;
一行正文代碼中的非HTML標簽數量較多;
一行正文代碼中超鏈接長(cháng)度的比例不會(huì )很大;
3),任何符合上述推論的代碼行都被認為是正文行;
有一個(gè)問(wèn)題:文字確實(shí)會(huì )在物理上接近,但是長(cháng)標題和長(cháng)文章評論的鏈接組也滿(mǎn)足上述條件。還是靠html標簽來(lái)做判斷的。
6、基于行塊分布函數的通用網(wǎng)頁(yè)文本提?。壕€(xiàn)性時(shí)間,不建DOM樹(shù),獨立于HTML標簽

首次將網(wǎng)頁(yè)文本提取問(wèn)題轉化為頁(yè)面的行塊分布函數。這種方法不需要構建Dom樹(shù),也沒(méi)有病態(tài)HTML的包袱(其實(shí)和HTML標簽無(wú)關(guān))。通過(guò)線(xiàn)性時(shí)間建立的線(xiàn)塊分布函數圖,可以直接準確定位網(wǎng)頁(yè)正文。同時(shí)采用統計與規則相結合的方法來(lái)處理一般性問(wèn)題。作者認為,簡(jiǎn)單的事情總是應該用最簡(jiǎn)單的方法來(lái)解決。整個(gè)算法實(shí)現代碼不到一百行。但數額并不多,這是在法律規定的。
項目網(wǎng)址:,/p/cx-extractor/
以上算法均來(lái)自第六種算法的分析論文。
第 6 種算法在我看來(lái)是最好的算法,它快速且易于實(shí)現。但也有缺點(diǎn)。該算法主要針對采集文章,即文本內容較多的網(wǎng)頁(yè),因為原理是對網(wǎng)頁(yè)進(jìn)行去標簽,然后分塊,哪個(gè)塊有更多的文字。認為是文字,在使用過(guò)程中發(fā)現如下問(wèn)題:
1、不能采集圖像;
2、誤區采集鏈接聚合塊作為正文,如:相關(guān)文章、文章導讀,這些地方的標題文字有時(shí)可能會(huì )超出正文文本;
3、沒(méi)有標題識別。
對代碼的簡(jiǎn)單修復解決了上述問(wèn)題:
1、保存圖片標簽,改用[img=x];
2、保存鏈接文本,使用[a=x]代替鏈接塊;
3、標題識別比較容易,可以從標題中獲取,然后做簡(jiǎn)單的過(guò)濾。
修改后的程序匹配結果比原算法準確很多,還有很大的調整空間。作者也在論文中解釋了這一點(diǎn)。
目前方案還沒(méi)有完全準確,個(gè)別類(lèi)型網(wǎng)站還是不適用的,比如相冊(純圖片)、電影(線(xiàn)路鏈接)。
應用:,/
網(wǎng)站內容有點(diǎn)亂,基本不能用,還是垃圾網(wǎng)站。相信有的朋友會(huì )在百度找到類(lèi)似的網(wǎng)站,但那些網(wǎng)站可能不是這樣的,也可能是簡(jiǎn)單的關(guān)鍵詞積累。
相信經(jīng)過(guò)重新設計,我們可以實(shí)現更精準的匹配,效果會(huì )越來(lái)越好!
修復完美,到時(shí)候分享代碼。請關(guān)注我的博客Slipper Station(,/),希望和大家一起學(xué)習。
測評:前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-09-21 13:16
注意干貨,不要迷路
1. 背景
你知道有多少用戶(hù)沒(méi)有等待第一個(gè)屏幕出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。例如,BBC 發(fā)現,他們的 網(wǎng)站 加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高績(jì)效網(wǎng)站比低績(jì)效網(wǎng)站更能吸引和留住用戶(hù),而用戶(hù)留存對于提高用戶(hù)轉化率至關(guān)重要。
本篇文章就是以此為背景,介紹Byte如何內部衡量網(wǎng)站性能,以及如何依靠性能監控來(lái)定位在線(xiàn)網(wǎng)站性能問(wèn)題。
2. 如何衡量網(wǎng)站性能
網(wǎng)站性能有多種表現形式。并不是簡(jiǎn)單的以頁(yè)面加載速度和頁(yè)面渲染速度來(lái)衡量,而是需要關(guān)注用戶(hù)從頁(yè)面加載開(kāi)始到關(guān)閉過(guò)程的性能感知。一個(gè)頁(yè)面,即使渲染得很快,如果對用戶(hù)交互反應慢,那么網(wǎng)站在用戶(hù)心目中的表現還是很差的。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,一類(lèi)是運行時(shí)性能。前者衡量頁(yè)面從加載到穩定交互的性能,后者衡量頁(yè)面穩定后直到頁(yè)面關(guān)閉的性能。
3. 首屏表現
早在 2012 年,Web 性能工作組 [1] 就針對頁(yè)面加載場(chǎng)景開(kāi)發(fā)了一個(gè)加載過(guò)程模型,用于衡量頁(yè)面加載各個(gè)階段的耗時(shí),從而衡量頁(yè)面加載的性能。具體加載過(guò)程模型如圖:
該模型定義了從開(kāi)始頁(yè)面加載到完成整個(gè)頁(yè)面加載過(guò)程的時(shí)間點(diǎn)。除了正常的初始化和拉到主文檔之外,還包括解析和渲染的詳細時(shí)間點(diǎn)。例如:
雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載的性能,但在線(xiàn)用戶(hù)卻無(wú)法真正感知到這些時(shí)間點(diǎn)之間的差異。對于用戶(hù)來(lái)說(shuō),只有頁(yè)面什么時(shí)候開(kāi)始渲染,主要內容什么時(shí)候渲染,什么時(shí)候可以交互,交互是否有延遲。
那么有沒(méi)有什么指標可以用來(lái)衡量用戶(hù)感知的四個(gè)階段呢?
3.1 何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標來(lái)源于Paint Timing [2]標準,主要記錄頁(yè)面加載過(guò)程中的一些關(guān)鍵時(shí)間點(diǎn)。使用這兩個(gè)指標,您可以衡量頁(yè)面何時(shí)開(kāi)始呈現內容。
3.2 主要內容什么時(shí)候渲染:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)呈現其主要內容。但是,業(yè)內一些測試表明,LCP與FMP的時(shí)間點(diǎn)非常相似。同時(shí),FMP對性能的消耗很大,會(huì )因為一些微小的變化而造成數值的巨大波動(dòng)。因此,建議使用 LCP。但由于計算復雜、指標解讀困難,SI一般只用于實(shí)驗室環(huán)境。
3.3 我們什么時(shí)候可以互動(dòng):TTI && TBT
雖然 TTI 可以測量頁(yè)面可以交互的時(shí)間點(diǎn),但它無(wú)法感知此期間瀏覽器的繁忙狀態(tài)。結合 TBT,它有助于了解頁(yè)面在加載期間無(wú)法響應用戶(hù)輸入的時(shí)間。
3.4 交互時(shí)是否有延遲:FID && MPFID
MPFID是虛擬可能的延遲時(shí)間,FID是用戶(hù)真正的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)對整個(gè)應用建立良好的印象。同時(shí),在頁(yè)面加載階段,資源處理任務(wù)最重,最容易出現輸入延遲。
至此,通過(guò)以上各階段的指標,基本可以全面衡量首屏的表現。那么如何衡量運行時(shí)性能呢?
4. 運行時(shí)性能
運行時(shí)性能通??梢酝ㄟ^(guò) Long 任務(wù)來(lái)感知。長(cháng)任務(wù)主要衡量主線(xiàn)程的繁忙程度。
4.1 長(cháng)任務(wù)
如果一個(gè)任務(wù)在主線(xiàn)程上運行的時(shí)間超過(guò) 50 毫秒,它就是一個(gè) Long 任務(wù)。如果你能在運行時(shí)采集所有的 Long 任務(wù),你就可以知道運行時(shí)的性能。在具體實(shí)踐中,可以將注意力集中在耗時(shí)較長(cháng)的長(cháng)任務(wù)上,并將其與用戶(hù)行為相關(guān)聯(lián),可以有效幫助定位網(wǎng)卡原因。
5. 績(jì)效指標的計算原理
有與頁(yè)面性能相關(guān)的指標,那么如何采集這些數據呢?
5.1 采集頁(yè)面加載過(guò)程的耗時(shí)階段
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要取決于 Navigation Timing [4] 標準。該標準后來(lái)升級為 2.0 版本,對應于 Navigation Timing 2 [5] 標準。兩者雖然不同,但可以計算出來(lái)。指標基本一致。在瀏覽器中,可以通過(guò)以下方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
根據這些數據,不僅可以計算出 DNS/TCP/Request 的耗時(shí),還可以計算出 DOMReady/DOMParse/Load 的耗時(shí)。
5.2 采集 FP && FCP
FP和FCP可以直接通過(guò)瀏覽器提供的API獲取,所以采集的原理并不復雜。如果頁(yè)面已經(jīng)完成了第一次繪制和第一次內容繪制,可以使用下面的方法直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有第一次開(kāi)始繪制,則需要通過(guò)監聽(tīng)來(lái)獲取。
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主要依賴(lài)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});
瀏覽器會(huì )多次上報 LCP,一般來(lái)說(shuō)真正的 LCP 是用戶(hù)交互前最近一次上報的 LCP。因為交互往往會(huì )改變用戶(hù)所看到的,所以用戶(hù)交互后新上報的 LCP 不再符合 LCP 指標定義。
5.4 采集 與FP/FCP/LCP相比,FMP的采集比較復雜,需要通過(guò)算法計算,業(yè)界沒(méi)有統一的算法。但是,比較公認的計算FMP的方法是“確定在加載和渲染過(guò)程中頁(yè)面最大布局變化后的繪制時(shí)間為當前頁(yè)面的FMP”。
由于在頁(yè)面渲染過(guò)程中,“DOM結構變化的時(shí)間點(diǎn)”和對應的“渲染時(shí)間點(diǎn)”大致相同,所以?xún)炔恳宰止潪閱挝挥嬎鉌MP的方式是計算DOM結構發(fā)生變化的時(shí)間點(diǎn)大多數,那就是FMP。
具體步驟如下:
通過(guò) MutationObserver 監控整個(gè)頁(yè)面的每一個(gè) DOM 變化,并觸發(fā) MutationObserver 的回調。當回調計算當前DOM樹(shù)的score并結算時(shí),score對比變化最大的時(shí)刻是FMP5.5 采集 TTI && TBT
與FMP類(lèi)似,瀏覽器并沒(méi)有提供直接獲取TTI的API,但是有詳細的說(shuō)明如何計算TTI,通過(guò)實(shí)現相應的說(shuō)明就可以得到TTI的時(shí)間點(diǎn)。
具體描述是:先找到FCP的時(shí)間點(diǎn),然后再找一個(gè)安靜的窗口向前。一個(gè)安靜的窗口需要滿(mǎn)足三個(gè)條件: 1) No Long 任務(wù)。2)窗口中處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗口讀取至少應為 5 秒。
窗口前最后一個(gè)長(cháng)任務(wù)的結束時(shí)間是 TTI。
TBT 可以通過(guò)將 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間相加得到。
阻塞時(shí)間是Long任務(wù)中超過(guò)50ms后的任務(wù)時(shí)間。
5.6 采集 FID && MPFID
FID也依賴(lài)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 之后最長(cháng)的長(cháng)任務(wù)時(shí)間??梢员O控 FCP 后的 Long 任務(wù),比較最長(cháng)的 long 任務(wù)是 MPFID。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集單個(gè)性能指標,但在 JS 中計算特定指標更加復雜。原因有二:一是API上報的內容與指標本身的定義存在一些差異,所以在計算時(shí)需要處理這些差異;二是在某些場(chǎng)景下,瀏覽器不會(huì )上報相應的內容,需要在這些場(chǎng)景下進(jìn)行仿真測量。
6. 如何評估網(wǎng)站的整體性能
盡管有許多績(jì)效指標,但每個(gè)績(jì)效指標評估一個(gè)方面。如何看網(wǎng)站的整體表現是好是壞?對于每一個(gè)單獨的指標,是否有一個(gè)標準來(lái)定義指標值被認為是好的特定范圍?在線(xiàn)網(wǎng)站性能應考慮哪些性能指標?每個(gè)績(jì)效指標的適當權重是多少?
6.1 績(jì)效指標基線(xiàn)
谷歌提供了各種性能指標的基準,具有一定的參考意義。
為什么僅供參考?首先,基線(xiàn)本身正在發(fā)生變化。隨著(zhù)指標計算的逐步更新和軟硬件的更新,基線(xiàn)也會(huì )有一定程度的調整。其次,用戶(hù)的使用場(chǎng)景也會(huì )對性能指標產(chǎn)生很大影響。例如,iOS 用戶(hù)報告的性能指標普遍優(yōu)于 Android 用戶(hù)報告的性能指標。
下面是字節目前內部使用的一些性能指標的基準,基本與谷歌推薦的基準一致。通過(guò)這些數據,可以分析網(wǎng)站的績(jì)效達標率。
指標名稱(chēng)Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500
超過(guò) 2500
FCP
0-1800
1800-3000
超過(guò) 3000
液晶面板
0-2500
2500-4000
超過(guò) 4000
TTI
0-3800
3800-7300
超過(guò) 7300
FID
0-100
100-300
超過(guò) 300
6.2 測量網(wǎng)站滿(mǎn)意度
除了常規的性能指標外,網(wǎng)站滿(mǎn)意度的衡量還應考慮基于體驗的指標,例如專(zhuān)門(mén)衡量視覺(jué)穩定性的 CLS。
在線(xiàn)站點(diǎn)滿(mǎn)意度測量一般會(huì )根據燈塔的滿(mǎn)意度計算規則,去除一些推薦在實(shí)驗室環(huán)境中測量的指標的權重。
以下是Bytes目前使用的在線(xiàn)站點(diǎn)性能滿(mǎn)意度權重計算公式,去掉了SI和TBT這兩個(gè)不推薦用于在線(xiàn)環(huán)境測量的指標。
然后有了一個(gè)站點(diǎn)的滿(mǎn)意度,我們終于可以知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該如何優(yōu)化呢?
7. 如何優(yōu)化網(wǎng)站性能
通常,我們可以從性能指標入手,進(jìn)行有針對性的優(yōu)化。雖然指標不同,但優(yōu)化思路是一樣的。了解指標的依賴(lài)關(guān)系后,可以通過(guò)優(yōu)化指標的相關(guān)依賴(lài)關(guān)系,快速優(yōu)化性能指標,從而提升站點(diǎn)性能。
聽(tīng)起來(lái)很抽象,舉個(gè)例子:比如我們要優(yōu)化TTI的時(shí)候,根據剛才提到的TTI的計算方法,可以得出TTI的依賴(lài)主要有FCP、request和Long任務(wù),然后盡快渲染盡可能快的請求,盡快結束請求,避免長(cháng)時(shí)間的任務(wù)是優(yōu)化的關(guān)鍵。指標的具體優(yōu)化措施有很多,后續文章會(huì )介紹。
了解全面的優(yōu)化措施很重要,但每一項都不一定能有效解決您網(wǎng)站面臨的關(guān)鍵性能問(wèn)題。如何做到立即有針對性的去優(yōu)化?通過(guò)恢復用戶(hù)加載時(shí)的外觀(guān)來(lái)幫助定位性能問(wèn)題是一個(gè)想法。
8. 使用在線(xiàn)監控定位性能問(wèn)題
一般來(lái)說(shuō),前端監控除了監控性能指標外,還會(huì )監控請求、資源加載、Long任務(wù)等數據。這些數據可以幫助還原用戶(hù)的加載場(chǎng)景,幫助尋找線(xiàn)索。
例如,在下面的例子中,很多性能指標都很差。通過(guò)監控平臺還原的資源加載瀑布圖可以看出,大部分時(shí)間都花在了拉取資源上。然后就可以得到一個(gè)初步的性能優(yōu)化方案,把優(yōu)化措施集中在資源優(yōu)化上,比如減小JS文件大小,延遲加載未使用的JS代碼等等。
在線(xiàn)監控的例子很多,可以幫助定位性能問(wèn)題,這里就不一一介紹了。截圖中使用了Byte內部的前端監控平臺。目前該方案已經(jīng)在火山引擎上同步,可以實(shí)時(shí)監控web端的真實(shí)數據,接入即可解決告警歸屬、聚類(lèi)分析、詳細定位等問(wèn)題。白屏、性能瓶頸、查詢(xún)慢等關(guān)鍵問(wèn)題歡迎體驗。
掃描下方二維碼,立即申請免費使用??
最近發(fā)布:WordPress自動(dòng)采集發(fā)布插件專(zhuān)業(yè)版WP AutoPost Pro [更新至
目錄
親測完美運行于的 WordPress 各個(gè)版本,請放心使用。WP-AutoPost-Pro 是一款優(yōu)秀的 WordPress 文章采集器,是您操作站群,讓網(wǎng)站自動(dòng)更新內容的利器!采集插件適用對象1、剛建的wordpress站點(diǎn)內容比較少,希望盡快有比較豐富的內容;2、熱點(diǎn)內容自動(dòng)采集并自動(dòng)發(fā)布;3、定時(shí)采集,手動(dòng)采集發(fā)布或保存到草稿;4、css樣式規則,能更精確的采集需要的內容。5、偽原創(chuàng )與翻譯、代理IP進(jìn)行采集、保存Cookie記錄;6、可采集內容到自定義欄目
WP-AutoPost 插件可以采集來(lái)自于任何網(wǎng)站的內容并全自動(dòng)更新你的WordPress站點(diǎn)。它使用非常簡(jiǎn)單,無(wú)需復雜設置,并且足夠強大和穩定,支持wordpress所有特性??刹杉魏尉W(wǎng)站的內容全自動(dòng)任務(wù)采集定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容基本設置功能齊全,完美支持Wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章可下載遠程圖片及其他任意格式附件到本地服務(wù)器,并支持給圖片自動(dòng)添加水印
如果是新手,請查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自動(dòng)采集發(fā)布插件,最大的特點(diǎn)是可以采集來(lái)自于任何網(wǎng)站的內容并自動(dòng)發(fā)布到你的wordpress站點(diǎn)。不像其他大部分wordpress采集插件,只能根據Feed進(jìn)行采集,使用Feed采集有很大的弊端,首先必須找到全文Feed,而現在網(wǎng)上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要點(diǎn)擊鏈接才能查看原文,相當于給別的網(wǎng)站做外鏈。做英文垃圾站用的比較多的WP-Robot也只有20幾個(gè)采集來(lái)源,文章來(lái)源比較單一有限。而WP-AutoPost就沒(méi)有上面這些劣勢,真正做到可以采集任何網(wǎng)站的內容并自動(dòng)發(fā)布,采集過(guò)程完全自動(dòng)進(jìn)行無(wú)需人工干預,并提供內容過(guò)濾、HTML標簽過(guò)濾、關(guān)鍵詞替換、自動(dòng)鏈接、自動(dòng)標簽、自動(dòng)下載遠程圖片到本地服務(wù)器、自動(dòng)添加文章前綴后綴、并且可以使用微軟翻譯引擎將采集的文章自動(dòng)翻譯為各種語(yǔ)言進(jìn)行發(fā)布。
1.可采集任何網(wǎng)站的內容,采集信息一目了然。
通過(guò)簡(jiǎn)單設置可采集來(lái)自于任何網(wǎng)站的內容,并可設置多個(gè)采集任務(wù)同時(shí)進(jìn)行,可設置任務(wù)為自動(dòng)運行或手動(dòng)運行,主任務(wù)列表顯示每個(gè)采集任務(wù)的狀況:上次檢測采集時(shí)間,預計下次檢測采集時(shí)間,最近采集文章,已采集更新的文章數等信息,方便查看管理。
文章管理功能方便查詢(xún)、搜索、刪除已采集文章,改進(jìn)算法已從根本上杜絕了重復采集相同文章,日志功能記錄采集過(guò)程中出現的異常和抓取錯誤,方便檢查設置錯誤以便進(jìn)行修復。
2.啟用任務(wù)后,全自動(dòng)采集更新,無(wú)需人工干預。
啟用任務(wù)后,定時(shí)檢測是否有新文章可更新,檢測文章是否重復,導入更新文章,這一切操作程序都是全自動(dòng)完成,無(wú)需人工干預。
有兩種觸發(fā)采集更新方式,一種是在頁(yè)面內添加代碼由用戶(hù)訪(fǎng)問(wèn)觸發(fā)采集更新(后臺異步進(jìn)行,不影響用戶(hù)體驗,也不影響網(wǎng)站效率),另外可以用Cron計劃任務(wù)定時(shí)觸發(fā)采集更新任務(wù)
3.定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容。
定向采集只需要提供文章列表URL即可智能采集來(lái)自于任何網(wǎng)站或欄目?jì)热荨?br /> 不僅支持“通配符匹配”來(lái)采集網(wǎng)頁(yè)內容,更完美支持各種CSS選擇器,只需填寫(xiě)簡(jiǎn)單的形如#title h1的CSS選擇器,便可精確采集網(wǎng)頁(yè)任何內容。(如何設置CSS選擇器)
支持設置關(guān)鍵詞,如果標題中包含關(guān)鍵詞才允許采集(或過(guò)濾掉不允許采集)。
支持設置多個(gè)匹配規則采集網(wǎng)頁(yè)上的不同內容,甚至支持采集任何內容添加到“wordpress自定義欄目”,方便擴展。
4.基本設置功能齊全,完美支持wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息
每個(gè)采集任務(wù)均可選擇發(fā)布到的分類(lèi)目錄,發(fā)布作者,發(fā)布狀態(tài),檢測更新時(shí)間間隔,采集目標網(wǎng)站的字符集,選擇是否下載圖片或附件。
支持自定義文章類(lèi)型,自定義文章分類(lèi)、文章形式。
完美支持wordpress各種特色功能,自動(dòng)添加標簽,自動(dòng)生成摘要,自動(dòng)設置特色圖片,支持自定義欄目等。
5.可采集微信公眾號、頭條號等自媒體內容,因百度不收錄公眾號,頭條文章等,可輕松獲取優(yōu)質(zhì)“原創(chuàng )”文章,增加百度收錄量及網(wǎng)站權重
支持采集微信公眾號(訂閱號)文章,無(wú)需復雜配置,只需填入“公眾號名稱(chēng)”和“微信號”后即可開(kāi)始采集。
支持采集今日頭條文章,也無(wú)需復雜配置
微信公眾號及今日頭條由于目標限制,為半自動(dòng)方式采集
6.支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章
支持Google神經(jīng)網(wǎng)絡(luò )翻譯,翻譯質(zhì)量顯著(zhù)提高,已接近人工翻譯效果,將文章標題和內容翻譯成其他語(yǔ)言,共支持多種語(yǔ)言之間相互翻譯,輕松獲取原創(chuàng )文章。使用Google翻譯API無(wú)需翻墻,只需翻墻獲取API相關(guān)設置信息設置好后即可正常使用,后續調用API翻譯無(wú)需翻墻
支持有道神經(jīng)網(wǎng)絡(luò )翻譯,接近人工翻譯效果,有道翻譯更懂中文,采集英文文章翻譯成中文文章,輕松獲取原創(chuàng )文章。
同時(shí)支持百度翻譯,百度翻譯每月翻譯字符數低于200萬(wàn),享免費服務(wù)
7.支持中英文各種偽原創(chuàng )方式
支持使用翻譯引擎獲取偽原創(chuàng )文章,不僅僅只是替換了同義詞,更是語(yǔ)義的重新表述,唯一性、偽原創(chuàng )效果更好,支持各種語(yǔ)言。同時(shí)集成國外最優(yōu)秀偽原創(chuàng )工具WordAi等,制作英文站可以獲取可讀性、唯一性都更好的偽原創(chuàng )文章。
8.支持市面上所有主流對象存儲服務(wù),包括七牛云、阿里云OSS、騰訊云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可將文章中圖片及附件自動(dòng)上傳到云對象存儲服務(wù),節省帶寬及空間,提高網(wǎng)站訪(fǎng)問(wèn)速度
七牛云存儲,每月享10GB的免費存儲空間,10GB免費帶寬流量
只需簡(jiǎn)單配置好相關(guān)信息,即可自動(dòng)上傳,通過(guò)wordpress后臺也能直接查看或管理已上傳到云對象存儲的圖片及文件。
9.支持seo優(yōu)化,內容過(guò)濾,HTML標簽過(guò)濾,關(guān)鍵詞替換,自動(dòng)添加鏈接,添加自定義內容,自定義采集后樣式、自定義模板等常用功能
自動(dòng)刪除采集內容中的HTML注釋?zhuān)稍O置刪除標簽中的id,class,style屬性?xún)热?,消除采集的痕跡;自動(dòng)給圖片添加上alt屬性,過(guò)濾鏈接,關(guān)鍵詞替換,自動(dòng)添加自定義鏈接,這些都有利于SEO。
支持內容過(guò)濾,過(guò)濾采集內容中不希望發(fā)布的內容(如廣告代碼,文章來(lái)源,版權等信息),甚至可以在文章任意位置添加上自定義內容,增強文章獨特性;也可是設置采集后添加自定義樣式功能
也支持HTML標簽過(guò)濾功能,可過(guò)濾掉采集文章中的超鏈接,script和style標簽下的不必要的代碼。
付費高速下載:
資源下載此資源下載價(jià)格為10元,請先登錄
服務(wù)條款:
購買(mǎi)即代表你對本站的無(wú)償捐助,非購買(mǎi)本站資源。部分資源禁止在中國大陸下載使用,違者后果自負。同意本條款你方可購買(mǎi)下載本站資源,不同意請離開(kāi)。
所有資源均需登陸后下載,即使是免費的。 查看全部
測評:前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
注意干貨,不要迷路
1. 背景
你知道有多少用戶(hù)沒(méi)有等待第一個(gè)屏幕出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。例如,BBC 發(fā)現,他們的 網(wǎng)站 加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高績(jì)效網(wǎng)站比低績(jì)效網(wǎng)站更能吸引和留住用戶(hù),而用戶(hù)留存對于提高用戶(hù)轉化率至關(guān)重要。
本篇文章就是以此為背景,介紹Byte如何內部衡量網(wǎng)站性能,以及如何依靠性能監控來(lái)定位在線(xiàn)網(wǎng)站性能問(wèn)題。
2. 如何衡量網(wǎng)站性能
網(wǎng)站性能有多種表現形式。并不是簡(jiǎn)單的以頁(yè)面加載速度和頁(yè)面渲染速度來(lái)衡量,而是需要關(guān)注用戶(hù)從頁(yè)面加載開(kāi)始到關(guān)閉過(guò)程的性能感知。一個(gè)頁(yè)面,即使渲染得很快,如果對用戶(hù)交互反應慢,那么網(wǎng)站在用戶(hù)心目中的表現還是很差的。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,一類(lèi)是運行時(shí)性能。前者衡量頁(yè)面從加載到穩定交互的性能,后者衡量頁(yè)面穩定后直到頁(yè)面關(guān)閉的性能。
3. 首屏表現
早在 2012 年,Web 性能工作組 [1] 就針對頁(yè)面加載場(chǎng)景開(kāi)發(fā)了一個(gè)加載過(guò)程模型,用于衡量頁(yè)面加載各個(gè)階段的耗時(shí),從而衡量頁(yè)面加載的性能。具體加載過(guò)程模型如圖:
該模型定義了從開(kāi)始頁(yè)面加載到完成整個(gè)頁(yè)面加載過(guò)程的時(shí)間點(diǎn)。除了正常的初始化和拉到主文檔之外,還包括解析和渲染的詳細時(shí)間點(diǎn)。例如:
雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載的性能,但在線(xiàn)用戶(hù)卻無(wú)法真正感知到這些時(shí)間點(diǎn)之間的差異。對于用戶(hù)來(lái)說(shuō),只有頁(yè)面什么時(shí)候開(kāi)始渲染,主要內容什么時(shí)候渲染,什么時(shí)候可以交互,交互是否有延遲。
那么有沒(méi)有什么指標可以用來(lái)衡量用戶(hù)感知的四個(gè)階段呢?
3.1 何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標來(lái)源于Paint Timing [2]標準,主要記錄頁(yè)面加載過(guò)程中的一些關(guān)鍵時(shí)間點(diǎn)。使用這兩個(gè)指標,您可以衡量頁(yè)面何時(shí)開(kāi)始呈現內容。
3.2 主要內容什么時(shí)候渲染:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)呈現其主要內容。但是,業(yè)內一些測試表明,LCP與FMP的時(shí)間點(diǎn)非常相似。同時(shí),FMP對性能的消耗很大,會(huì )因為一些微小的變化而造成數值的巨大波動(dòng)。因此,建議使用 LCP。但由于計算復雜、指標解讀困難,SI一般只用于實(shí)驗室環(huán)境。
3.3 我們什么時(shí)候可以互動(dòng):TTI && TBT
雖然 TTI 可以測量頁(yè)面可以交互的時(shí)間點(diǎn),但它無(wú)法感知此期間瀏覽器的繁忙狀態(tài)。結合 TBT,它有助于了解頁(yè)面在加載期間無(wú)法響應用戶(hù)輸入的時(shí)間。
3.4 交互時(shí)是否有延遲:FID && MPFID
MPFID是虛擬可能的延遲時(shí)間,FID是用戶(hù)真正的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)對整個(gè)應用建立良好的印象。同時(shí),在頁(yè)面加載階段,資源處理任務(wù)最重,最容易出現輸入延遲。
至此,通過(guò)以上各階段的指標,基本可以全面衡量首屏的表現。那么如何衡量運行時(shí)性能呢?
4. 運行時(shí)性能
運行時(shí)性能通??梢酝ㄟ^(guò) Long 任務(wù)來(lái)感知。長(cháng)任務(wù)主要衡量主線(xiàn)程的繁忙程度。
4.1 長(cháng)任務(wù)
如果一個(gè)任務(wù)在主線(xiàn)程上運行的時(shí)間超過(guò) 50 毫秒,它就是一個(gè) Long 任務(wù)。如果你能在運行時(shí)采集所有的 Long 任務(wù),你就可以知道運行時(shí)的性能。在具體實(shí)踐中,可以將注意力集中在耗時(shí)較長(cháng)的長(cháng)任務(wù)上,并將其與用戶(hù)行為相關(guān)聯(lián),可以有效幫助定位網(wǎng)卡原因。
5. 績(jì)效指標的計算原理
有與頁(yè)面性能相關(guān)的指標,那么如何采集這些數據呢?
5.1 采集頁(yè)面加載過(guò)程的耗時(shí)階段
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要取決于 Navigation Timing [4] 標準。該標準后來(lái)升級為 2.0 版本,對應于 Navigation Timing 2 [5] 標準。兩者雖然不同,但可以計算出來(lái)。指標基本一致。在瀏覽器中,可以通過(guò)以下方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
根據這些數據,不僅可以計算出 DNS/TCP/Request 的耗時(shí),還可以計算出 DOMReady/DOMParse/Load 的耗時(shí)。

5.2 采集 FP && FCP
FP和FCP可以直接通過(guò)瀏覽器提供的API獲取,所以采集的原理并不復雜。如果頁(yè)面已經(jīng)完成了第一次繪制和第一次內容繪制,可以使用下面的方法直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有第一次開(kāi)始繪制,則需要通過(guò)監聽(tīng)來(lái)獲取。
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主要依賴(lài)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});
瀏覽器會(huì )多次上報 LCP,一般來(lái)說(shuō)真正的 LCP 是用戶(hù)交互前最近一次上報的 LCP。因為交互往往會(huì )改變用戶(hù)所看到的,所以用戶(hù)交互后新上報的 LCP 不再符合 LCP 指標定義。
5.4 采集 與FP/FCP/LCP相比,FMP的采集比較復雜,需要通過(guò)算法計算,業(yè)界沒(méi)有統一的算法。但是,比較公認的計算FMP的方法是“確定在加載和渲染過(guò)程中頁(yè)面最大布局變化后的繪制時(shí)間為當前頁(yè)面的FMP”。
由于在頁(yè)面渲染過(guò)程中,“DOM結構變化的時(shí)間點(diǎn)”和對應的“渲染時(shí)間點(diǎn)”大致相同,所以?xún)炔恳宰止潪閱挝挥嬎鉌MP的方式是計算DOM結構發(fā)生變化的時(shí)間點(diǎn)大多數,那就是FMP。
具體步驟如下:
通過(guò) MutationObserver 監控整個(gè)頁(yè)面的每一個(gè) DOM 變化,并觸發(fā) MutationObserver 的回調。當回調計算當前DOM樹(shù)的score并結算時(shí),score對比變化最大的時(shí)刻是FMP5.5 采集 TTI && TBT
與FMP類(lèi)似,瀏覽器并沒(méi)有提供直接獲取TTI的API,但是有詳細的說(shuō)明如何計算TTI,通過(guò)實(shí)現相應的說(shuō)明就可以得到TTI的時(shí)間點(diǎn)。
具體描述是:先找到FCP的時(shí)間點(diǎn),然后再找一個(gè)安靜的窗口向前。一個(gè)安靜的窗口需要滿(mǎn)足三個(gè)條件: 1) No Long 任務(wù)。2)窗口中處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗口讀取至少應為 5 秒。
窗口前最后一個(gè)長(cháng)任務(wù)的結束時(shí)間是 TTI。
TBT 可以通過(guò)將 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間相加得到。
阻塞時(shí)間是Long任務(wù)中超過(guò)50ms后的任務(wù)時(shí)間。
5.6 采集 FID && MPFID
FID也依賴(lài)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 之后最長(cháng)的長(cháng)任務(wù)時(shí)間??梢员O控 FCP 后的 Long 任務(wù),比較最長(cháng)的 long 任務(wù)是 MPFID。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集單個(gè)性能指標,但在 JS 中計算特定指標更加復雜。原因有二:一是API上報的內容與指標本身的定義存在一些差異,所以在計算時(shí)需要處理這些差異;二是在某些場(chǎng)景下,瀏覽器不會(huì )上報相應的內容,需要在這些場(chǎng)景下進(jìn)行仿真測量。
6. 如何評估網(wǎng)站的整體性能
盡管有許多績(jì)效指標,但每個(gè)績(jì)效指標評估一個(gè)方面。如何看網(wǎng)站的整體表現是好是壞?對于每一個(gè)單獨的指標,是否有一個(gè)標準來(lái)定義指標值被認為是好的特定范圍?在線(xiàn)網(wǎng)站性能應考慮哪些性能指標?每個(gè)績(jì)效指標的適當權重是多少?
6.1 績(jì)效指標基線(xiàn)
谷歌提供了各種性能指標的基準,具有一定的參考意義。
為什么僅供參考?首先,基線(xiàn)本身正在發(fā)生變化。隨著(zhù)指標計算的逐步更新和軟硬件的更新,基線(xiàn)也會(huì )有一定程度的調整。其次,用戶(hù)的使用場(chǎng)景也會(huì )對性能指標產(chǎn)生很大影響。例如,iOS 用戶(hù)報告的性能指標普遍優(yōu)于 Android 用戶(hù)報告的性能指標。
下面是字節目前內部使用的一些性能指標的基準,基本與谷歌推薦的基準一致。通過(guò)這些數據,可以分析網(wǎng)站的績(jì)效達標率。
指標名稱(chēng)Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500

超過(guò) 2500
FCP
0-1800
1800-3000
超過(guò) 3000
液晶面板
0-2500
2500-4000
超過(guò) 4000
TTI
0-3800
3800-7300
超過(guò) 7300
FID
0-100
100-300
超過(guò) 300
6.2 測量網(wǎng)站滿(mǎn)意度
除了常規的性能指標外,網(wǎng)站滿(mǎn)意度的衡量還應考慮基于體驗的指標,例如專(zhuān)門(mén)衡量視覺(jué)穩定性的 CLS。
在線(xiàn)站點(diǎn)滿(mǎn)意度測量一般會(huì )根據燈塔的滿(mǎn)意度計算規則,去除一些推薦在實(shí)驗室環(huán)境中測量的指標的權重。
以下是Bytes目前使用的在線(xiàn)站點(diǎn)性能滿(mǎn)意度權重計算公式,去掉了SI和TBT這兩個(gè)不推薦用于在線(xiàn)環(huán)境測量的指標。
然后有了一個(gè)站點(diǎn)的滿(mǎn)意度,我們終于可以知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該如何優(yōu)化呢?
7. 如何優(yōu)化網(wǎng)站性能
通常,我們可以從性能指標入手,進(jìn)行有針對性的優(yōu)化。雖然指標不同,但優(yōu)化思路是一樣的。了解指標的依賴(lài)關(guān)系后,可以通過(guò)優(yōu)化指標的相關(guān)依賴(lài)關(guān)系,快速優(yōu)化性能指標,從而提升站點(diǎn)性能。
聽(tīng)起來(lái)很抽象,舉個(gè)例子:比如我們要優(yōu)化TTI的時(shí)候,根據剛才提到的TTI的計算方法,可以得出TTI的依賴(lài)主要有FCP、request和Long任務(wù),然后盡快渲染盡可能快的請求,盡快結束請求,避免長(cháng)時(shí)間的任務(wù)是優(yōu)化的關(guān)鍵。指標的具體優(yōu)化措施有很多,后續文章會(huì )介紹。
了解全面的優(yōu)化措施很重要,但每一項都不一定能有效解決您網(wǎng)站面臨的關(guān)鍵性能問(wèn)題。如何做到立即有針對性的去優(yōu)化?通過(guò)恢復用戶(hù)加載時(shí)的外觀(guān)來(lái)幫助定位性能問(wèn)題是一個(gè)想法。
8. 使用在線(xiàn)監控定位性能問(wèn)題
一般來(lái)說(shuō),前端監控除了監控性能指標外,還會(huì )監控請求、資源加載、Long任務(wù)等數據。這些數據可以幫助還原用戶(hù)的加載場(chǎng)景,幫助尋找線(xiàn)索。
例如,在下面的例子中,很多性能指標都很差。通過(guò)監控平臺還原的資源加載瀑布圖可以看出,大部分時(shí)間都花在了拉取資源上。然后就可以得到一個(gè)初步的性能優(yōu)化方案,把優(yōu)化措施集中在資源優(yōu)化上,比如減小JS文件大小,延遲加載未使用的JS代碼等等。
在線(xiàn)監控的例子很多,可以幫助定位性能問(wèn)題,這里就不一一介紹了。截圖中使用了Byte內部的前端監控平臺。目前該方案已經(jīng)在火山引擎上同步,可以實(shí)時(shí)監控web端的真實(shí)數據,接入即可解決告警歸屬、聚類(lèi)分析、詳細定位等問(wèn)題。白屏、性能瓶頸、查詢(xún)慢等關(guān)鍵問(wèn)題歡迎體驗。
掃描下方二維碼,立即申請免費使用??
最近發(fā)布:WordPress自動(dòng)采集發(fā)布插件專(zhuān)業(yè)版WP AutoPost Pro [更新至
目錄
親測完美運行于的 WordPress 各個(gè)版本,請放心使用。WP-AutoPost-Pro 是一款優(yōu)秀的 WordPress 文章采集器,是您操作站群,讓網(wǎng)站自動(dòng)更新內容的利器!采集插件適用對象1、剛建的wordpress站點(diǎn)內容比較少,希望盡快有比較豐富的內容;2、熱點(diǎn)內容自動(dòng)采集并自動(dòng)發(fā)布;3、定時(shí)采集,手動(dòng)采集發(fā)布或保存到草稿;4、css樣式規則,能更精確的采集需要的內容。5、偽原創(chuàng )與翻譯、代理IP進(jìn)行采集、保存Cookie記錄;6、可采集內容到自定義欄目
WP-AutoPost 插件可以采集來(lái)自于任何網(wǎng)站的內容并全自動(dòng)更新你的WordPress站點(diǎn)。它使用非常簡(jiǎn)單,無(wú)需復雜設置,并且足夠強大和穩定,支持wordpress所有特性??刹杉魏尉W(wǎng)站的內容全自動(dòng)任務(wù)采集定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容基本設置功能齊全,完美支持Wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章可下載遠程圖片及其他任意格式附件到本地服務(wù)器,并支持給圖片自動(dòng)添加水印
如果是新手,請查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自動(dòng)采集發(fā)布插件,最大的特點(diǎn)是可以采集來(lái)自于任何網(wǎng)站的內容并自動(dòng)發(fā)布到你的wordpress站點(diǎn)。不像其他大部分wordpress采集插件,只能根據Feed進(jìn)行采集,使用Feed采集有很大的弊端,首先必須找到全文Feed,而現在網(wǎng)上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要點(diǎn)擊鏈接才能查看原文,相當于給別的網(wǎng)站做外鏈。做英文垃圾站用的比較多的WP-Robot也只有20幾個(gè)采集來(lái)源,文章來(lái)源比較單一有限。而WP-AutoPost就沒(méi)有上面這些劣勢,真正做到可以采集任何網(wǎng)站的內容并自動(dòng)發(fā)布,采集過(guò)程完全自動(dòng)進(jìn)行無(wú)需人工干預,并提供內容過(guò)濾、HTML標簽過(guò)濾、關(guān)鍵詞替換、自動(dòng)鏈接、自動(dòng)標簽、自動(dòng)下載遠程圖片到本地服務(wù)器、自動(dòng)添加文章前綴后綴、并且可以使用微軟翻譯引擎將采集的文章自動(dòng)翻譯為各種語(yǔ)言進(jìn)行發(fā)布。
1.可采集任何網(wǎng)站的內容,采集信息一目了然。
通過(guò)簡(jiǎn)單設置可采集來(lái)自于任何網(wǎng)站的內容,并可設置多個(gè)采集任務(wù)同時(shí)進(jìn)行,可設置任務(wù)為自動(dòng)運行或手動(dòng)運行,主任務(wù)列表顯示每個(gè)采集任務(wù)的狀況:上次檢測采集時(shí)間,預計下次檢測采集時(shí)間,最近采集文章,已采集更新的文章數等信息,方便查看管理。
文章管理功能方便查詢(xún)、搜索、刪除已采集文章,改進(jìn)算法已從根本上杜絕了重復采集相同文章,日志功能記錄采集過(guò)程中出現的異常和抓取錯誤,方便檢查設置錯誤以便進(jìn)行修復。
2.啟用任務(wù)后,全自動(dòng)采集更新,無(wú)需人工干預。
啟用任務(wù)后,定時(shí)檢測是否有新文章可更新,檢測文章是否重復,導入更新文章,這一切操作程序都是全自動(dòng)完成,無(wú)需人工干預。
有兩種觸發(fā)采集更新方式,一種是在頁(yè)面內添加代碼由用戶(hù)訪(fǎng)問(wèn)觸發(fā)采集更新(后臺異步進(jìn)行,不影響用戶(hù)體驗,也不影響網(wǎng)站效率),另外可以用Cron計劃任務(wù)定時(shí)觸發(fā)采集更新任務(wù)
3.定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容。
定向采集只需要提供文章列表URL即可智能采集來(lái)自于任何網(wǎng)站或欄目?jì)热荨?br /> 不僅支持“通配符匹配”來(lái)采集網(wǎng)頁(yè)內容,更完美支持各種CSS選擇器,只需填寫(xiě)簡(jiǎn)單的形如#title h1的CSS選擇器,便可精確采集網(wǎng)頁(yè)任何內容。(如何設置CSS選擇器)

支持設置關(guān)鍵詞,如果標題中包含關(guān)鍵詞才允許采集(或過(guò)濾掉不允許采集)。
支持設置多個(gè)匹配規則采集網(wǎng)頁(yè)上的不同內容,甚至支持采集任何內容添加到“wordpress自定義欄目”,方便擴展。
4.基本設置功能齊全,完美支持wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息
每個(gè)采集任務(wù)均可選擇發(fā)布到的分類(lèi)目錄,發(fā)布作者,發(fā)布狀態(tài),檢測更新時(shí)間間隔,采集目標網(wǎng)站的字符集,選擇是否下載圖片或附件。
支持自定義文章類(lèi)型,自定義文章分類(lèi)、文章形式。
完美支持wordpress各種特色功能,自動(dòng)添加標簽,自動(dòng)生成摘要,自動(dòng)設置特色圖片,支持自定義欄目等。
5.可采集微信公眾號、頭條號等自媒體內容,因百度不收錄公眾號,頭條文章等,可輕松獲取優(yōu)質(zhì)“原創(chuàng )”文章,增加百度收錄量及網(wǎng)站權重
支持采集微信公眾號(訂閱號)文章,無(wú)需復雜配置,只需填入“公眾號名稱(chēng)”和“微信號”后即可開(kāi)始采集。
支持采集今日頭條文章,也無(wú)需復雜配置
微信公眾號及今日頭條由于目標限制,為半自動(dòng)方式采集
6.支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章
支持Google神經(jīng)網(wǎng)絡(luò )翻譯,翻譯質(zhì)量顯著(zhù)提高,已接近人工翻譯效果,將文章標題和內容翻譯成其他語(yǔ)言,共支持多種語(yǔ)言之間相互翻譯,輕松獲取原創(chuàng )文章。使用Google翻譯API無(wú)需翻墻,只需翻墻獲取API相關(guān)設置信息設置好后即可正常使用,后續調用API翻譯無(wú)需翻墻
支持有道神經(jīng)網(wǎng)絡(luò )翻譯,接近人工翻譯效果,有道翻譯更懂中文,采集英文文章翻譯成中文文章,輕松獲取原創(chuàng )文章。
同時(shí)支持百度翻譯,百度翻譯每月翻譯字符數低于200萬(wàn),享免費服務(wù)

7.支持中英文各種偽原創(chuàng )方式
支持使用翻譯引擎獲取偽原創(chuàng )文章,不僅僅只是替換了同義詞,更是語(yǔ)義的重新表述,唯一性、偽原創(chuàng )效果更好,支持各種語(yǔ)言。同時(shí)集成國外最優(yōu)秀偽原創(chuàng )工具WordAi等,制作英文站可以獲取可讀性、唯一性都更好的偽原創(chuàng )文章。
8.支持市面上所有主流對象存儲服務(wù),包括七牛云、阿里云OSS、騰訊云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可將文章中圖片及附件自動(dòng)上傳到云對象存儲服務(wù),節省帶寬及空間,提高網(wǎng)站訪(fǎng)問(wèn)速度
七牛云存儲,每月享10GB的免費存儲空間,10GB免費帶寬流量
只需簡(jiǎn)單配置好相關(guān)信息,即可自動(dòng)上傳,通過(guò)wordpress后臺也能直接查看或管理已上傳到云對象存儲的圖片及文件。
9.支持seo優(yōu)化,內容過(guò)濾,HTML標簽過(guò)濾,關(guān)鍵詞替換,自動(dòng)添加鏈接,添加自定義內容,自定義采集后樣式、自定義模板等常用功能
自動(dòng)刪除采集內容中的HTML注釋?zhuān)稍O置刪除標簽中的id,class,style屬性?xún)热?,消除采集的痕跡;自動(dòng)給圖片添加上alt屬性,過(guò)濾鏈接,關(guān)鍵詞替換,自動(dòng)添加自定義鏈接,這些都有利于SEO。
支持內容過(guò)濾,過(guò)濾采集內容中不希望發(fā)布的內容(如廣告代碼,文章來(lái)源,版權等信息),甚至可以在文章任意位置添加上自定義內容,增強文章獨特性;也可是設置采集后添加自定義樣式功能
也支持HTML標簽過(guò)濾功能,可過(guò)濾掉采集文章中的超鏈接,script和style標簽下的不必要的代碼。
付費高速下載:
資源下載此資源下載價(jià)格為10元,請先登錄
服務(wù)條款:
購買(mǎi)即代表你對本站的無(wú)償捐助,非購買(mǎi)本站資源。部分資源禁止在中國大陸下載使用,違者后果自負。同意本條款你方可購買(mǎi)下載本站資源,不同意請離開(kāi)。
所有資源均需登陸后下載,即使是免費的。
SRC漏洞挖掘與最重要的環(huán)節——信息收集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 664 次瀏覽 ? 2022-09-19 20:23
SRC挖掘有很多平臺,比如EDUSRC,比如公益SRC:補天、漏洞盒子等,還有就是一些企業(yè)SRC。對于挖掘src的小伙伴來(lái)說(shuō)第一步都是對資產(chǎn)進(jìn)行收集,所以本篇文章首先介紹一下SRC的上分思路,然后會(huì )具體講解一下信息收集的思路。
公益SRC對于公益SRC來(lái)說(shuō),會(huì )存在各種各樣的漏洞,SQL注入、反射XSS、存儲XSS、任意注冊、cms通殺、弱口令還有邏輯漏洞,公益SRC主要比拼的無(wú)非就是手速,手速決定一切,提交的最多的一般還是sql注入、弱口令、和cms通殺。公益SRC想要沖榜的話(huà)可以選擇一些有大的安全活動(dòng)的時(shí)間,大佬們去參加安全活動(dòng),這個(gè)時(shí)候可以取巧,上榜會(huì )稍微輕松一點(diǎn)。對于公益SRC來(lái)說(shuō),想要沖榜就不能在一個(gè)站上浪費大量時(shí)間,公益SRC對洞的質(zhì)量要求不高,所以只要 花時(shí)間,還是可以上榜的。谷歌鏡像站:
SQL注入SQL注入的話(huà)主要通過(guò)google語(yǔ)法或者fofa進(jìn)行搜索查找,使用inurl關(guān)鍵字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa進(jìn)行特定網(wǎng)站搜索,還是進(jìn)行信息收集,只使用一種關(guān)鍵字對站點(diǎn)去進(jìn)行查找是絕對無(wú)法找全的,關(guān)鍵字有很多,思路也有很多,思維不能局限住,要不斷地去變換??梢試L試這么去構造Google語(yǔ)句:地區inurl:"type_id=1"、行業(yè)inurl:"ptherinfo.asp?id=1"地區和行業(yè)可以任意替換,在提交漏洞的地方通常會(huì )有一個(gè)選項,選擇漏洞所屬地區和所屬行業(yè),可以以此為準一個(gè)一個(gè)找,之后還可以將php替換為asp、aspx、jsp等站點(diǎn)。在對某站點(diǎn)進(jìn)行測試SQL注入的時(shí)候,先通過(guò)一些方式測試是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工測試,然后提交漏洞。
XSS對于XSS來(lái)說(shuō)可能并不好找,所以我認為沒(méi)必要太刻意的去挖XSS,不管是反射型還是存儲型,所以我認為在測試sql注入的時(shí)候順帶對XSS進(jìn)行測試就好了。但是如果想要專(zhuān)門(mén)挖xss,在實(shí)戰中學(xué)習,也可以通過(guò)和sql注入一樣的語(yǔ)法,改變幾個(gè)關(guān)鍵字就好了,比如:地區inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注冊如果你想要挖任意注冊漏洞,那么你首先需要了解什么是任意注冊,任意注冊是一種程序設計的缺陷,顧名思義就是隨便注冊,不需要什么條件,注冊處無(wú)任何驗證。Google語(yǔ)法關(guān)鍵詞:地區/行業(yè)inurl:"register"、地區/行業(yè)inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注冊算是低危漏洞,不過(guò)也有兩分。任意注冊沒(méi)多少人挖,可以嘗試挖掘。去漏洞盒子提交漏洞的時(shí)候,可以看下漏洞類(lèi)型,可以挑一些你認為漏洞比較冷門(mén)沒(méi)人挖并且普遍存在的去下手。
CMS通殺普通人找通殺的思路無(wú)法就是百度谷歌搜索cms通殺,但是其實(shí)這樣的效率并不高,通殺也找不到幾個(gè),這里建議可以去一些漏洞文庫,建議多進(jìn)行漏洞復現,多實(shí)戰,多積累實(shí)戰經(jīng)驗,復現漏洞也是一種積累。
弱口令嘗試弱口令的過(guò)程比較繁瑣,但是最好老老實(shí)實(shí)的手工上分,百度或者谷歌語(yǔ)法搜索后臺站點(diǎn)。如:山西inurl:"后臺"可以嘗試:賬號:admin/test/cs/ceshi/test01等 密碼:admin/123456/a123456/admin123/admin123456等。也可以借助fofa對后臺站點(diǎn)進(jìn)行搜索:title="后臺管理" && country="CN"
EDUSRCfofa語(yǔ)句(查找edu里的管理系統):"管理系統" && org="China Education and Research Network Center"對于EDUSRC來(lái)說(shuō),想上分的同學(xué)主要有兩種方式:1.挖通用性漏洞。找一些站點(diǎn)或者系統,被廣大學(xué)校所使用,覆蓋率很高,再去對這個(gè)站點(diǎn)或者系統進(jìn)行漏洞挖掘,挖掘到之后就可以批量刷分。2.定點(diǎn)打擊。對一個(gè)學(xué)校埋頭苦干,通過(guò)一些信息泄露或者一些學(xué)生的微博、朋友圈等,獲取一些學(xué)生的相關(guān)信息,比如學(xué)號、身份信息號碼、電話(huà)等等,嘗試登入校園內網(wǎng)或者登錄校園統一身份認證系統,對內網(wǎng)進(jìn)行漏洞挖掘,直接日穿。使用Google語(yǔ)法進(jìn)行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本內容:site:域名 intext:管理|后臺|登陸|用戶(hù)名|密碼|驗證碼|系統|帳號|admin|login|sys|managetem|password|username查找可注入點(diǎn):site:域名 inurl:aspx|jsp|php|asp查找上傳漏洞:site:域名 inurl:file|load|editor|Files找eweb編輯器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的數據庫:site:域名 filetype:mdb|asp|#查看腳本類(lèi)型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集滲透測試的本質(zhì)就是信息收集,信息搜集的廣度決定了攻擊的廣度,知識面的廣度決定了攻擊的深度。不管是進(jìn)行SRC漏洞挖掘,還是做項目進(jìn)行滲透測試,又或者是打紅藍對抗,一定要做好信息收集。信息收集很重要,如確定資產(chǎn),比如他有哪些域名、子域名、C段、旁站、系統、微信小程序或者公眾號,確定好站點(diǎn)或者目標系統之后,就是常規的指紋識別,像中間件、網(wǎng)站,掃目錄,后臺,確定功能然后分析每個(gè)功能點(diǎn)上會(huì )有哪些漏洞,就比如一個(gè)登錄頁(yè)面,我們可以考慮的是爆破賬號密碼,社工賬號密碼,SQL注入,XSS漏洞,邏輯漏洞繞過(guò)等。如果大家挖掘SRC的水平都是一樣的或者說(shuō)我們對于各種操作都是同樣了解的,那么如果超越別人,如果你挖的比別人慢,那么你后期提交的漏洞會(huì )撞洞,然后忽略處理。在短時(shí)間內你無(wú)法去提升你的技術(shù)或者是挖掘一個(gè)新的思路,這個(gè)時(shí)候就體現了資產(chǎn)搜集的能力,信息搜集是最難的,也是最麻煩耽誤時(shí)間的,且必須要實(shí)時(shí)去關(guān)注的一件事情。一些常用網(wǎng)站:ICP備案查詢(xún):權重查詢(xún):多地ping:whois查詢(xún):IP反查:以xxx公司為例,根域名:信息收集可以從多個(gè)領(lǐng)域來(lái)看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC軟件等等可以重點(diǎn)關(guān)注備案網(wǎng)站,APP,小程序,微信公眾號,甚至是微博。這里說(shuō)一點(diǎn)小思路,首先可以找到官網(wǎng),用cmd ping他的官網(wǎng),可以看到IP地址,然后可以定位whois,whois中包含了用戶(hù)、郵箱,以及購買(mǎi)的網(wǎng)段。有了網(wǎng)段就可以進(jìn)行一些主動(dòng)信息收集,可以使用一些強大的資產(chǎn)測繪工具,goby的資產(chǎn)測繪還是很不錯的,會(huì )有一些web服務(wù),不用擔心沒(méi)有banner,往往這些沒(méi)有banner的才有問(wèn)題。注意觀(guān)察一下網(wǎng)站底部是否有技術(shù)支持:xxxx|網(wǎng)站建設:xxxx之類(lèi)的標注,一些建站企業(yè)會(huì )出于知識產(chǎn)權保護或者是對外宣傳自己的公司,會(huì )在自家搭建的網(wǎng)站上掛上技術(shù)支持等之類(lèi)的標注,很多建站企業(yè)往往某種類(lèi)型的網(wǎng)站都是套用的同一套源碼,換湯不換藥,運氣不錯的話(huà),那我們的事件就秒變通用。
子域名收集Oneforall盡量多湊一點(diǎn)API,fofa可以找人借一些api,越多越好。執行命令:常用的獲取子域名有2種選擇,一種使用--target指定單個(gè)域名,一種使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤輿)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中尋找URL和子域名的工具,在網(wǎng)站的JS文件中,會(huì )存在各種對測試有幫助的內容,JSFinder可以幫我們獲取到JS中的url和子域名的信息,擴展我們的滲透范圍。爬取分為普通爬取和深度爬取,深度爬取會(huì )深入下一層頁(yè)面爬取的JS,時(shí)間會(huì )消耗的相對較長(cháng)。執行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt運行結束后會(huì )生成兩個(gè)txt文本,Jsurl.txt為URL里面會(huì )有一些接口什么的,Jsdomain.txt為子域名基于TamperMonkey的版本:Layer、子域名收割機 進(jìn)行挖掘通過(guò)這些域名收集工具(layer子域名挖掘機、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)進(jìn)行挖掘。
在線(xiàn)網(wǎng)站查詢(xún)?yōu)榱吮苊釯P被封掉,直接使用在線(xiàn)的子域名爆破網(wǎng)站。subDomainBrute執行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全掃描。Sublist3rKali和Windows環(huán)境下都可以裝這個(gè)工具,Sublist3r是一個(gè)python版工具,其原理是基于通過(guò)使用搜索引擎,從而對站點(diǎn)子域名進(jìn)行列舉。Kali:git clone 執行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一個(gè)域名搜索網(wǎng)站,還會(huì )自動(dòng)歸納同一個(gè)IP的多個(gè)域名。在線(xiàn)域名爆破小藍本通過(guò)小藍本進(jìn)行查詢(xún):愛(ài)企查、企查查、天眼查之前愛(ài)企查活動(dòng)送了會(huì )員,可以更好的進(jìn)行查詢(xún)。谷歌語(yǔ)法迅速查找信息泄露、管理后臺暴露等漏洞語(yǔ)法,例如:filetype:txt 登錄filetype:xls 登錄filetype:doc 登錄intitle:后臺管理intitle:loginintitle:后臺管理 inurl:adminintitle:index of /查找指定網(wǎng)站,再加上site:,例如:site: filetype:txt 登錄site: intitle:后臺管理site: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統谷歌/必應:site:site:如果發(fā)現檢索出來(lái)的很多結果都是www,眾所周知主站一般防御很?chē)?,如果我們不想看到主站可以直?-wwwsite: -www這樣出來(lái)的結果會(huì )自動(dòng)刪去wwwShodan、fofa、zoomeye、360quake等忘了資產(chǎn)搜索引擎fofa語(yǔ)法FOFA作為一個(gè)搜索引擎,我們要熟悉它的查詢(xún)語(yǔ)法,類(lèi)似google語(yǔ)法,FOFA的語(yǔ)法主要分為檢索字段以及運算符,所有的查詢(xún)語(yǔ)句都是由這兩種元素組成的。
目前支持的檢索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的邏輯運算符包括:=,==,!=,&&,||。如果搜索title字段中存在后臺的網(wǎng)站,我們只需要在輸入欄中輸入title=“后臺”,輸出的結果即為全網(wǎng)title中存在后臺兩個(gè)字的網(wǎng)站,可以利用得到的信息繼續進(jìn)行滲透攻擊,對于網(wǎng)站的后臺進(jìn)行密碼暴力破解,密碼找回等等攻擊行為,這樣就可以輕松愉快的開(kāi)始一次簡(jiǎn)單滲透攻擊之旅,而企業(yè)用戶(hù)也可以利用得到的信息進(jìn)行內部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host內所有帶有的域名:host=“”例:搜索某個(gè)IP上的相關(guān)信息: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出來(lái)了一個(gè)高危漏洞,我們需要去統計全球的Apache:server=“Apache”例:搜索前段時(shí)間非?;鸬暮?低暎篽eader=“Hikvsion”例:假如我想搜索微博的后臺,域名為: 并且網(wǎng)頁(yè)內body包含“后臺”:body=“后臺”&& domain=“”&&:與body=“后臺”&& domain=“”提取域名為:并且網(wǎng)頁(yè)內body包含“后臺”的網(wǎng)站,需要同時(shí)滿(mǎn)足兩個(gè)條件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不為80端口的服務(wù)搜索證書(shū)(https或者imaps等)例:百度公司為了檢查自己的域名是否還有心臟出血漏洞可以使用語(yǔ)法:cert=“baidu”搜索指定國家(編碼)的資產(chǎn)例:搜索中國的服務(wù)器 country=“CN”注:country=“CN” country后面的規則為各國家的縮寫(xiě),全球國家縮寫(xiě)如下連接:搜索指定城市的資產(chǎn)例:搜索上海的服務(wù)器 city=“Shanghai”注:搜索城市時(shí)填寫(xiě)城市的全程,首字母必須大寫(xiě)例:搜索centos所有主機 os=“centos”了解了基礎查詢(xún)我們再來(lái)說(shuō)說(shuō)高級查詢(xún),就是多個(gè)基礎查詢(xún)語(yǔ)句用邏輯連接符拼成的語(yǔ)句,例如我們要搜索上海的Discus組件,搜索語(yǔ)句時(shí) (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:邏輯與||:邏輯或上面的語(yǔ)句意思為 (title="Disuz" ||body="content="Discuz") 與city="Shanghai" 這兩個(gè)條件必須同時(shí)滿(mǎn)足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“與body=”content=\”Discuz“ 滿(mǎn)足一個(gè)即可
FOFA可以從不同維度搜索網(wǎng)絡(luò )組件,例如地區,端口號,網(wǎng)絡(luò )服務(wù),操作系統,網(wǎng)絡(luò )協(xié)議等等。目前FOFA支持了多個(gè)網(wǎng)絡(luò )組件的指紋識別,包括建站模塊、分享模塊、各種開(kāi)發(fā)框架、安全檢測平臺、項目管理系統、企業(yè)管理系統、視頻監控系統、站長(cháng)平臺、電商系統、廣告聯(lián)盟、前端庫、路由器、SSL證書(shū)、服務(wù)器管理系統、CDN、Web服務(wù)器、WAF、CMS等等尤其現在支持icon圖標、logo搜索,非常方便,fofa搜索語(yǔ)法與shodan類(lèi)似title="abc" 從標題中搜索abc。例:標題中有北京的網(wǎng)站header="abc" 從http頭中搜索abc。例:jboss服務(wù)器body="abc" 從html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名帶有的網(wǎng)站。例:根域名是的網(wǎng)站host="." 從url中搜索.,注意搜索要用host作為名稱(chēng)。例:政府網(wǎng)站, 教育網(wǎng)站port="443" 查找對應443端口的資產(chǎn)。例:查找對應443端口的資產(chǎn)可以安裝shodan chrome插件,方便進(jìn)行查看和使用。微步在線(xiàn)微步在線(xiàn)的反向IP查找域名十分好用整數透明度公開(kāi)日志枚舉其他途徑旁站查詢(xún)旁站就是在同一臺服務(wù)器上搭建的多個(gè)網(wǎng)站,使用同一個(gè)IP地址。在目標網(wǎng)站無(wú)法攻擊成功時(shí),若他的旁站可以成功攻擊并獲取相應的系統權限,這勢必會(huì )影響到目標網(wǎng)站的安全性,因為已經(jīng)獲取到同一臺服務(wù)器的權限了。公眾號、服務(wù)號收集搜狗搜索引擎企查查微信小程序從微信小程序入手,進(jìn)行測試APP小藍本企查查愛(ài)企查點(diǎn)點(diǎn)七麥七麥還可以切換蘋(píng)果和安卓,獲取下載鏈接apk丟進(jìn)模擬器指紋識別Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需帶上協(xié)議,每行一個(gè)./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主站沒(méi)識別出來(lái),但是其他子站可以丟進(jìn)來(lái)看看潮汐指紋Kscan此工具需要go環(huán)境云悉云悉可以在線(xiàn)搜索子域名、IP段、CMS指紋等信息大禹CMS識別程序對于查詢(xún)到的CMS可以利用網(wǎng)站用于查詢(xún)其他finger 或者棱鏡也可以繞過(guò)CDN如果目標沒(méi)有使用CDN,可以通過(guò)ping獲取IP地址?;蛘呃迷诰€(xiàn)網(wǎng)站 使用了CDN就繞過(guò)CDN來(lái)獲取真實(shí)的IP地址:因為有些網(wǎng)站設置CDN時(shí),可能沒(méi)把國外的訪(fǎng)問(wèn)包含進(jìn)去,所以可以嘗試國外繞過(guò)驗證ip地址因為通過(guò)各種方法得到的ip地址很多,有的是偽ip,無(wú)法訪(fǎng)問(wèn),這就需要逐個(gè)驗證,方法簡(jiǎn)單但是i西南西量比較大,利用ip地址對web站點(diǎn)進(jìn)行訪(fǎng)問(wèn)查詢(xún)域名解析記錄內部郵箱源,收集到內部郵箱服務(wù)器IP地址網(wǎng)站phpinfo文件phpinfo.php分站IP地址,查詢(xún)子域名,CDN很貴,很可能分站就不再使用CDN國外訪(fǎng)問(wèn)敏感信息收集githubgithub敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區,安全意識薄弱的同事經(jīng)常會(huì )將公司的代碼、各種服務(wù)的賬號等極度敏感的信息【開(kāi)源】到github中這里可以利用github找存在這個(gè)關(guān)鍵字的代碼,這樣可以收集到的方面更廣
GSIL項目:通過(guò)配置關(guān)鍵詞,實(shí)時(shí)監控GitHub敏感信息泄露情況,并發(fā)送至指定郵箱常見(jiàn)自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)從流量中分析提取流量代理:通過(guò)WebProxy代理電腦所有流量,再分析流量中出現的子域名域名跳轉記錄中的子域名Response中存在的子域名網(wǎng)絡(luò )請求資源中的子域名DNS解析SSL證書(shū)查詢(xún)暴力枚舉網(wǎng)盤(pán)搜索盤(pán)多多:盤(pán)搜搜:盤(pán)搜:凌云風(fēng)搜索:直接輸入廠(chǎng)商名字然后搜索,看看是否泄露了源碼,或者賬號密碼之類(lèi)的路徑掃描404,403頁(yè)面,不是真的沒(méi)有東西,要一層一層fuzz,一層一層的掃下去工具:具體使用方法可以查看github介紹,這里我一般是使用如下命令(因為擔心線(xiàn)程太高所以通過(guò)-t參數設置為2)。python3 dirsearch.py -u * -t 2關(guān)鍵的地方是大家都可以下載這款工具,獲取它自帶的字典,那么路徑的話(huà),便是大家都能夠搜得到的了,所以這里我推薦是可以適當整合一些師傅們發(fā)出來(lái)的路徑字典到/dirsearch-0.4.2/db/dicc.txt中。推薦一些字典:GitHub - ybdt/dict-hub: 紅隊字典:弱用戶(hù)名、弱口令、默認口令、泄露密鑰dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每個(gè)工具掃出來(lái)同一個(gè)站點(diǎn)都會(huì )爆出不同的路徑,建議把三個(gè)工具都拿來(lái)掃一遍,另外找一些像后臺、登錄系統之類(lèi)的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統御劍7kbscandirsearch基于證書(shū)基于shodan找到帶有該icon的網(wǎng)站在shodan搜索中有一個(gè)關(guān)于網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以使用這個(gè)語(yǔ)法搜索出使用了同一icon圖標的網(wǎng)站。
由于hash為一個(gè)未知的隨機數,所以是無(wú)法通過(guò)輸入一個(gè)確定的hash值來(lái)搜索帶有指定圖標的網(wǎng)站的,只能通過(guò)查看一個(gè)已經(jīng)被shodan收錄的網(wǎng)站的hash值,來(lái)進(jìn)一步獲取到所有帶有某icon的網(wǎng)站。那么這里的用法就非常具有局限性,你只能是碰運氣來(lái)找到你所需要查找的網(wǎng)站,因為shodan不一定收錄了你想要搜索的網(wǎng)站。那么如果shodan收錄了某個(gè)IP,這個(gè)服務(wù)器帶有某個(gè)icon圖標,也可以搜索所有帶有此icon的服務(wù)器IP如果我像搜索帶有這個(gè)icon的所有IP地址的話(huà),可以先在shodan搜索這個(gè)IP。注意:shodan中有一個(gè)功能,shodan的原始數據(Raw Data)功能。點(diǎn)擊詳情里的View Raw Data,打開(kāi)可以看到shodan所存儲的關(guān)于這個(gè)IP的所有信息的原始數據。關(guān)于icon hash的字段是:data.0.http.favicon.hash這個(gè)數值就是http.favicon.hash:中所需要的搜索值。根據上述得到的hash值,成功得到了所有待用這個(gè)icon的網(wǎng)站。域傳送漏洞DNS區域傳送(DNZ zone transfer)指的是一臺備用服務(wù)器使用來(lái)自主服務(wù)器的數據刷新自己的域(zone)數據庫。
這位運行中的DNS服務(wù)提供了一定的冗余度,其目的是為了防止主的域名服務(wù)器因意外故障變得不可用時(shí)影響到整個(gè)域名的解析。一般來(lái)說(shuō),DNS區域傳送操作只在網(wǎng)絡(luò )里真的有備用域名DNS服務(wù)器時(shí)才有必要用到,但許多DNS服務(wù)器卻被錯誤的配置成只要有client發(fā)出請求,就會(huì )向對方提供一個(gè)zone數據庫的詳細信息,所以說(shuō)允許不受信任的因特網(wǎng)用戶(hù)執行DNS區域傳送(zone transfer)操作是最為嚴重的錯誤配置之一??梢杂胐ig工具來(lái)檢測域傳送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通過(guò)域名傳送漏洞可以得到子域名信息以及子域名對應的IP地址。常見(jiàn)漏洞弱口令,管理員權限的弱口令,可以是一些后臺管理系統的,也可以是防火墻的。越權,這個(gè)相對來(lái)說(shuō)比較常見(jiàn),系統設計存在缺陷,通過(guò)參數來(lái)傳遞身份和訪(fǎng)問(wèn)請求頁(yè)面的信息,只需要修改參數即可越權到別人的身份,可能有垂直越權,也可能是水平越權。SQL注入,只要細心一點(diǎn),SQL注入也是比較常見(jiàn)的,只要能注出數據庫就行了,注意別惹禍上身。文件上傳,這類(lèi)的話(huà),有一些老系統沒(méi)什么限制,可以嘗試。struts2框架漏洞,這個(gè)框架出了很多漏洞,前段時(shí)間比較火。shiro命令執行,也是框架漏洞,一個(gè)反序列化漏洞,現在網(wǎng)上還存在很多存在這個(gè)洞的站點(diǎn)。任意文件下載,在一些站點(diǎn)的下載點(diǎn),可以抓包測試,通過(guò)修改下載鏈接中下載文件的路徑,像/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 添加用戶(hù)的默認信息的文件<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 是用戶(hù)密碼信息的默認屬性<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 用戶(hù)信息的骨架<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 不能登陸的用戶(hù)<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服務(wù)的配置文件<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系統的一個(gè)基本系統配置文件
邏輯漏洞,一些已經(jīng)被很多人挖過(guò)的站點(diǎn)除了一些最新的漏洞之外,可能就只剩下邏輯漏洞了,比如任意密碼修改,或者一些組件漏洞,還有在修改密碼的地方,修改密碼請求是一次發(fā)包還是分兩次發(fā)包,密碼找回點(diǎn),有些情況下驗證碼就在返回包中包含著(zhù);有些情況下接受驗證碼的手機號或者郵箱就在請求包中,可修改為自己的,驗證碼就會(huì )發(fā)送到你修改的手機號或者郵箱處,挖邏輯漏洞的話(huà),更多情況下要抓包查看,了解它的邏輯,從中找到缺陷。具體可以看:該文章專(zhuān)門(mén)對邏輯漏洞進(jìn)行了總結。文章來(lái)源:FreeBuf.COM;作者:YLion侵權請私聊公眾號刪文 查看全部
SRC漏洞挖掘與最重要的環(huán)節——信息收集
SRC挖掘有很多平臺,比如EDUSRC,比如公益SRC:補天、漏洞盒子等,還有就是一些企業(yè)SRC。對于挖掘src的小伙伴來(lái)說(shuō)第一步都是對資產(chǎn)進(jìn)行收集,所以本篇文章首先介紹一下SRC的上分思路,然后會(huì )具體講解一下信息收集的思路。
公益SRC對于公益SRC來(lái)說(shuō),會(huì )存在各種各樣的漏洞,SQL注入、反射XSS、存儲XSS、任意注冊、cms通殺、弱口令還有邏輯漏洞,公益SRC主要比拼的無(wú)非就是手速,手速決定一切,提交的最多的一般還是sql注入、弱口令、和cms通殺。公益SRC想要沖榜的話(huà)可以選擇一些有大的安全活動(dòng)的時(shí)間,大佬們去參加安全活動(dòng),這個(gè)時(shí)候可以取巧,上榜會(huì )稍微輕松一點(diǎn)。對于公益SRC來(lái)說(shuō),想要沖榜就不能在一個(gè)站上浪費大量時(shí)間,公益SRC對洞的質(zhì)量要求不高,所以只要 花時(shí)間,還是可以上榜的。谷歌鏡像站:
SQL注入SQL注入的話(huà)主要通過(guò)google語(yǔ)法或者fofa進(jìn)行搜索查找,使用inurl關(guān)鍵字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa進(jìn)行特定網(wǎng)站搜索,還是進(jìn)行信息收集,只使用一種關(guān)鍵字對站點(diǎn)去進(jìn)行查找是絕對無(wú)法找全的,關(guān)鍵字有很多,思路也有很多,思維不能局限住,要不斷地去變換??梢試L試這么去構造Google語(yǔ)句:地區inurl:"type_id=1"、行業(yè)inurl:"ptherinfo.asp?id=1"地區和行業(yè)可以任意替換,在提交漏洞的地方通常會(huì )有一個(gè)選項,選擇漏洞所屬地區和所屬行業(yè),可以以此為準一個(gè)一個(gè)找,之后還可以將php替換為asp、aspx、jsp等站點(diǎn)。在對某站點(diǎn)進(jìn)行測試SQL注入的時(shí)候,先通過(guò)一些方式測試是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工測試,然后提交漏洞。
XSS對于XSS來(lái)說(shuō)可能并不好找,所以我認為沒(méi)必要太刻意的去挖XSS,不管是反射型還是存儲型,所以我認為在測試sql注入的時(shí)候順帶對XSS進(jìn)行測試就好了。但是如果想要專(zhuān)門(mén)挖xss,在實(shí)戰中學(xué)習,也可以通過(guò)和sql注入一樣的語(yǔ)法,改變幾個(gè)關(guān)鍵字就好了,比如:地區inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注冊如果你想要挖任意注冊漏洞,那么你首先需要了解什么是任意注冊,任意注冊是一種程序設計的缺陷,顧名思義就是隨便注冊,不需要什么條件,注冊處無(wú)任何驗證。Google語(yǔ)法關(guān)鍵詞:地區/行業(yè)inurl:"register"、地區/行業(yè)inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注冊算是低危漏洞,不過(guò)也有兩分。任意注冊沒(méi)多少人挖,可以嘗試挖掘。去漏洞盒子提交漏洞的時(shí)候,可以看下漏洞類(lèi)型,可以挑一些你認為漏洞比較冷門(mén)沒(méi)人挖并且普遍存在的去下手。
CMS通殺普通人找通殺的思路無(wú)法就是百度谷歌搜索cms通殺,但是其實(shí)這樣的效率并不高,通殺也找不到幾個(gè),這里建議可以去一些漏洞文庫,建議多進(jìn)行漏洞復現,多實(shí)戰,多積累實(shí)戰經(jīng)驗,復現漏洞也是一種積累。

弱口令嘗試弱口令的過(guò)程比較繁瑣,但是最好老老實(shí)實(shí)的手工上分,百度或者谷歌語(yǔ)法搜索后臺站點(diǎn)。如:山西inurl:"后臺"可以嘗試:賬號:admin/test/cs/ceshi/test01等 密碼:admin/123456/a123456/admin123/admin123456等。也可以借助fofa對后臺站點(diǎn)進(jìn)行搜索:title="后臺管理" && country="CN"
EDUSRCfofa語(yǔ)句(查找edu里的管理系統):"管理系統" && org="China Education and Research Network Center"對于EDUSRC來(lái)說(shuō),想上分的同學(xué)主要有兩種方式:1.挖通用性漏洞。找一些站點(diǎn)或者系統,被廣大學(xué)校所使用,覆蓋率很高,再去對這個(gè)站點(diǎn)或者系統進(jìn)行漏洞挖掘,挖掘到之后就可以批量刷分。2.定點(diǎn)打擊。對一個(gè)學(xué)校埋頭苦干,通過(guò)一些信息泄露或者一些學(xué)生的微博、朋友圈等,獲取一些學(xué)生的相關(guān)信息,比如學(xué)號、身份信息號碼、電話(huà)等等,嘗試登入校園內網(wǎng)或者登錄校園統一身份認證系統,對內網(wǎng)進(jìn)行漏洞挖掘,直接日穿。使用Google語(yǔ)法進(jìn)行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本內容:site:域名 intext:管理|后臺|登陸|用戶(hù)名|密碼|驗證碼|系統|帳號|admin|login|sys|managetem|password|username查找可注入點(diǎn):site:域名 inurl:aspx|jsp|php|asp查找上傳漏洞:site:域名 inurl:file|load|editor|Files找eweb編輯器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的數據庫:site:域名 filetype:mdb|asp|#查看腳本類(lèi)型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集滲透測試的本質(zhì)就是信息收集,信息搜集的廣度決定了攻擊的廣度,知識面的廣度決定了攻擊的深度。不管是進(jìn)行SRC漏洞挖掘,還是做項目進(jìn)行滲透測試,又或者是打紅藍對抗,一定要做好信息收集。信息收集很重要,如確定資產(chǎn),比如他有哪些域名、子域名、C段、旁站、系統、微信小程序或者公眾號,確定好站點(diǎn)或者目標系統之后,就是常規的指紋識別,像中間件、網(wǎng)站,掃目錄,后臺,確定功能然后分析每個(gè)功能點(diǎn)上會(huì )有哪些漏洞,就比如一個(gè)登錄頁(yè)面,我們可以考慮的是爆破賬號密碼,社工賬號密碼,SQL注入,XSS漏洞,邏輯漏洞繞過(guò)等。如果大家挖掘SRC的水平都是一樣的或者說(shuō)我們對于各種操作都是同樣了解的,那么如果超越別人,如果你挖的比別人慢,那么你后期提交的漏洞會(huì )撞洞,然后忽略處理。在短時(shí)間內你無(wú)法去提升你的技術(shù)或者是挖掘一個(gè)新的思路,這個(gè)時(shí)候就體現了資產(chǎn)搜集的能力,信息搜集是最難的,也是最麻煩耽誤時(shí)間的,且必須要實(shí)時(shí)去關(guān)注的一件事情。一些常用網(wǎng)站:ICP備案查詢(xún):權重查詢(xún):多地ping:whois查詢(xún):IP反查:以xxx公司為例,根域名:信息收集可以從多個(gè)領(lǐng)域來(lái)看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC軟件等等可以重點(diǎn)關(guān)注備案網(wǎng)站,APP,小程序,微信公眾號,甚至是微博。這里說(shuō)一點(diǎn)小思路,首先可以找到官網(wǎng),用cmd ping他的官網(wǎng),可以看到IP地址,然后可以定位whois,whois中包含了用戶(hù)、郵箱,以及購買(mǎi)的網(wǎng)段。有了網(wǎng)段就可以進(jìn)行一些主動(dòng)信息收集,可以使用一些強大的資產(chǎn)測繪工具,goby的資產(chǎn)測繪還是很不錯的,會(huì )有一些web服務(wù),不用擔心沒(méi)有banner,往往這些沒(méi)有banner的才有問(wèn)題。注意觀(guān)察一下網(wǎng)站底部是否有技術(shù)支持:xxxx|網(wǎng)站建設:xxxx之類(lèi)的標注,一些建站企業(yè)會(huì )出于知識產(chǎn)權保護或者是對外宣傳自己的公司,會(huì )在自家搭建的網(wǎng)站上掛上技術(shù)支持等之類(lèi)的標注,很多建站企業(yè)往往某種類(lèi)型的網(wǎng)站都是套用的同一套源碼,換湯不換藥,運氣不錯的話(huà),那我們的事件就秒變通用。
子域名收集Oneforall盡量多湊一點(diǎn)API,fofa可以找人借一些api,越多越好。執行命令:常用的獲取子域名有2種選擇,一種使用--target指定單個(gè)域名,一種使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤輿)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中尋找URL和子域名的工具,在網(wǎng)站的JS文件中,會(huì )存在各種對測試有幫助的內容,JSFinder可以幫我們獲取到JS中的url和子域名的信息,擴展我們的滲透范圍。爬取分為普通爬取和深度爬取,深度爬取會(huì )深入下一層頁(yè)面爬取的JS,時(shí)間會(huì )消耗的相對較長(cháng)。執行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt運行結束后會(huì )生成兩個(gè)txt文本,Jsurl.txt為URL里面會(huì )有一些接口什么的,Jsdomain.txt為子域名基于TamperMonkey的版本:Layer、子域名收割機 進(jìn)行挖掘通過(guò)這些域名收集工具(layer子域名挖掘機、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)進(jìn)行挖掘。
在線(xiàn)網(wǎng)站查詢(xún)?yōu)榱吮苊釯P被封掉,直接使用在線(xiàn)的子域名爆破網(wǎng)站。subDomainBrute執行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全掃描。Sublist3rKali和Windows環(huán)境下都可以裝這個(gè)工具,Sublist3r是一個(gè)python版工具,其原理是基于通過(guò)使用搜索引擎,從而對站點(diǎn)子域名進(jìn)行列舉。Kali:git clone 執行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一個(gè)域名搜索網(wǎng)站,還會(huì )自動(dòng)歸納同一個(gè)IP的多個(gè)域名。在線(xiàn)域名爆破小藍本通過(guò)小藍本進(jìn)行查詢(xún):愛(ài)企查、企查查、天眼查之前愛(ài)企查活動(dòng)送了會(huì )員,可以更好的進(jìn)行查詢(xún)。谷歌語(yǔ)法迅速查找信息泄露、管理后臺暴露等漏洞語(yǔ)法,例如:filetype:txt 登錄filetype:xls 登錄filetype:doc 登錄intitle:后臺管理intitle:loginintitle:后臺管理 inurl:adminintitle:index of /查找指定網(wǎng)站,再加上site:,例如:site: filetype:txt 登錄site: intitle:后臺管理site: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統谷歌/必應:site:site:如果發(fā)現檢索出來(lái)的很多結果都是www,眾所周知主站一般防御很?chē)?,如果我們不想看到主站可以直?-wwwsite: -www這樣出來(lái)的結果會(huì )自動(dòng)刪去wwwShodan、fofa、zoomeye、360quake等忘了資產(chǎn)搜索引擎fofa語(yǔ)法FOFA作為一個(gè)搜索引擎,我們要熟悉它的查詢(xún)語(yǔ)法,類(lèi)似google語(yǔ)法,FOFA的語(yǔ)法主要分為檢索字段以及運算符,所有的查詢(xún)語(yǔ)句都是由這兩種元素組成的。
目前支持的檢索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的邏輯運算符包括:=,==,!=,&&,||。如果搜索title字段中存在后臺的網(wǎng)站,我們只需要在輸入欄中輸入title=“后臺”,輸出的結果即為全網(wǎng)title中存在后臺兩個(gè)字的網(wǎng)站,可以利用得到的信息繼續進(jìn)行滲透攻擊,對于網(wǎng)站的后臺進(jìn)行密碼暴力破解,密碼找回等等攻擊行為,這樣就可以輕松愉快的開(kāi)始一次簡(jiǎn)單滲透攻擊之旅,而企業(yè)用戶(hù)也可以利用得到的信息進(jìn)行內部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host內所有帶有的域名:host=“”例:搜索某個(gè)IP上的相關(guān)信息: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出來(lái)了一個(gè)高危漏洞,我們需要去統計全球的Apache:server=“Apache”例:搜索前段時(shí)間非?;鸬暮?低暎篽eader=“Hikvsion”例:假如我想搜索微博的后臺,域名為: 并且網(wǎng)頁(yè)內body包含“后臺”:body=“后臺”&& domain=“”&&:與body=“后臺”&& domain=“”提取域名為:并且網(wǎng)頁(yè)內body包含“后臺”的網(wǎng)站,需要同時(shí)滿(mǎn)足兩個(gè)條件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不為80端口的服務(wù)搜索證書(shū)(https或者imaps等)例:百度公司為了檢查自己的域名是否還有心臟出血漏洞可以使用語(yǔ)法:cert=“baidu”搜索指定國家(編碼)的資產(chǎn)例:搜索中國的服務(wù)器 country=“CN”注:country=“CN” country后面的規則為各國家的縮寫(xiě),全球國家縮寫(xiě)如下連接:搜索指定城市的資產(chǎn)例:搜索上海的服務(wù)器 city=“Shanghai”注:搜索城市時(shí)填寫(xiě)城市的全程,首字母必須大寫(xiě)例:搜索centos所有主機 os=“centos”了解了基礎查詢(xún)我們再來(lái)說(shuō)說(shuō)高級查詢(xún),就是多個(gè)基礎查詢(xún)語(yǔ)句用邏輯連接符拼成的語(yǔ)句,例如我們要搜索上海的Discus組件,搜索語(yǔ)句時(shí) (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:邏輯與||:邏輯或上面的語(yǔ)句意思為 (title="Disuz" ||body="content="Discuz") 與city="Shanghai" 這兩個(gè)條件必須同時(shí)滿(mǎn)足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“與body=”content=\”Discuz“ 滿(mǎn)足一個(gè)即可
FOFA可以從不同維度搜索網(wǎng)絡(luò )組件,例如地區,端口號,網(wǎng)絡(luò )服務(wù),操作系統,網(wǎng)絡(luò )協(xié)議等等。目前FOFA支持了多個(gè)網(wǎng)絡(luò )組件的指紋識別,包括建站模塊、分享模塊、各種開(kāi)發(fā)框架、安全檢測平臺、項目管理系統、企業(yè)管理系統、視頻監控系統、站長(cháng)平臺、電商系統、廣告聯(lián)盟、前端庫、路由器、SSL證書(shū)、服務(wù)器管理系統、CDN、Web服務(wù)器、WAF、CMS等等尤其現在支持icon圖標、logo搜索,非常方便,fofa搜索語(yǔ)法與shodan類(lèi)似title="abc" 從標題中搜索abc。例:標題中有北京的網(wǎng)站header="abc" 從http頭中搜索abc。例:jboss服務(wù)器body="abc" 從html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名帶有的網(wǎng)站。例:根域名是的網(wǎng)站host="." 從url中搜索.,注意搜索要用host作為名稱(chēng)。例:政府網(wǎng)站, 教育網(wǎng)站port="443" 查找對應443端口的資產(chǎn)。例:查找對應443端口的資產(chǎn)可以安裝shodan chrome插件,方便進(jìn)行查看和使用。微步在線(xiàn)微步在線(xiàn)的反向IP查找域名十分好用整數透明度公開(kāi)日志枚舉其他途徑旁站查詢(xún)旁站就是在同一臺服務(wù)器上搭建的多個(gè)網(wǎng)站,使用同一個(gè)IP地址。在目標網(wǎng)站無(wú)法攻擊成功時(shí),若他的旁站可以成功攻擊并獲取相應的系統權限,這勢必會(huì )影響到目標網(wǎng)站的安全性,因為已經(jīng)獲取到同一臺服務(wù)器的權限了。公眾號、服務(wù)號收集搜狗搜索引擎企查查微信小程序從微信小程序入手,進(jìn)行測試APP小藍本企查查愛(ài)企查點(diǎn)點(diǎn)七麥七麥還可以切換蘋(píng)果和安卓,獲取下載鏈接apk丟進(jìn)模擬器指紋識別Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需帶上協(xié)議,每行一個(gè)./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主站沒(méi)識別出來(lái),但是其他子站可以丟進(jìn)來(lái)看看潮汐指紋Kscan此工具需要go環(huán)境云悉云悉可以在線(xiàn)搜索子域名、IP段、CMS指紋等信息大禹CMS識別程序對于查詢(xún)到的CMS可以利用網(wǎng)站用于查詢(xún)其他finger 或者棱鏡也可以繞過(guò)CDN如果目標沒(méi)有使用CDN,可以通過(guò)ping獲取IP地址?;蛘呃迷诰€(xiàn)網(wǎng)站 使用了CDN就繞過(guò)CDN來(lái)獲取真實(shí)的IP地址:因為有些網(wǎng)站設置CDN時(shí),可能沒(méi)把國外的訪(fǎng)問(wèn)包含進(jìn)去,所以可以嘗試國外繞過(guò)驗證ip地址因為通過(guò)各種方法得到的ip地址很多,有的是偽ip,無(wú)法訪(fǎng)問(wèn),這就需要逐個(gè)驗證,方法簡(jiǎn)單但是i西南西量比較大,利用ip地址對web站點(diǎn)進(jìn)行訪(fǎng)問(wèn)查詢(xún)域名解析記錄內部郵箱源,收集到內部郵箱服務(wù)器IP地址網(wǎng)站phpinfo文件phpinfo.php分站IP地址,查詢(xún)子域名,CDN很貴,很可能分站就不再使用CDN國外訪(fǎng)問(wèn)敏感信息收集githubgithub敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區,安全意識薄弱的同事經(jīng)常會(huì )將公司的代碼、各種服務(wù)的賬號等極度敏感的信息【開(kāi)源】到github中這里可以利用github找存在這個(gè)關(guān)鍵字的代碼,這樣可以收集到的方面更廣
GSIL項目:通過(guò)配置關(guān)鍵詞,實(shí)時(shí)監控GitHub敏感信息泄露情況,并發(fā)送至指定郵箱常見(jiàn)自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)從流量中分析提取流量代理:通過(guò)WebProxy代理電腦所有流量,再分析流量中出現的子域名域名跳轉記錄中的子域名Response中存在的子域名網(wǎng)絡(luò )請求資源中的子域名DNS解析SSL證書(shū)查詢(xún)暴力枚舉網(wǎng)盤(pán)搜索盤(pán)多多:盤(pán)搜搜:盤(pán)搜:凌云風(fēng)搜索:直接輸入廠(chǎng)商名字然后搜索,看看是否泄露了源碼,或者賬號密碼之類(lèi)的路徑掃描404,403頁(yè)面,不是真的沒(méi)有東西,要一層一層fuzz,一層一層的掃下去工具:具體使用方法可以查看github介紹,這里我一般是使用如下命令(因為擔心線(xiàn)程太高所以通過(guò)-t參數設置為2)。python3 dirsearch.py -u * -t 2關(guān)鍵的地方是大家都可以下載這款工具,獲取它自帶的字典,那么路徑的話(huà),便是大家都能夠搜得到的了,所以這里我推薦是可以適當整合一些師傅們發(fā)出來(lái)的路徑字典到/dirsearch-0.4.2/db/dicc.txt中。推薦一些字典:GitHub - ybdt/dict-hub: 紅隊字典:弱用戶(hù)名、弱口令、默認口令、泄露密鑰dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每個(gè)工具掃出來(lái)同一個(gè)站點(diǎn)都會(huì )爆出不同的路徑,建議把三個(gè)工具都拿來(lái)掃一遍,另外找一些像后臺、登錄系統之類(lèi)的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統御劍7kbscandirsearch基于證書(shū)基于shodan找到帶有該icon的網(wǎng)站在shodan搜索中有一個(gè)關(guān)于網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以使用這個(gè)語(yǔ)法搜索出使用了同一icon圖標的網(wǎng)站。
由于hash為一個(gè)未知的隨機數,所以是無(wú)法通過(guò)輸入一個(gè)確定的hash值來(lái)搜索帶有指定圖標的網(wǎng)站的,只能通過(guò)查看一個(gè)已經(jīng)被shodan收錄的網(wǎng)站的hash值,來(lái)進(jìn)一步獲取到所有帶有某icon的網(wǎng)站。那么這里的用法就非常具有局限性,你只能是碰運氣來(lái)找到你所需要查找的網(wǎng)站,因為shodan不一定收錄了你想要搜索的網(wǎng)站。那么如果shodan收錄了某個(gè)IP,這個(gè)服務(wù)器帶有某個(gè)icon圖標,也可以搜索所有帶有此icon的服務(wù)器IP如果我像搜索帶有這個(gè)icon的所有IP地址的話(huà),可以先在shodan搜索這個(gè)IP。注意:shodan中有一個(gè)功能,shodan的原始數據(Raw Data)功能。點(diǎn)擊詳情里的View Raw Data,打開(kāi)可以看到shodan所存儲的關(guān)于這個(gè)IP的所有信息的原始數據。關(guān)于icon hash的字段是:data.0.http.favicon.hash這個(gè)數值就是http.favicon.hash:中所需要的搜索值。根據上述得到的hash值,成功得到了所有待用這個(gè)icon的網(wǎng)站。域傳送漏洞DNS區域傳送(DNZ zone transfer)指的是一臺備用服務(wù)器使用來(lái)自主服務(wù)器的數據刷新自己的域(zone)數據庫。
這位運行中的DNS服務(wù)提供了一定的冗余度,其目的是為了防止主的域名服務(wù)器因意外故障變得不可用時(shí)影響到整個(gè)域名的解析。一般來(lái)說(shuō),DNS區域傳送操作只在網(wǎng)絡(luò )里真的有備用域名DNS服務(wù)器時(shí)才有必要用到,但許多DNS服務(wù)器卻被錯誤的配置成只要有client發(fā)出請求,就會(huì )向對方提供一個(gè)zone數據庫的詳細信息,所以說(shuō)允許不受信任的因特網(wǎng)用戶(hù)執行DNS區域傳送(zone transfer)操作是最為嚴重的錯誤配置之一??梢杂胐ig工具來(lái)檢測域傳送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通過(guò)域名傳送漏洞可以得到子域名信息以及子域名對應的IP地址。常見(jiàn)漏洞弱口令,管理員權限的弱口令,可以是一些后臺管理系統的,也可以是防火墻的。越權,這個(gè)相對來(lái)說(shuō)比較常見(jiàn),系統設計存在缺陷,通過(guò)參數來(lái)傳遞身份和訪(fǎng)問(wèn)請求頁(yè)面的信息,只需要修改參數即可越權到別人的身份,可能有垂直越權,也可能是水平越權。SQL注入,只要細心一點(diǎn),SQL注入也是比較常見(jiàn)的,只要能注出數據庫就行了,注意別惹禍上身。文件上傳,這類(lèi)的話(huà),有一些老系統沒(méi)什么限制,可以嘗試。struts2框架漏洞,這個(gè)框架出了很多漏洞,前段時(shí)間比較火。shiro命令執行,也是框架漏洞,一個(gè)反序列化漏洞,現在網(wǎng)上還存在很多存在這個(gè)洞的站點(diǎn)。任意文件下載,在一些站點(diǎn)的下載點(diǎn),可以抓包測試,通過(guò)修改下載鏈接中下載文件的路徑,像/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 添加用戶(hù)的默認信息的文件<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 是用戶(hù)密碼信息的默認屬性<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 用戶(hù)信息的骨架<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 不能登陸的用戶(hù)<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服務(wù)的配置文件<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系統的一個(gè)基本系統配置文件
邏輯漏洞,一些已經(jīng)被很多人挖過(guò)的站點(diǎn)除了一些最新的漏洞之外,可能就只剩下邏輯漏洞了,比如任意密碼修改,或者一些組件漏洞,還有在修改密碼的地方,修改密碼請求是一次發(fā)包還是分兩次發(fā)包,密碼找回點(diǎn),有些情況下驗證碼就在返回包中包含著(zhù);有些情況下接受驗證碼的手機號或者郵箱就在請求包中,可修改為自己的,驗證碼就會(huì )發(fā)送到你修改的手機號或者郵箱處,挖邏輯漏洞的話(huà),更多情況下要抓包查看,了解它的邏輯,從中找到缺陷。具體可以看:該文章專(zhuān)門(mén)對邏輯漏洞進(jìn)行了總結。文章來(lái)源:FreeBuf.COM;作者:YLion侵權請私聊公眾號刪文
我做OZON的第24篇:上架產(chǎn)品三種方式之ERP采集刊登詳細步驟
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 996 次瀏覽 ? 2022-08-26 13:39
目前OZON平臺賣(mài)家使用最多的采集刊登軟件是“芒果店長(cháng)”,那么這篇文章就以【芒果店長(cháng)】為例來(lái)演示如何通過(guò)ERP進(jìn)行采集刊登產(chǎn)品。
首先說(shuō)一下,對于賣(mài)家來(lái)說(shuō)應該使用ERP刊登還是表格刊登,這里要看具體需求。
如果是需要大量采集和翻譯圖片的,那么通過(guò)ERP是會(huì )提高效率,因為ERP的圖片翻譯和圖片采集確實(shí)要方便很多。但是如果上架產(chǎn)品不多,并集中在某一些品類(lèi),那么使用表格刊登反而更好!
第一步:注冊登錄芒果店長(cháng)
各位賣(mài)家可以自己前往芒果店長(cháng)注冊登錄,這里就不做演示
第二步:授權店鋪
1、在如下圖所示區域輸入:店鋪別名(自己填寫(xiě),方便管理即可);Client-Id;Api-Key。然后點(diǎn)擊保存即可
2、Client-Id和Api-Key的獲?。?br /> ?。?)進(jìn)入OZON店鋪后臺,點(diǎn)擊設置頁(yè)面
?。?)點(diǎn)擊API秘鑰
?。?)在如下所示的彈窗中,點(diǎn)擊復制按鈕,復制秘鑰。注意:這個(gè)秘鑰僅顯示1次,注意自己保存好!
3、將Client-Id和Api-Key填進(jìn)去之后,點(diǎn)擊保存,即表示授權成功!
第三步:安裝最新版本芒果采集插件
芒果官網(wǎng)有詳細的采集插件安裝教程,支持chrome\360\QQ\火狐等多款瀏覽器。教程地址為:
如果出現如下圖所示的效果,即表示插件安裝成功。
第四步:采集產(chǎn)品(以1688為例)
1、找到你選好的產(chǎn)品,并將其1688的網(wǎng)址復制到芒果店長(cháng)的采集框內;
2、點(diǎn)擊【開(kāi)始采集】
3、也可以使用采集插件采集,如下圖所示,在1688頁(yè)面底部會(huì )出現采集按鈕,點(diǎn)擊【開(kāi)始采集】即可。
注意:在某些平臺采集的時(shí)候,可能會(huì )要求授權賬號。比如采集1688網(wǎng)址,就需要授權。在這里直接點(diǎn)擊授權,然后進(jìn)入之后輸入1688賬號及密碼即可完成授權。然后就可以正常采集了!
4、成功采集后就會(huì )出現如下圖所示狀態(tài)
第五步:認領(lǐng)產(chǎn)品到ozon產(chǎn)品庫
這里也可以批量認領(lǐng),意思就是把你采集的商品認領(lǐng)到你的某個(gè)平臺的商品庫。如果你設置了自動(dòng)認領(lǐng)規則,這個(gè)采集的產(chǎn)品也會(huì )自動(dòng)進(jìn)入你設置的平臺產(chǎn)品刊登庫。
第六步:編輯上產(chǎn)品
1、進(jìn)入產(chǎn)品刊登的ozon平臺頁(yè)面,找到這個(gè)產(chǎn)品并點(diǎn)擊【編輯】
2、編輯產(chǎn)品:
?。?)選擇店鋪和類(lèi)目:店鋪是必選的,類(lèi)目需要大家自己查找或者搜索。(如何快速發(fā)現自己產(chǎn)品所在的類(lèi)目,后續我會(huì )發(fā)一篇文章給大家進(jìn)行分享)
?。?)設置基本信息:
a、標題:這里支持翻譯,中文翻譯成俄文,英文翻譯成俄文,還是比較方便的。
b、SKU編碼:自己填寫(xiě),方便管理即可。
c、其他:增值稅、價(jià)格、重量、尺寸、合并編號(PDP卡)等等,按照后臺單個(gè)上傳的要求填寫(xiě)即可。
?。?)填寫(xiě)特征信息:這里根據不同的類(lèi)目自動(dòng)生成的維度正確填寫(xiě)即可。注意這里盡量多填,對于提升產(chǎn)品評分是有幫助的,能夠提升產(chǎn)品的搜索權重。
?。?)視頻圖片模塊:
a、視頻:與后臺設置同理,需要填寫(xiě)youtube后綴代碼。
b、圖片:這里直接從來(lái)源網(wǎng)站獲取了產(chǎn)品的圖片信息,這是比較方便的地方,可以直接選擇【采集的圖片】進(jìn)行上傳,上傳之后如果有中文或者英文信息,可以選擇圖片翻譯。
第七步:保存并提交發(fā)布
1、建議大家全部填寫(xiě)完成后,先點(diǎn)擊保存然后檢查一遍,檢查無(wú)誤后再提交發(fā)布。
2、提交發(fā)布有兩種方式,一種是定時(shí)發(fā)布,一種是直接發(fā)布。
提交發(fā)布之后,前往ozon后臺即可看到該產(chǎn)品會(huì )進(jìn)入待審核狀態(tài),等待審核通過(guò)即可。
那么以上就是關(guān)于OZON如何通過(guò)ERP軟件進(jìn)行采集刊登上架產(chǎn)品的詳細教程。 查看全部
我做OZON的第24篇:上架產(chǎn)品三種方式之ERP采集刊登詳細步驟
目前OZON平臺賣(mài)家使用最多的采集刊登軟件是“芒果店長(cháng)”,那么這篇文章就以【芒果店長(cháng)】為例來(lái)演示如何通過(guò)ERP進(jìn)行采集刊登產(chǎn)品。
首先說(shuō)一下,對于賣(mài)家來(lái)說(shuō)應該使用ERP刊登還是表格刊登,這里要看具體需求。
如果是需要大量采集和翻譯圖片的,那么通過(guò)ERP是會(huì )提高效率,因為ERP的圖片翻譯和圖片采集確實(shí)要方便很多。但是如果上架產(chǎn)品不多,并集中在某一些品類(lèi),那么使用表格刊登反而更好!
第一步:注冊登錄芒果店長(cháng)
各位賣(mài)家可以自己前往芒果店長(cháng)注冊登錄,這里就不做演示
第二步:授權店鋪
1、在如下圖所示區域輸入:店鋪別名(自己填寫(xiě),方便管理即可);Client-Id;Api-Key。然后點(diǎn)擊保存即可
2、Client-Id和Api-Key的獲?。?br /> ?。?)進(jìn)入OZON店鋪后臺,點(diǎn)擊設置頁(yè)面
?。?)點(diǎn)擊API秘鑰
?。?)在如下所示的彈窗中,點(diǎn)擊復制按鈕,復制秘鑰。注意:這個(gè)秘鑰僅顯示1次,注意自己保存好!
3、將Client-Id和Api-Key填進(jìn)去之后,點(diǎn)擊保存,即表示授權成功!

第三步:安裝最新版本芒果采集插件
芒果官網(wǎng)有詳細的采集插件安裝教程,支持chrome\360\QQ\火狐等多款瀏覽器。教程地址為:
如果出現如下圖所示的效果,即表示插件安裝成功。
第四步:采集產(chǎn)品(以1688為例)
1、找到你選好的產(chǎn)品,并將其1688的網(wǎng)址復制到芒果店長(cháng)的采集框內;
2、點(diǎn)擊【開(kāi)始采集】
3、也可以使用采集插件采集,如下圖所示,在1688頁(yè)面底部會(huì )出現采集按鈕,點(diǎn)擊【開(kāi)始采集】即可。
注意:在某些平臺采集的時(shí)候,可能會(huì )要求授權賬號。比如采集1688網(wǎng)址,就需要授權。在這里直接點(diǎn)擊授權,然后進(jìn)入之后輸入1688賬號及密碼即可完成授權。然后就可以正常采集了!
4、成功采集后就會(huì )出現如下圖所示狀態(tài)
第五步:認領(lǐng)產(chǎn)品到ozon產(chǎn)品庫
這里也可以批量認領(lǐng),意思就是把你采集的商品認領(lǐng)到你的某個(gè)平臺的商品庫。如果你設置了自動(dòng)認領(lǐng)規則,這個(gè)采集的產(chǎn)品也會(huì )自動(dòng)進(jìn)入你設置的平臺產(chǎn)品刊登庫。

第六步:編輯上產(chǎn)品
1、進(jìn)入產(chǎn)品刊登的ozon平臺頁(yè)面,找到這個(gè)產(chǎn)品并點(diǎn)擊【編輯】
2、編輯產(chǎn)品:
?。?)選擇店鋪和類(lèi)目:店鋪是必選的,類(lèi)目需要大家自己查找或者搜索。(如何快速發(fā)現自己產(chǎn)品所在的類(lèi)目,后續我會(huì )發(fā)一篇文章給大家進(jìn)行分享)
?。?)設置基本信息:
a、標題:這里支持翻譯,中文翻譯成俄文,英文翻譯成俄文,還是比較方便的。
b、SKU編碼:自己填寫(xiě),方便管理即可。
c、其他:增值稅、價(jià)格、重量、尺寸、合并編號(PDP卡)等等,按照后臺單個(gè)上傳的要求填寫(xiě)即可。
?。?)填寫(xiě)特征信息:這里根據不同的類(lèi)目自動(dòng)生成的維度正確填寫(xiě)即可。注意這里盡量多填,對于提升產(chǎn)品評分是有幫助的,能夠提升產(chǎn)品的搜索權重。
?。?)視頻圖片模塊:
a、視頻:與后臺設置同理,需要填寫(xiě)youtube后綴代碼。
b、圖片:這里直接從來(lái)源網(wǎng)站獲取了產(chǎn)品的圖片信息,這是比較方便的地方,可以直接選擇【采集的圖片】進(jìn)行上傳,上傳之后如果有中文或者英文信息,可以選擇圖片翻譯。
第七步:保存并提交發(fā)布
1、建議大家全部填寫(xiě)完成后,先點(diǎn)擊保存然后檢查一遍,檢查無(wú)誤后再提交發(fā)布。
2、提交發(fā)布有兩種方式,一種是定時(shí)發(fā)布,一種是直接發(fā)布。
提交發(fā)布之后,前往ozon后臺即可看到該產(chǎn)品會(huì )進(jìn)入待審核狀態(tài),等待審核通過(guò)即可。
那么以上就是關(guān)于OZON如何通過(guò)ERP軟件進(jìn)行采集刊登上架產(chǎn)品的詳細教程。
日志收集神器:Fluentd 的簡(jiǎn)明指南,果斷收藏
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-08-18 12:56
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd配置。
基本概念我們可能有在 bash 中執行過(guò)tail -f myapp.log | grep “what I want” > example.log這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入
tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾
| grep "what I want"
在這里,我們從尾部-f的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出
> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現grep ‘what I want’過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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
解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。 查看全部
日志收集神器:Fluentd 的簡(jiǎn)明指南,果斷收藏
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd配置。
基本概念我們可能有在 bash 中執行過(guò)tail -f myapp.log | grep “what I want” > example.log這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入
tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾
| grep "what I want"
在這里,我們從尾部-f的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出
> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}

這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。

過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現grep ‘what I want’過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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
解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 71 次瀏覽 ? 2022-08-18 01:27
作者:彭莉,火山引擎 APM 研發(fā)工程師。2020年加入字節,負責前端監控 SDK 的開(kāi)發(fā)維護、平臺數據消費的探索和落地。
背景你知道有多少用戶(hù)沒(méi)等到頁(yè)面首屏出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。比如, BBC 發(fā)現他們的網(wǎng)站加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高性能站點(diǎn)比低性能站點(diǎn)更能吸引和留住用戶(hù),而留住用戶(hù)對于提高用戶(hù)轉化率至關(guān)重要。
這篇文章就是以此為背景,介紹字節內部是如何衡量站點(diǎn)性能的,如何依靠性能監控定位線(xiàn)上站點(diǎn)性能問(wèn)題的。
如何衡量站點(diǎn)性能站點(diǎn)性能好壞的表現形式是多樣的,不是單純通過(guò)頁(yè)面加載速度、頁(yè)面渲染速度就能衡量,而是要關(guān)注從頁(yè)面開(kāi)始加載到被關(guān)閉的整個(gè)過(guò)程中,用戶(hù)對性能的感知。一個(gè)頁(yè)面,即使很快渲染,如果對用戶(hù)的交互遲遲沒(méi)有響應,那么在用戶(hù)心中這個(gè)站點(diǎn)的性能依然很差。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,另一類(lèi)是運行時(shí)性能。前者衡量的是頁(yè)面從加載開(kāi)始到可以穩定交互的性能情況,后者衡量的是頁(yè)面穩定后到頁(yè)面關(guān)閉的性能情況。
首屏性能早在 2012 年, Web 性能工作組[1]就針對頁(yè)面加載場(chǎng)景制定了加載過(guò)程模型,用來(lái)衡量頁(yè)面加載各個(gè)階段的耗時(shí)情況,從而衡量頁(yè)面加載的性能。具體的加載過(guò)程模型如圖所示:
這個(gè)模型定義了頁(yè)面加載開(kāi)始到頁(yè)面加載完成整個(gè)過(guò)程的各個(gè)時(shí)間點(diǎn),除了正常的初始化并且拉取到主文檔的時(shí)間點(diǎn)以外,還包括了解析渲染的詳細時(shí)間點(diǎn)。比如:雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載時(shí)的性能情況,但是線(xiàn)上用戶(hù)其實(shí)感知不到這些時(shí)間點(diǎn)的區別。對于用戶(hù)而言,只能感知到頁(yè)面何時(shí)開(kāi)始渲染、何時(shí)渲染出主要內容、何時(shí)可以交互、以及交互時(shí)是否有延遲。
那么針對用戶(hù)感知到的這四個(gè)階段,有沒(méi)有可用于衡量的指標呢?
何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標都來(lái)源于 Paint Timing[2] 標準, 這個(gè)標準主要是記錄在頁(yè)面加載期間的一些關(guān)鍵時(shí)間點(diǎn)。通過(guò)這兩個(gè)指標,就可以衡量頁(yè)面何時(shí)開(kāi)始渲染內容了。
何時(shí)渲染出主要內容:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)渲染出主要內容了。不過(guò)業(yè)界有測試得出, LCP 非常近似于 FMP 的時(shí)間點(diǎn),同時(shí) FMP 性能消耗較大,且會(huì )因為一些細小的變化導致數值巨大波動(dòng),所以推薦使用 LCP。而 SI 因為計算復雜,指標難以解釋?zhuān)砸话阒辉趯?shí)驗室環(huán)境下使用。
何時(shí)可以交互:TTI && TBT
TTI 雖然可以衡量頁(yè)面可以交互的時(shí)間點(diǎn),但是卻無(wú)法感知這個(gè)期間瀏覽器的繁忙狀態(tài)。而結合 TBT ,就能幫助理解在加載期間,頁(yè)面無(wú)法響應用戶(hù)輸入的時(shí)間有多久。
交互時(shí)是否有延遲:FID && MPFIDMPFID 是一個(gè)虛擬的可能的延遲時(shí)間,而FID是用戶(hù)真實(shí)的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)建立對整個(gè)應用的良好印象。同時(shí)在頁(yè)面加載階段,資源的處理任務(wù)最重,最容易產(chǎn)生輸入延遲。
至此,通過(guò)上面每個(gè)階段的指標,基本可以實(shí)現全面衡量首屏性能。那么運行時(shí)的性能又可以怎樣衡量呢?
運行時(shí)性能
運行時(shí)性能一般可以通過(guò)Long tasks 和 Input Delay來(lái)感知。Long tasks主要是衡量主線(xiàn)程的繁忙情況,而 Input Delay 主要是衡量用戶(hù)交互的延遲情況。
Long tasks
如果一個(gè)任務(wù)在主線(xiàn)程上運行超過(guò) 50 毫秒,那么它就是 Long task。如果可以收集到運行時(shí)的所有Long tasks,就能知道運行時(shí)的性能情況。在具體實(shí)踐中,可以關(guān)注耗時(shí)較長(cháng)的Long task,將它和用戶(hù)行為關(guān)聯(lián)在一起,可以有效幫助定位線(xiàn)上卡頓的原因。
Input Delay
它源于 Event Timing[3] 標準,這個(gè)標準主要是幫助深入了解由用戶(hù)交互觸發(fā)的某些事件的延遲,通過(guò)計算用戶(hù)輸入和處理輸入后的頁(yè)面繪制時(shí)間的差值來(lái)感知延遲時(shí)間。這些延遲通常是由于開(kāi)發(fā)人員代碼編寫(xiě)不當,引起 JS 執行時(shí)間過(guò)長(cháng)而產(chǎn)生的。
性能指標的計算原理
頁(yè)面性能相關(guān)的指標都有了,那么如何采集這些數據呢?
采集頁(yè)面加載過(guò)程的各階段耗時(shí)
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要依賴(lài) Navigation Timing[4] 標準,這個(gè)標準后來(lái)升級到了2.0版本, 對應 Navigation Timing 2[5]標準,兩者雖然不盡相同,但是可計算出的指標基本一致。在瀏覽器中可以通過(guò)下面的方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
基于這些數據,不僅可以計算出 DNS / TCP / Request 等耗時(shí),還可以計算出 DOMReady / DOMParse / Load 等耗時(shí)。
采集 FP && FCP
FP 和 FCP 可以通過(guò)瀏覽器提供的 API 直接獲取,所以采集原理并不復雜。如果頁(yè)面已經(jīng)完成了首次繪制和首次內容繪制,可以使用下面的方式直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有開(kāi)始首次繪制,就需要通過(guò)監聽(tīng)獲取。
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 主要依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 />
瀏覽器會(huì )多次報告 LCP ,而一般真正的 LCP 是用戶(hù)交互前最近一次報告的 LCP ,因為交互往往會(huì )改變用戶(hù)可見(jiàn)的內容,所以用戶(hù)交互后新報告的 LCP 不再符合 LCP 的指標定義。
采集 FMP與 FP / FCP / LCP 相比, FMP 的采集相對比較復雜,它需要通過(guò)算法計算得出,而業(yè)界并沒(méi)有統一的算法。不過(guò)比較認可的一個(gè)計算 FMP 的方式是「認定頁(yè)面在加載和渲染過(guò)程中最大布局變動(dòng)之后的那個(gè)繪制時(shí)間即為當前頁(yè)面的 FMP 」。由于在頁(yè)面渲染過(guò)程中,「 DOM 結構變化的時(shí)間點(diǎn)」和與之對應的「渲染的時(shí)間點(diǎn)」近似相同,所以字節內部計算 FMP 的方式是:計算出 DOM 結構變化最劇烈的時(shí)間點(diǎn),即為 FMP。具體步驟為:通過(guò) MutationObserver 監聽(tīng)每一次頁(yè)面整體的 DOM 變化,觸發(fā) MutationObserver 的回調在回調計算出當前 DOM 樹(shù)的分數在結算時(shí),通過(guò)對比得出分數變化最劇烈的時(shí)刻,即為 FMP采集 TTI && TBT與 FMP 相似,瀏覽器也沒(méi)有提供直接獲取 TTI 的 API ,不過(guò)針對如何計算 TTI 有詳細的描述,實(shí)現對應描述就可以得出 TTI 的時(shí)間點(diǎn)。具體的描述是:先找到 FCP 的時(shí)間點(diǎn),再往前找到一個(gè)安靜窗口。安靜窗口需要滿(mǎn)足三個(gè)條件: 1) 沒(méi)有 Long task。2)窗口中正在處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗讀應該至少 5s。
窗口前的最后一個(gè)長(cháng)任務(wù)的結束時(shí)間就是 TTI 。
而通過(guò)計算 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間的總和,就能得出 TBT 。
阻塞時(shí)間是 Long task 中超過(guò) 50ms 后的任務(wù)耗時(shí)。
采集 FID && MPFID
FID 同樣依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 之后最長(cháng)的長(cháng)任務(wù)耗時(shí),可以通過(guò)監聽(tīng) FCP 之后的 Long tasks,對比拿到最長(cháng)的長(cháng)任務(wù)就是 MPFID 。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集各個(gè)性能指標,但是在 JS 中計算具體指標要更為復雜。原因有兩點(diǎn):一是 API 報告的內容和指標本身的定義有部分差異,所以計算時(shí)要處理這些差異;二是 部分場(chǎng)景下瀏覽器不會(huì )報告對應內容,這些場(chǎng)景下需要模擬測量。
怎樣評估站點(diǎn)整體的性能好壞
雖然有眾多性能指標,但是每個(gè)性能指標評估的都是單一方面,如何整體來(lái)看站點(diǎn)的性能是好是壞呢?對于每個(gè)單一指標,是否有標準去定義指標的值在具體哪個(gè)范圍內能算優(yōu)秀?線(xiàn)上的站點(diǎn)性能應該重點(diǎn)考量哪些性能指標?各個(gè)性能指標的權重占多少合適呢?
性能指標基準線(xiàn)Google 提供了各個(gè)性能指標的基準線(xiàn),有一定的參考意義。為什么只說(shuō)是有一定參考意義?首先基準線(xiàn)本身是在變化的,隨著(zhù)指標計算的逐漸更新以及軟件硬件的更新,基準線(xiàn)也會(huì )有一定的調整。其次用戶(hù)的使用場(chǎng)景對性能指標也會(huì )有很大的影響,比如 iOS 用戶(hù)上報的性能指標一般都優(yōu)于 Android 用戶(hù)上報的性能指標。
下方是目前字節內部使用的部分性能指標基準線(xiàn),基本對齊 Google 建議的基準線(xiàn),通過(guò)這些數據可以分析站點(diǎn)的性能達標率情況。
衡量站點(diǎn)滿(mǎn)意度
站點(diǎn)滿(mǎn)意度的衡量除了要考慮常規的性能指標外,還要考慮體驗類(lèi)的指標,比如專(zhuān)門(mén)衡量視覺(jué)穩定性的指標 CLS。
線(xiàn)上的站點(diǎn)滿(mǎn)意度衡量,一般會(huì )在參考lighthouse的滿(mǎn)意度計算規則的基礎上,去除一些推薦在實(shí)驗室環(huán)境測量的指標的權重。
下方是目前字節使用的線(xiàn)上站點(diǎn)性能滿(mǎn)意度的權重計算公式,去除了SI 和 TBT這兩個(gè)不推薦在線(xiàn)上環(huán)境測量的指標。
那么有了一個(gè)站點(diǎn)滿(mǎn)意度以后,我們終于能知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該怎樣優(yōu)化?
如何優(yōu)化站點(diǎn)性能通常,我們可以從性能指標下手去做針對性的優(yōu)化。雖然指標各不相同,但是優(yōu)化的思路是相通的。在了解清楚指標的依賴(lài)項以后,通過(guò)優(yōu)化指標的相關(guān)依賴(lài)項,就能快速優(yōu)化性能指標,從而提升站點(diǎn)性能。說(shuō)起來(lái)比較抽象,舉個(gè)例子:比如當我們想要優(yōu)化 TTI ,根據剛剛提到的 TTI 的計算方式,可以得出 TTI 的依賴(lài)項主要包含 FCP 、請求和 Long tasks,那么盡快的渲染、盡早的請求、請求盡快結束、避免長(cháng)任務(wù)就是優(yōu)化的關(guān)鍵。關(guān)于指標的具體優(yōu)化措施的內容比較多,將在后續的文章中展開(kāi)介紹。了解全面的優(yōu)化措施固然重要,但把每個(gè)措施都做一遍并不一定能夠高效地解決站點(diǎn)面臨的關(guān)鍵性能問(wèn)題。如何立竿見(jiàn)影、具有針對性的去優(yōu)化?通過(guò)還原用戶(hù)加載時(shí)的情況來(lái)幫助定位性能問(wèn)題是一個(gè)思路。利用線(xiàn)上監控定位性能問(wèn)題一般情況下,前端監控除了監控性能指標以外,還會(huì )監控請求和資源的加載以及 Long tasks 等數據,這些數據可以幫助還原用戶(hù)的加載現場(chǎng),幫助找到蛛絲馬跡。比如下面這個(gè)例子, 多項性能指標都很差。通過(guò)監控平臺還原出的資源加載瀑布圖,可以看出絕大部分時(shí)間都耗在了拉取資源上。那么就可以初步得出性能優(yōu)化方案,將優(yōu)化措施側重在資源優(yōu)化上,比如縮小JS文件體積、延遲加載未使用的JS代碼等等。
線(xiàn)上監控幫助定位性能問(wèn)題的例子還有很多,這里不一一介紹了。截圖中使用的是字節內部的前端監控平臺,目前這套解決方案已同步在火山引擎上,接入即可對 Web 端真實(shí)數據進(jìn)行實(shí)時(shí)監控、報警歸因、聚類(lèi)分析和細節定位,解決白屏、性能瓶頸、慢查詢(xún)等關(guān)鍵問(wèn)題,歡迎體驗。
掃描下方二維碼,立即申請免費使用?? 查看全部
前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
作者:彭莉,火山引擎 APM 研發(fā)工程師。2020年加入字節,負責前端監控 SDK 的開(kāi)發(fā)維護、平臺數據消費的探索和落地。
背景你知道有多少用戶(hù)沒(méi)等到頁(yè)面首屏出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。比如, BBC 發(fā)現他們的網(wǎng)站加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高性能站點(diǎn)比低性能站點(diǎn)更能吸引和留住用戶(hù),而留住用戶(hù)對于提高用戶(hù)轉化率至關(guān)重要。
這篇文章就是以此為背景,介紹字節內部是如何衡量站點(diǎn)性能的,如何依靠性能監控定位線(xiàn)上站點(diǎn)性能問(wèn)題的。
如何衡量站點(diǎn)性能站點(diǎn)性能好壞的表現形式是多樣的,不是單純通過(guò)頁(yè)面加載速度、頁(yè)面渲染速度就能衡量,而是要關(guān)注從頁(yè)面開(kāi)始加載到被關(guān)閉的整個(gè)過(guò)程中,用戶(hù)對性能的感知。一個(gè)頁(yè)面,即使很快渲染,如果對用戶(hù)的交互遲遲沒(méi)有響應,那么在用戶(hù)心中這個(gè)站點(diǎn)的性能依然很差。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,另一類(lèi)是運行時(shí)性能。前者衡量的是頁(yè)面從加載開(kāi)始到可以穩定交互的性能情況,后者衡量的是頁(yè)面穩定后到頁(yè)面關(guān)閉的性能情況。
首屏性能早在 2012 年, Web 性能工作組[1]就針對頁(yè)面加載場(chǎng)景制定了加載過(guò)程模型,用來(lái)衡量頁(yè)面加載各個(gè)階段的耗時(shí)情況,從而衡量頁(yè)面加載的性能。具體的加載過(guò)程模型如圖所示:
這個(gè)模型定義了頁(yè)面加載開(kāi)始到頁(yè)面加載完成整個(gè)過(guò)程的各個(gè)時(shí)間點(diǎn),除了正常的初始化并且拉取到主文檔的時(shí)間點(diǎn)以外,還包括了解析渲染的詳細時(shí)間點(diǎn)。比如:雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載時(shí)的性能情況,但是線(xiàn)上用戶(hù)其實(shí)感知不到這些時(shí)間點(diǎn)的區別。對于用戶(hù)而言,只能感知到頁(yè)面何時(shí)開(kāi)始渲染、何時(shí)渲染出主要內容、何時(shí)可以交互、以及交互時(shí)是否有延遲。
那么針對用戶(hù)感知到的這四個(gè)階段,有沒(méi)有可用于衡量的指標呢?
何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標都來(lái)源于 Paint Timing[2] 標準, 這個(gè)標準主要是記錄在頁(yè)面加載期間的一些關(guān)鍵時(shí)間點(diǎn)。通過(guò)這兩個(gè)指標,就可以衡量頁(yè)面何時(shí)開(kāi)始渲染內容了。
何時(shí)渲染出主要內容:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)渲染出主要內容了。不過(guò)業(yè)界有測試得出, LCP 非常近似于 FMP 的時(shí)間點(diǎn),同時(shí) FMP 性能消耗較大,且會(huì )因為一些細小的變化導致數值巨大波動(dòng),所以推薦使用 LCP。而 SI 因為計算復雜,指標難以解釋?zhuān)砸话阒辉趯?shí)驗室環(huán)境下使用。
何時(shí)可以交互:TTI && TBT
TTI 雖然可以衡量頁(yè)面可以交互的時(shí)間點(diǎn),但是卻無(wú)法感知這個(gè)期間瀏覽器的繁忙狀態(tài)。而結合 TBT ,就能幫助理解在加載期間,頁(yè)面無(wú)法響應用戶(hù)輸入的時(shí)間有多久。
交互時(shí)是否有延遲:FID && MPFIDMPFID 是一個(gè)虛擬的可能的延遲時(shí)間,而FID是用戶(hù)真實(shí)的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)建立對整個(gè)應用的良好印象。同時(shí)在頁(yè)面加載階段,資源的處理任務(wù)最重,最容易產(chǎn)生輸入延遲。
至此,通過(guò)上面每個(gè)階段的指標,基本可以實(shí)現全面衡量首屏性能。那么運行時(shí)的性能又可以怎樣衡量呢?
運行時(shí)性能
運行時(shí)性能一般可以通過(guò)Long tasks 和 Input Delay來(lái)感知。Long tasks主要是衡量主線(xiàn)程的繁忙情況,而 Input Delay 主要是衡量用戶(hù)交互的延遲情況。
Long tasks
如果一個(gè)任務(wù)在主線(xiàn)程上運行超過(guò) 50 毫秒,那么它就是 Long task。如果可以收集到運行時(shí)的所有Long tasks,就能知道運行時(shí)的性能情況。在具體實(shí)踐中,可以關(guān)注耗時(shí)較長(cháng)的Long task,將它和用戶(hù)行為關(guān)聯(lián)在一起,可以有效幫助定位線(xiàn)上卡頓的原因。
Input Delay

它源于 Event Timing[3] 標準,這個(gè)標準主要是幫助深入了解由用戶(hù)交互觸發(fā)的某些事件的延遲,通過(guò)計算用戶(hù)輸入和處理輸入后的頁(yè)面繪制時(shí)間的差值來(lái)感知延遲時(shí)間。這些延遲通常是由于開(kāi)發(fā)人員代碼編寫(xiě)不當,引起 JS 執行時(shí)間過(guò)長(cháng)而產(chǎn)生的。
性能指標的計算原理
頁(yè)面性能相關(guān)的指標都有了,那么如何采集這些數據呢?
采集頁(yè)面加載過(guò)程的各階段耗時(shí)
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要依賴(lài) Navigation Timing[4] 標準,這個(gè)標準后來(lái)升級到了2.0版本, 對應 Navigation Timing 2[5]標準,兩者雖然不盡相同,但是可計算出的指標基本一致。在瀏覽器中可以通過(guò)下面的方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
基于這些數據,不僅可以計算出 DNS / TCP / Request 等耗時(shí),還可以計算出 DOMReady / DOMParse / Load 等耗時(shí)。
采集 FP && FCP
FP 和 FCP 可以通過(guò)瀏覽器提供的 API 直接獲取,所以采集原理并不復雜。如果頁(yè)面已經(jīng)完成了首次繪制和首次內容繪制,可以使用下面的方式直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有開(kāi)始首次繪制,就需要通過(guò)監聽(tīng)獲取。
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 主要依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 />
瀏覽器會(huì )多次報告 LCP ,而一般真正的 LCP 是用戶(hù)交互前最近一次報告的 LCP ,因為交互往往會(huì )改變用戶(hù)可見(jiàn)的內容,所以用戶(hù)交互后新報告的 LCP 不再符合 LCP 的指標定義。
采集 FMP與 FP / FCP / LCP 相比, FMP 的采集相對比較復雜,它需要通過(guò)算法計算得出,而業(yè)界并沒(méi)有統一的算法。不過(guò)比較認可的一個(gè)計算 FMP 的方式是「認定頁(yè)面在加載和渲染過(guò)程中最大布局變動(dòng)之后的那個(gè)繪制時(shí)間即為當前頁(yè)面的 FMP 」。由于在頁(yè)面渲染過(guò)程中,「 DOM 結構變化的時(shí)間點(diǎn)」和與之對應的「渲染的時(shí)間點(diǎn)」近似相同,所以字節內部計算 FMP 的方式是:計算出 DOM 結構變化最劇烈的時(shí)間點(diǎn),即為 FMP。具體步驟為:通過(guò) MutationObserver 監聽(tīng)每一次頁(yè)面整體的 DOM 變化,觸發(fā) MutationObserver 的回調在回調計算出當前 DOM 樹(shù)的分數在結算時(shí),通過(guò)對比得出分數變化最劇烈的時(shí)刻,即為 FMP采集 TTI && TBT與 FMP 相似,瀏覽器也沒(méi)有提供直接獲取 TTI 的 API ,不過(guò)針對如何計算 TTI 有詳細的描述,實(shí)現對應描述就可以得出 TTI 的時(shí)間點(diǎn)。具體的描述是:先找到 FCP 的時(shí)間點(diǎn),再往前找到一個(gè)安靜窗口。安靜窗口需要滿(mǎn)足三個(gè)條件: 1) 沒(méi)有 Long task。2)窗口中正在處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗讀應該至少 5s。
窗口前的最后一個(gè)長(cháng)任務(wù)的結束時(shí)間就是 TTI 。
而通過(guò)計算 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間的總和,就能得出 TBT 。

阻塞時(shí)間是 Long task 中超過(guò) 50ms 后的任務(wù)耗時(shí)。
采集 FID && MPFID
FID 同樣依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 之后最長(cháng)的長(cháng)任務(wù)耗時(shí),可以通過(guò)監聽(tīng) FCP 之后的 Long tasks,對比拿到最長(cháng)的長(cháng)任務(wù)就是 MPFID 。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集各個(gè)性能指標,但是在 JS 中計算具體指標要更為復雜。原因有兩點(diǎn):一是 API 報告的內容和指標本身的定義有部分差異,所以計算時(shí)要處理這些差異;二是 部分場(chǎng)景下瀏覽器不會(huì )報告對應內容,這些場(chǎng)景下需要模擬測量。
怎樣評估站點(diǎn)整體的性能好壞
雖然有眾多性能指標,但是每個(gè)性能指標評估的都是單一方面,如何整體來(lái)看站點(diǎn)的性能是好是壞呢?對于每個(gè)單一指標,是否有標準去定義指標的值在具體哪個(gè)范圍內能算優(yōu)秀?線(xiàn)上的站點(diǎn)性能應該重點(diǎn)考量哪些性能指標?各個(gè)性能指標的權重占多少合適呢?
性能指標基準線(xiàn)Google 提供了各個(gè)性能指標的基準線(xiàn),有一定的參考意義。為什么只說(shuō)是有一定參考意義?首先基準線(xiàn)本身是在變化的,隨著(zhù)指標計算的逐漸更新以及軟件硬件的更新,基準線(xiàn)也會(huì )有一定的調整。其次用戶(hù)的使用場(chǎng)景對性能指標也會(huì )有很大的影響,比如 iOS 用戶(hù)上報的性能指標一般都優(yōu)于 Android 用戶(hù)上報的性能指標。
下方是目前字節內部使用的部分性能指標基準線(xiàn),基本對齊 Google 建議的基準線(xiàn),通過(guò)這些數據可以分析站點(diǎn)的性能達標率情況。
衡量站點(diǎn)滿(mǎn)意度
站點(diǎn)滿(mǎn)意度的衡量除了要考慮常規的性能指標外,還要考慮體驗類(lèi)的指標,比如專(zhuān)門(mén)衡量視覺(jué)穩定性的指標 CLS。
線(xiàn)上的站點(diǎn)滿(mǎn)意度衡量,一般會(huì )在參考lighthouse的滿(mǎn)意度計算規則的基礎上,去除一些推薦在實(shí)驗室環(huán)境測量的指標的權重。
下方是目前字節使用的線(xiàn)上站點(diǎn)性能滿(mǎn)意度的權重計算公式,去除了SI 和 TBT這兩個(gè)不推薦在線(xiàn)上環(huán)境測量的指標。
那么有了一個(gè)站點(diǎn)滿(mǎn)意度以后,我們終于能知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該怎樣優(yōu)化?
如何優(yōu)化站點(diǎn)性能通常,我們可以從性能指標下手去做針對性的優(yōu)化。雖然指標各不相同,但是優(yōu)化的思路是相通的。在了解清楚指標的依賴(lài)項以后,通過(guò)優(yōu)化指標的相關(guān)依賴(lài)項,就能快速優(yōu)化性能指標,從而提升站點(diǎn)性能。說(shuō)起來(lái)比較抽象,舉個(gè)例子:比如當我們想要優(yōu)化 TTI ,根據剛剛提到的 TTI 的計算方式,可以得出 TTI 的依賴(lài)項主要包含 FCP 、請求和 Long tasks,那么盡快的渲染、盡早的請求、請求盡快結束、避免長(cháng)任務(wù)就是優(yōu)化的關(guān)鍵。關(guān)于指標的具體優(yōu)化措施的內容比較多,將在后續的文章中展開(kāi)介紹。了解全面的優(yōu)化措施固然重要,但把每個(gè)措施都做一遍并不一定能夠高效地解決站點(diǎn)面臨的關(guān)鍵性能問(wèn)題。如何立竿見(jiàn)影、具有針對性的去優(yōu)化?通過(guò)還原用戶(hù)加載時(shí)的情況來(lái)幫助定位性能問(wèn)題是一個(gè)思路。利用線(xiàn)上監控定位性能問(wèn)題一般情況下,前端監控除了監控性能指標以外,還會(huì )監控請求和資源的加載以及 Long tasks 等數據,這些數據可以幫助還原用戶(hù)的加載現場(chǎng),幫助找到蛛絲馬跡。比如下面這個(gè)例子, 多項性能指標都很差。通過(guò)監控平臺還原出的資源加載瀑布圖,可以看出絕大部分時(shí)間都耗在了拉取資源上。那么就可以初步得出性能優(yōu)化方案,將優(yōu)化措施側重在資源優(yōu)化上,比如縮小JS文件體積、延遲加載未使用的JS代碼等等。
線(xiàn)上監控幫助定位性能問(wèn)題的例子還有很多,這里不一一介紹了。截圖中使用的是字節內部的前端監控平臺,目前這套解決方案已同步在火山引擎上,接入即可對 Web 端真實(shí)數據進(jìn)行實(shí)時(shí)監控、報警歸因、聚類(lèi)分析和細節定位,解決白屏、性能瓶頸、慢查詢(xún)等關(guān)鍵問(wèn)題,歡迎體驗。
掃描下方二維碼,立即申請免費使用??
日志收集神器:Fluentd 的簡(jiǎn)明指南,收好了~
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2022-08-13 23:42
因公眾號更改推送規則,請點(diǎn)“在看”并加“星標”第一時(shí)間獲取精彩分享
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是 fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd 也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd 配置。
基本概念我們可能有在 bash 中執行過(guò) tail -f myapp.log | grep “what I want” > example.log 這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾| grep "what I want"
在這里,我們從尾部 -f 的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf 是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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 >
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志 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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現 grep ‘what I want’ 過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,我們能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
福利
系統/網(wǎng)絡(luò )/應用運維人員的交流圈子,不定期為您提供運維技術(shù)領(lǐng)域前沿資訊/培訓課程/獨家技術(shù)手冊/運維工具/文檔模板等,行業(yè)大咖分享交流/同行經(jīng)驗分享互動(dòng),期待你的加入!掃碼即可加入。
隨著(zhù)材料不斷增多社群會(huì )不定期漲價(jià)早加入更優(yōu)惠
掃碼添加客服微信免費獲取以下資料:
1.網(wǎng)絡(luò )安全技術(shù)資料--回復"1"
2.容器云運維資料包--回復"2"
3.Python學(xué)習資料--回復"3"
4.Devops學(xué)習視頻課件--回復"4"
5.Linux運維技術(shù)資料--回復"5" 查看全部
日志收集神器:Fluentd 的簡(jiǎn)明指南,收好了~
因公眾號更改推送規則,請點(diǎn)“在看”并加“星標”第一時(shí)間獲取精彩分享
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是 fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd 也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd 配置。
基本概念我們可能有在 bash 中執行過(guò) tail -f myapp.log | grep “what I want” > example.log 這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾| grep "what I want"
在這里,我們從尾部 -f 的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf 是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:

2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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 >
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志 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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現 grep ‘what I want’ 過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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解析訪(fǎng)問(wèn)日志

為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,我們能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
福利
系統/網(wǎng)絡(luò )/應用運維人員的交流圈子,不定期為您提供運維技術(shù)領(lǐng)域前沿資訊/培訓課程/獨家技術(shù)手冊/運維工具/文檔模板等,行業(yè)大咖分享交流/同行經(jīng)驗分享互動(dòng),期待你的加入!掃碼即可加入。
隨著(zhù)材料不斷增多社群會(huì )不定期漲價(jià)早加入更優(yōu)惠
掃碼添加客服微信免費獲取以下資料:
1.網(wǎng)絡(luò )安全技術(shù)資料--回復"1"
2.容器云運維資料包--回復"2"
3.Python學(xué)習資料--回復"3"
4.Devops學(xué)習視頻課件--回復"4"
5.Linux運維技術(shù)資料--回復"5"
開(kāi)源專(zhuān)利分析工具(下) | The WIPO Manual on Open So
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2022-08-10 15:25
將本文節選自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介紹了可用于專(zhuān)利分析的開(kāi)源工具。本文所介紹的工具可以分為八個(gè)種類(lèi):通用工具、數據清理工具、數據挖掘工具、數據可視化工具、網(wǎng)絡(luò )數據可視化工具、信息圖制作工具、地理數據可視化工具、文本挖掘工具。上期文章介紹了前面六種(相關(guān)鏈接:;),本期文章介紹最后兩種:地理數據可視化工具、文本挖掘工具。PART 7地理數據可視化工具
對于地理數據可視化工具,除了無(wú)處不在的Google地圖和眾所周知的Google地球,我們認為還可以去探索一些其他的工具。
7.1 Open Street Map目前越來(lái)越受歡迎的一款應用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受歡迎的、開(kāi)源的、基于JavaScript庫的交互地圖。
可通過(guò)API訪(fǎng)問(wèn)。R用戶(hù)可以使用leafletr包,其教程在R-bloggers上()。Python用戶(hù)的相關(guān)教程可以參見(jiàn)以下鏈接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map來(lái)創(chuàng )建強大的交互圖表組合,這些圖表可以鏈接到具有不同地理編碼精度的地圖。Tableau Public可能是用專(zhuān)利數據創(chuàng )建地圖的最簡(jiǎn)單的入門(mén)工具。下面這張地圖就是使用自定義地理編碼創(chuàng )建的,其展示了科學(xué)出版物出版的國家以及這些科學(xué)出版物的名稱(chēng)。進(jìn)入后方鏈接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一個(gè)在所有主流平臺上都能夠運行的軟件包。
WIPO的專(zhuān)利分析專(zhuān)家利用QGIS描繪了全球海洋生物科學(xué)研究和專(zhuān)利文獻的全球分布,并標記了深海熱液噴口的位置()。下圖是基于科學(xué)文獻文本挖掘得出的全球海洋科學(xué)研究點(diǎn)的QGIS地圖。
7.5 .
.()不是一個(gè)地圖制作工具,而是一個(gè)包含了全球地理名稱(chēng)的數據庫。在.中,你可以獲得很多地方的地理位置數據。用戶(hù)可以在R、以及Python、Ruby、PHP的客戶(hù)端通過(guò)geonames包()訪(fǎng)問(wèn)geonames。7.6 OpenLayers
如果你想要制作自定義的一些地圖形式,OpenLayers()可以幫到你。用戶(hù)可以通過(guò)OpenLayers在OpenStreetMap制作的地圖上添加更多的圖層和其他數據源,這樣就可以制作出用戶(hù)自己想要的地圖。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款開(kāi)源網(wǎng)絡(luò )應用程序和交互式地圖制作工具,CartoDB具有免費和付費兩種賬戶(hù)。對于開(kāi)發(fā)者而言,CartoDB有很多工具的擴展文檔和API。7.8 D3.js
D3.js()是一個(gè)用于編輯數據和文檔的JavaScript庫。D3.js也是網(wǎng)絡(luò )上流行的幾個(gè)可視化工具的底層庫。7.9 Highcharts
對于用于非商業(yè)用途的圖表,部分圖表是免費的,部分圖表需要付費。7.10 Datawrapper
Datawrapper()是一個(gè)非常完整的制作圖表和地圖的在線(xiàn)可視化工具。而且Datawrapper被很多大牌新聞媒體所采用,所以它做出來(lái)的圖表讓你有一種似曾相識的感覺(jué)。Datawrapper也分有免費和付費的不同功能。7.11 Plotly
Plotly()為R、Python、Matlab、Node.js和Excel的用戶(hù)都提供免費或付費的服務(wù),免費版本的鏈接為:。R的用戶(hù)可以參考Carson Sievert的一本免費的電子書(shū)Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的優(yōu)點(diǎn)是易于使用,并且能夠使用很多語(yǔ)言訪(fǎng)問(wèn),這些優(yōu)點(diǎn)使得Plotly越來(lái)越受歡迎。
PART 8文本挖掘工具8.1 TidytextWIPO的專(zhuān)利分析專(zhuān)家使用來(lái)自Julia Silge和David Robinson的tidytext R包()來(lái)進(jìn)行文本挖掘。tidytext可以將文本挖掘的任務(wù)變得簡(jiǎn)單,并且還有免費的電子書(shū)可以參考。此外,我們還推薦你使用來(lái)自Tyler Rinker的textclean R包()來(lái)清理數據。8.2 Weka
Weka()是一個(gè)基于Java的文本挖掘軟件。8.3 NLTK
NLTK()是Python中最好的包了,它幾乎能夠實(shí)現所有主流需求。其配套的書(shū)籍NaturalLanguage Processing with Python也值得參考。
此外,Python文本挖掘包()比NLTK包更簡(jiǎn)單,但可能適合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一個(gè)通用目的的機器學(xué)習庫,其提供了關(guān)于處理文本和數據集的詳細說(shuō)明文檔()。8.5 spaCy
spaCy是一個(gè)用于處理自然語(yǔ)言的免費機器學(xué)習包。spaCy最近越來(lái)越受歡迎,因為它專(zhuān)注于創(chuàng )建可以投入生產(chǎn)的機器學(xué)習模型,而不僅僅是學(xué)術(shù)探索。在推進(jìn)自然語(yǔ)言處理并使得每個(gè)人都可以使用方面,spaCy作出了非常重要的貢獻。我們推薦由spaCy的創(chuàng )始人和開(kāi)發(fā)者之一的Ines Montani所寫(xiě)的免費教程(),來(lái)幫助學(xué)習如何使用spaCy。如果是使用R的用戶(hù),那么可以使用由倫敦經(jīng)濟學(xué)院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo開(kāi)發(fā)的spacyr包,這是一個(gè)非常好的選擇,并且在使用時(shí)也有據可查。8.6 機器學(xué)習的注解工具(Annotation Tools forMachine Learning)在對文本或圖像進(jìn)行機器學(xué)習時(shí),通常需要對一些文本或圖像進(jìn)行注釋以訓練模型。在這一方面,出現了越來(lái)越多的工具,包括需要付費的explosion.ai(其開(kāi)發(fā)者為spaCy的開(kāi)發(fā)者)。下面列出了一些可供嘗試的免費工具:? Label Studio()? Inception()? Doccano()? Label Box()8.7 Google單詞樹(shù)(Google Word Trees)Word Trees可以用來(lái)對文本進(jìn)行詳細分析,例如對權利要求進(jìn)行分析做成權利要求樹(shù)。
Google Developers網(wǎng)站上的GoogleWord Trees提供了使用Javascript生成單詞樹(shù)的說(shuō)明。8.8 R語(yǔ)言文本挖掘tm包R的文本挖掘tm包提供了很多訪(fǎng)問(wèn)文本挖掘工具的途徑。使用者可以參考tm包的開(kāi)發(fā)者所寫(xiě)的說(shuō)明()。在R-bloggers()上也有很多非常實(shí)用的關(guān)于文本挖掘的教程。推薦參考由Graham Williams在2014年寫(xiě)的教程Hands-On Data Science with R Text Mining。關(guān)于近期的基于R的文本挖掘工具的概覽,可以參見(jiàn)Fridolin Wild于2021年寫(xiě)的CRAN Task View: Natural Language Processing()。需要注意的是,許多文本挖掘包通常側重于生成單詞。這種方式,對于非學(xué)術(shù)目的的文本挖掘工作,并不十分有用。比如,對于專(zhuān)利分析來(lái)說(shuō),更注重于從文本中提取出短語(yǔ),而非單詞。因此,對專(zhuān)利分析人員而言,尋找那些能夠提取短語(yǔ)并且允許對其進(jìn)行深入挖掘的工具更有意義。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的資源。但是,近來(lái)R和Python正越來(lái)越多地被一起使用,以發(fā)揮它們的不同優(yōu)勢。8.10 其他文本挖掘資源有關(guān)更多的文本挖掘工具的選擇,請參閱這篇預測分析文章Top20 free text mining software tools()。
對于其他免費文本挖掘工具,可以參考一些語(yǔ)料庫語(yǔ)言學(xué)網(wǎng)站(corpus linguistics websites)(語(yǔ)料庫語(yǔ)言學(xué),主要研究機器可讀的自然語(yǔ)言文本的采集、存儲、檢索、統計、詞性和句法標注、句法語(yǔ)義分析,以及具有上述功能的語(yǔ)料庫在語(yǔ)言定量分析、詞典編纂、作品風(fēng)格分析、自然語(yǔ)言理解和機器翻譯等領(lǐng)域中的應用),例如:Corpus software and related tools()。一些分析工具是專(zhuān)門(mén)為處理專(zhuān)利數據而開(kāi)發(fā)的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育類(lèi)型的app)的用戶(hù)可以免費使用VantagePoint的補貼版本。
還有一些定性數據分析軟件工具可以應用于專(zhuān)利分析,例如:
?MAXQDA()
?AtlasTI()
?QDAMiner()
但是,除了QDAMine Lite(僅限 Windows)之外,其他的工具提供了免費試用的機會(huì ),這些工具并不屬于我們所關(guān)注的開(kāi)源工具。
PART 9小結在這三篇文章系列中(;),我們介紹了可用于專(zhuān)利分析的一些主要的免費和開(kāi)源工具。這些工具并不是專(zhuān)門(mén)用于專(zhuān)利分析的,但是它們能夠用來(lái)分析專(zhuān)利數據。在實(shí)踐中,了解這些工具的作用,以及了解你的分析需求,是非常重要的。在專(zhuān)利分析的實(shí)踐中,將付費工具和免費工具結合起來(lái)使用也是非常重要的。例如,WIPO的專(zhuān)利分析報告《動(dòng)物遺傳資源專(zhuān)利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,對1100萬(wàn)件專(zhuān)利文獻進(jìn)行大規模文本挖掘,并結合使用PATSTAT進(jìn)行數據統計,使用Thomson Innovation和VantagePoint進(jìn)行數據驗證,使用Tableau和Gephi做數據可視化。簡(jiǎn)而言之,使用免費的開(kāi)源工具來(lái)完成一個(gè)專(zhuān)利分析項目是可能的,但是如果想要讓專(zhuān)利分析的整個(gè)流程進(jìn)行更順暢,可能需要結合開(kāi)源工具和商業(yè)工具一起使用。所以,了解這些工具并且清楚它們的強項和優(yōu)勢在哪里十分重要。PART 10選擇分析工具需要考慮的問(wèn)題清單當開(kāi)始使用一項開(kāi)源軟件時(shí),最好是要提前問(wèn)問(wèn)自己下面這些問(wèn)題,來(lái)判斷這些工具是否能夠滿(mǎn)足你的特定需求。
下面的這個(gè)清單并不是固定的,只是為了鼓勵你在使用開(kāi)源工具之前先思考并明確一下這個(gè)工具是否適用。1. 這個(gè)工具有意義嗎?也就是說(shuō),你能不能立刻清楚這個(gè)工具的用途是什么?如果答案是否定的,這個(gè)工具對于你的特定需求來(lái)說(shuō)可能過(guò)于專(zhuān)業(yè),或者是這個(gè)工具的開(kāi)發(fā)者可能沒(méi)有清楚的表明這個(gè)工具想要實(shí)現的目的,那這就要慎重選擇。2.你是否了解這個(gè)工具所涉及的編程語(yǔ)言?如果你不了解這個(gè)編程語(yǔ)言的話(huà),會(huì )不會(huì )對你使用這個(gè)工具產(chǎn)生影響?為了使用這個(gè)工具而去學(xué)習該編程語(yǔ)言是否值得?有沒(méi)有免費的或者你能負擔的相關(guān)課程?3.源代碼是開(kāi)源的還是專(zhuān)有的?開(kāi)源許可的條款和條件是什么?當使用開(kāi)源和免費軟件時(shí),清楚地了解開(kāi)源許可的精確范圍。例如,你是否需要以與原始許可完全相同的條款向他人提供對源代碼的任何修改?如果你處理了源代碼,這就會(huì )存在知識產(chǎn)權風(fēng)險。如果你沒(méi)有在源代碼層面上工作,這可能不就不涉及知識產(chǎn)權問(wèn)題。了解開(kāi)放源代碼許可對我們的工作來(lái)說(shuō)總是有意義的。4.誰(shuí)將擁有我的數據?如果我們需要上傳數據到一個(gè)基于網(wǎng)頁(yè)的服務(wù)應用上,那么數據上傳之后誰(shuí)會(huì )擁有這些數據,其他什么人會(huì )在什么條件下能夠獲得這些數據?當這些數據是商業(yè)相關(guān)的,這個(gè)問(wèn)題就顯得尤為關(guān)鍵。
5.“免費”到底意味著(zhù)什么?免費版本通常會(huì )導致高級服務(wù)(即轉變?yōu)楦顿M的服務(wù))。這一轉變是開(kāi)源商業(yè)模型的關(guān)鍵特征。在一些情況下,免費的版本可能只能處理、存儲或輸出少量的數據。在另一些情況下,有些免費工具并不會(huì )對用戶(hù)在使用上施加任何限制,但是使用這些免費工具要求用戶(hù)具備相應的知識或技能。6.有其他企業(yè)(或者專(zhuān)利局)在使用這個(gè)工具嗎?如果有的話(huà),就說(shuō)明這個(gè)工具較為可靠并且還能夠找到相應的案例。7.這個(gè)工具是否有相關(guān)的使用說(shuō)明文檔或者教程?這是反映該工具是否成熟的指標。如果有很多教程和說(shuō)明文檔,說(shuō)明在行業(yè)中有很多人在使用它。8.有多少人在使用這個(gè)工具?這些用戶(hù)是否積極創(chuàng )建論壇和博客等,以支持用戶(hù)廣泛地交流其使用經(jīng)驗?9.這個(gè)工具是只有一個(gè)功能還是集成了很多不同的功能?換言之,這個(gè)工具能夠滿(mǎn)足所有的需求,還是僅僅是我們工具箱中的一個(gè)特殊的工具。在一些情況下,一個(gè)專(zhuān)注于一種功能的工具能夠把這個(gè)功能做到極致,而那些同時(shí)集成了很多功能的工具可能每一項功能都僅僅是一般般。在本文中所列出的所有工具中,R和Python(或者它們的結合使用)能夠實(shí)現專(zhuān)利分析全流程,從數據采集到數據可視化。在實(shí)踐中,大多數專(zhuān)利分析工具箱都包含通用工具和特定工具。
10.這個(gè)工具的極限在哪里?我們需要了解一個(gè)軟件的極限在哪里,這樣以后在嘗試做一些關(guān)鍵任務(wù)時(shí)就會(huì )有所準備。例如,一些軟件聲稱(chēng)可以完成一些特定的任務(wù),比如處理上千條或者上百萬(wàn)條數據,但實(shí)際上如果真的處理了這么大量的數據,結果就會(huì )很糟糕。通過(guò)嘗試使用這個(gè)工具到其極限,可以確定這個(gè)工具極限在哪里以及如何充分利用它。11.這個(gè)工具是否符合我的需求?最近,大數據和使用Hadoop進(jìn)行分布式計算處理大量數據是領(lǐng)域熱點(diǎn)。Hadoop是開(kāi)源的,任何人都可以使用它,但是Hadoop和大部分的專(zhuān)利分析需求都不相匹配,除非是需要分析全球所有的專(zhuān)利文獻,大量的文獻資料和科學(xué)數據。舉例來(lái)說(shuō),前文中提到的WIPO的《動(dòng)物遺傳資源專(zhuān)利分析報告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel處理了1100萬(wàn)條專(zhuān)利記錄。而決定使用GNU Parallel而非Hadoop來(lái)處理這1100萬(wàn)條專(zhuān)利數據的部分原因,是因為我們認為Hadoop使用起來(lái)比較復雜,而且對于Hadoop來(lái)說(shuō),處理1100萬(wàn)條數據屬于大材小用。簡(jiǎn)而言之,仔細考慮一個(gè)工具是否與我們的目標需求相適應和相匹配是十分重要的。12.最后,用一個(gè)簡(jiǎn)單的原則來(lái)總結如何衡量一個(gè)工具是否可用于專(zhuān)利分析,即這個(gè)工具對我有沒(méi)有用? 查看全部
開(kāi)源專(zhuān)利分析工具(下) | The WIPO Manual on Open So
將本文節選自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介紹了可用于專(zhuān)利分析的開(kāi)源工具。本文所介紹的工具可以分為八個(gè)種類(lèi):通用工具、數據清理工具、數據挖掘工具、數據可視化工具、網(wǎng)絡(luò )數據可視化工具、信息圖制作工具、地理數據可視化工具、文本挖掘工具。上期文章介紹了前面六種(相關(guān)鏈接:;),本期文章介紹最后兩種:地理數據可視化工具、文本挖掘工具。PART 7地理數據可視化工具
對于地理數據可視化工具,除了無(wú)處不在的Google地圖和眾所周知的Google地球,我們認為還可以去探索一些其他的工具。
7.1 Open Street Map目前越來(lái)越受歡迎的一款應用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受歡迎的、開(kāi)源的、基于JavaScript庫的交互地圖。
可通過(guò)API訪(fǎng)問(wèn)。R用戶(hù)可以使用leafletr包,其教程在R-bloggers上()。Python用戶(hù)的相關(guān)教程可以參見(jiàn)以下鏈接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map來(lái)創(chuàng )建強大的交互圖表組合,這些圖表可以鏈接到具有不同地理編碼精度的地圖。Tableau Public可能是用專(zhuān)利數據創(chuàng )建地圖的最簡(jiǎn)單的入門(mén)工具。下面這張地圖就是使用自定義地理編碼創(chuàng )建的,其展示了科學(xué)出版物出版的國家以及這些科學(xué)出版物的名稱(chēng)。進(jìn)入后方鏈接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一個(gè)在所有主流平臺上都能夠運行的軟件包。
WIPO的專(zhuān)利分析專(zhuān)家利用QGIS描繪了全球海洋生物科學(xué)研究和專(zhuān)利文獻的全球分布,并標記了深海熱液噴口的位置()。下圖是基于科學(xué)文獻文本挖掘得出的全球海洋科學(xué)研究點(diǎn)的QGIS地圖。
7.5 .
.()不是一個(gè)地圖制作工具,而是一個(gè)包含了全球地理名稱(chēng)的數據庫。在.中,你可以獲得很多地方的地理位置數據。用戶(hù)可以在R、以及Python、Ruby、PHP的客戶(hù)端通過(guò)geonames包()訪(fǎng)問(wèn)geonames。7.6 OpenLayers

如果你想要制作自定義的一些地圖形式,OpenLayers()可以幫到你。用戶(hù)可以通過(guò)OpenLayers在OpenStreetMap制作的地圖上添加更多的圖層和其他數據源,這樣就可以制作出用戶(hù)自己想要的地圖。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款開(kāi)源網(wǎng)絡(luò )應用程序和交互式地圖制作工具,CartoDB具有免費和付費兩種賬戶(hù)。對于開(kāi)發(fā)者而言,CartoDB有很多工具的擴展文檔和API。7.8 D3.js
D3.js()是一個(gè)用于編輯數據和文檔的JavaScript庫。D3.js也是網(wǎng)絡(luò )上流行的幾個(gè)可視化工具的底層庫。7.9 Highcharts
對于用于非商業(yè)用途的圖表,部分圖表是免費的,部分圖表需要付費。7.10 Datawrapper
Datawrapper()是一個(gè)非常完整的制作圖表和地圖的在線(xiàn)可視化工具。而且Datawrapper被很多大牌新聞媒體所采用,所以它做出來(lái)的圖表讓你有一種似曾相識的感覺(jué)。Datawrapper也分有免費和付費的不同功能。7.11 Plotly
Plotly()為R、Python、Matlab、Node.js和Excel的用戶(hù)都提供免費或付費的服務(wù),免費版本的鏈接為:。R的用戶(hù)可以參考Carson Sievert的一本免費的電子書(shū)Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的優(yōu)點(diǎn)是易于使用,并且能夠使用很多語(yǔ)言訪(fǎng)問(wèn),這些優(yōu)點(diǎn)使得Plotly越來(lái)越受歡迎。
PART 8文本挖掘工具8.1 TidytextWIPO的專(zhuān)利分析專(zhuān)家使用來(lái)自Julia Silge和David Robinson的tidytext R包()來(lái)進(jìn)行文本挖掘。tidytext可以將文本挖掘的任務(wù)變得簡(jiǎn)單,并且還有免費的電子書(shū)可以參考。此外,我們還推薦你使用來(lái)自Tyler Rinker的textclean R包()來(lái)清理數據。8.2 Weka
Weka()是一個(gè)基于Java的文本挖掘軟件。8.3 NLTK
NLTK()是Python中最好的包了,它幾乎能夠實(shí)現所有主流需求。其配套的書(shū)籍NaturalLanguage Processing with Python也值得參考。

此外,Python文本挖掘包()比NLTK包更簡(jiǎn)單,但可能適合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一個(gè)通用目的的機器學(xué)習庫,其提供了關(guān)于處理文本和數據集的詳細說(shuō)明文檔()。8.5 spaCy
spaCy是一個(gè)用于處理自然語(yǔ)言的免費機器學(xué)習包。spaCy最近越來(lái)越受歡迎,因為它專(zhuān)注于創(chuàng )建可以投入生產(chǎn)的機器學(xué)習模型,而不僅僅是學(xué)術(shù)探索。在推進(jìn)自然語(yǔ)言處理并使得每個(gè)人都可以使用方面,spaCy作出了非常重要的貢獻。我們推薦由spaCy的創(chuàng )始人和開(kāi)發(fā)者之一的Ines Montani所寫(xiě)的免費教程(),來(lái)幫助學(xué)習如何使用spaCy。如果是使用R的用戶(hù),那么可以使用由倫敦經(jīng)濟學(xué)院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo開(kāi)發(fā)的spacyr包,這是一個(gè)非常好的選擇,并且在使用時(shí)也有據可查。8.6 機器學(xué)習的注解工具(Annotation Tools forMachine Learning)在對文本或圖像進(jìn)行機器學(xué)習時(shí),通常需要對一些文本或圖像進(jìn)行注釋以訓練模型。在這一方面,出現了越來(lái)越多的工具,包括需要付費的explosion.ai(其開(kāi)發(fā)者為spaCy的開(kāi)發(fā)者)。下面列出了一些可供嘗試的免費工具:? Label Studio()? Inception()? Doccano()? Label Box()8.7 Google單詞樹(shù)(Google Word Trees)Word Trees可以用來(lái)對文本進(jìn)行詳細分析,例如對權利要求進(jìn)行分析做成權利要求樹(shù)。
Google Developers網(wǎng)站上的GoogleWord Trees提供了使用Javascript生成單詞樹(shù)的說(shuō)明。8.8 R語(yǔ)言文本挖掘tm包R的文本挖掘tm包提供了很多訪(fǎng)問(wèn)文本挖掘工具的途徑。使用者可以參考tm包的開(kāi)發(fā)者所寫(xiě)的說(shuō)明()。在R-bloggers()上也有很多非常實(shí)用的關(guān)于文本挖掘的教程。推薦參考由Graham Williams在2014年寫(xiě)的教程Hands-On Data Science with R Text Mining。關(guān)于近期的基于R的文本挖掘工具的概覽,可以參見(jiàn)Fridolin Wild于2021年寫(xiě)的CRAN Task View: Natural Language Processing()。需要注意的是,許多文本挖掘包通常側重于生成單詞。這種方式,對于非學(xué)術(shù)目的的文本挖掘工作,并不十分有用。比如,對于專(zhuān)利分析來(lái)說(shuō),更注重于從文本中提取出短語(yǔ),而非單詞。因此,對專(zhuān)利分析人員而言,尋找那些能夠提取短語(yǔ)并且允許對其進(jìn)行深入挖掘的工具更有意義。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的資源。但是,近來(lái)R和Python正越來(lái)越多地被一起使用,以發(fā)揮它們的不同優(yōu)勢。8.10 其他文本挖掘資源有關(guān)更多的文本挖掘工具的選擇,請參閱這篇預測分析文章Top20 free text mining software tools()。
對于其他免費文本挖掘工具,可以參考一些語(yǔ)料庫語(yǔ)言學(xué)網(wǎng)站(corpus linguistics websites)(語(yǔ)料庫語(yǔ)言學(xué),主要研究機器可讀的自然語(yǔ)言文本的采集、存儲、檢索、統計、詞性和句法標注、句法語(yǔ)義分析,以及具有上述功能的語(yǔ)料庫在語(yǔ)言定量分析、詞典編纂、作品風(fēng)格分析、自然語(yǔ)言理解和機器翻譯等領(lǐng)域中的應用),例如:Corpus software and related tools()。一些分析工具是專(zhuān)門(mén)為處理專(zhuān)利數據而開(kāi)發(fā)的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育類(lèi)型的app)的用戶(hù)可以免費使用VantagePoint的補貼版本。
還有一些定性數據分析軟件工具可以應用于專(zhuān)利分析,例如:
?MAXQDA()
?AtlasTI()
?QDAMiner()
但是,除了QDAMine Lite(僅限 Windows)之外,其他的工具提供了免費試用的機會(huì ),這些工具并不屬于我們所關(guān)注的開(kāi)源工具。
PART 9小結在這三篇文章系列中(;),我們介紹了可用于專(zhuān)利分析的一些主要的免費和開(kāi)源工具。這些工具并不是專(zhuān)門(mén)用于專(zhuān)利分析的,但是它們能夠用來(lái)分析專(zhuān)利數據。在實(shí)踐中,了解這些工具的作用,以及了解你的分析需求,是非常重要的。在專(zhuān)利分析的實(shí)踐中,將付費工具和免費工具結合起來(lái)使用也是非常重要的。例如,WIPO的專(zhuān)利分析報告《動(dòng)物遺傳資源專(zhuān)利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,對1100萬(wàn)件專(zhuān)利文獻進(jìn)行大規模文本挖掘,并結合使用PATSTAT進(jìn)行數據統計,使用Thomson Innovation和VantagePoint進(jìn)行數據驗證,使用Tableau和Gephi做數據可視化。簡(jiǎn)而言之,使用免費的開(kāi)源工具來(lái)完成一個(gè)專(zhuān)利分析項目是可能的,但是如果想要讓專(zhuān)利分析的整個(gè)流程進(jìn)行更順暢,可能需要結合開(kāi)源工具和商業(yè)工具一起使用。所以,了解這些工具并且清楚它們的強項和優(yōu)勢在哪里十分重要。PART 10選擇分析工具需要考慮的問(wèn)題清單當開(kāi)始使用一項開(kāi)源軟件時(shí),最好是要提前問(wèn)問(wèn)自己下面這些問(wèn)題,來(lái)判斷這些工具是否能夠滿(mǎn)足你的特定需求。
下面的這個(gè)清單并不是固定的,只是為了鼓勵你在使用開(kāi)源工具之前先思考并明確一下這個(gè)工具是否適用。1. 這個(gè)工具有意義嗎?也就是說(shuō),你能不能立刻清楚這個(gè)工具的用途是什么?如果答案是否定的,這個(gè)工具對于你的特定需求來(lái)說(shuō)可能過(guò)于專(zhuān)業(yè),或者是這個(gè)工具的開(kāi)發(fā)者可能沒(méi)有清楚的表明這個(gè)工具想要實(shí)現的目的,那這就要慎重選擇。2.你是否了解這個(gè)工具所涉及的編程語(yǔ)言?如果你不了解這個(gè)編程語(yǔ)言的話(huà),會(huì )不會(huì )對你使用這個(gè)工具產(chǎn)生影響?為了使用這個(gè)工具而去學(xué)習該編程語(yǔ)言是否值得?有沒(méi)有免費的或者你能負擔的相關(guān)課程?3.源代碼是開(kāi)源的還是專(zhuān)有的?開(kāi)源許可的條款和條件是什么?當使用開(kāi)源和免費軟件時(shí),清楚地了解開(kāi)源許可的精確范圍。例如,你是否需要以與原始許可完全相同的條款向他人提供對源代碼的任何修改?如果你處理了源代碼,這就會(huì )存在知識產(chǎn)權風(fēng)險。如果你沒(méi)有在源代碼層面上工作,這可能不就不涉及知識產(chǎn)權問(wèn)題。了解開(kāi)放源代碼許可對我們的工作來(lái)說(shuō)總是有意義的。4.誰(shuí)將擁有我的數據?如果我們需要上傳數據到一個(gè)基于網(wǎng)頁(yè)的服務(wù)應用上,那么數據上傳之后誰(shuí)會(huì )擁有這些數據,其他什么人會(huì )在什么條件下能夠獲得這些數據?當這些數據是商業(yè)相關(guān)的,這個(gè)問(wèn)題就顯得尤為關(guān)鍵。
5.“免費”到底意味著(zhù)什么?免費版本通常會(huì )導致高級服務(wù)(即轉變?yōu)楦顿M的服務(wù))。這一轉變是開(kāi)源商業(yè)模型的關(guān)鍵特征。在一些情況下,免費的版本可能只能處理、存儲或輸出少量的數據。在另一些情況下,有些免費工具并不會(huì )對用戶(hù)在使用上施加任何限制,但是使用這些免費工具要求用戶(hù)具備相應的知識或技能。6.有其他企業(yè)(或者專(zhuān)利局)在使用這個(gè)工具嗎?如果有的話(huà),就說(shuō)明這個(gè)工具較為可靠并且還能夠找到相應的案例。7.這個(gè)工具是否有相關(guān)的使用說(shuō)明文檔或者教程?這是反映該工具是否成熟的指標。如果有很多教程和說(shuō)明文檔,說(shuō)明在行業(yè)中有很多人在使用它。8.有多少人在使用這個(gè)工具?這些用戶(hù)是否積極創(chuàng )建論壇和博客等,以支持用戶(hù)廣泛地交流其使用經(jīng)驗?9.這個(gè)工具是只有一個(gè)功能還是集成了很多不同的功能?換言之,這個(gè)工具能夠滿(mǎn)足所有的需求,還是僅僅是我們工具箱中的一個(gè)特殊的工具。在一些情況下,一個(gè)專(zhuān)注于一種功能的工具能夠把這個(gè)功能做到極致,而那些同時(shí)集成了很多功能的工具可能每一項功能都僅僅是一般般。在本文中所列出的所有工具中,R和Python(或者它們的結合使用)能夠實(shí)現專(zhuān)利分析全流程,從數據采集到數據可視化。在實(shí)踐中,大多數專(zhuān)利分析工具箱都包含通用工具和特定工具。
10.這個(gè)工具的極限在哪里?我們需要了解一個(gè)軟件的極限在哪里,這樣以后在嘗試做一些關(guān)鍵任務(wù)時(shí)就會(huì )有所準備。例如,一些軟件聲稱(chēng)可以完成一些特定的任務(wù),比如處理上千條或者上百萬(wàn)條數據,但實(shí)際上如果真的處理了這么大量的數據,結果就會(huì )很糟糕。通過(guò)嘗試使用這個(gè)工具到其極限,可以確定這個(gè)工具極限在哪里以及如何充分利用它。11.這個(gè)工具是否符合我的需求?最近,大數據和使用Hadoop進(jìn)行分布式計算處理大量數據是領(lǐng)域熱點(diǎn)。Hadoop是開(kāi)源的,任何人都可以使用它,但是Hadoop和大部分的專(zhuān)利分析需求都不相匹配,除非是需要分析全球所有的專(zhuān)利文獻,大量的文獻資料和科學(xué)數據。舉例來(lái)說(shuō),前文中提到的WIPO的《動(dòng)物遺傳資源專(zhuān)利分析報告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel處理了1100萬(wàn)條專(zhuān)利記錄。而決定使用GNU Parallel而非Hadoop來(lái)處理這1100萬(wàn)條專(zhuān)利數據的部分原因,是因為我們認為Hadoop使用起來(lái)比較復雜,而且對于Hadoop來(lái)說(shuō),處理1100萬(wàn)條數據屬于大材小用。簡(jiǎn)而言之,仔細考慮一個(gè)工具是否與我們的目標需求相適應和相匹配是十分重要的。12.最后,用一個(gè)簡(jiǎn)單的原則來(lái)總結如何衡量一個(gè)工具是否可用于專(zhuān)利分析,即這個(gè)工具對我有沒(méi)有用?
完整收集信息以擴展實(shí)戰攻擊面
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-07-24 01:01
原文:0x00 前言
距離上次分享文章已經(jīng)過(guò)去了5個(gè)月,寫(xiě)這篇文章之前。我已經(jīng)做了較多的滲透項目,也打了一些地級和省級市的紅隊項目。在此期間,讓我感覺(jué)非常受用的技巧無(wú)非是對于信息的收集,不管是在前期打點(diǎn),亦或是拿到shell后的橫向,對于目標信息的掌握程度,很大層面決定了能打到多深,能打到多寬。由于自己技術(shù)受限,仍然停留在安服水平,因此文章主要以簡(jiǎn)單技巧分享為主。主要是分享自己在早期以及近期遇到的兩個(gè)例子,也是較為簡(jiǎn)單的實(shí)戰技術(shù)理論,并不是較為復雜的研究性分享,分別以外部和內部為例。
并且本文主要是說(shuō)收集信息,而不是信息收集,希望加以區分。
0x01 外部_收集信息
這個(gè)例子是我以前眾測的時(shí)候找到的一系列漏洞,主要成果就是通過(guò)日志泄露到Getshell。
該站點(diǎn)是Thinkphp的,但是做了Nginx反代,通過(guò)wappalyzer可以收集到站點(diǎn)指紋,通過(guò)路徑報錯,也可以判斷出是TP站點(diǎn),一般此時(shí)要么是3.x要么是5.x
最后通過(guò)漏洞掃描工具ThinkphpGUI-1.2-SNAPSHOT發(fā)現存在Tp3.x日志泄露的問(wèn)題
通過(guò)TPlogScan獲取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
獲取了若干日志后,就到了收集信息的重點(diǎn),這里主要分享的實(shí)戰理論就是
在收集信息中,一定要將所獲得的信息和關(guān)鍵字關(guān)聯(lián),進(jìn)行靈活篩選
所獲得的信息,在這里就是指,我們獲取的TP日志,回想一般日志會(huì )記錄的東西,比如Sql語(yǔ)句,比如攻擊流量,比如程序運行日志。
關(guān)鍵字,在這里就是指,我們經(jīng)常關(guān)心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
關(guān)聯(lián):將這些得到的信息和關(guān)鍵字關(guān)聯(lián),比如Sql語(yǔ)句中會(huì )出現對用戶(hù)名稱(chēng)和密碼的對比是否正確,會(huì )出現數據的添加刪除等。
靈活篩選:根據現有信息,去優(yōu)先選擇我們需要獲得的信息
如只有一個(gè)后臺登錄頁(yè)面,當前最好的篩選是通過(guò)用戶(hù)名密碼的字段在大量的日志中去篩選password,username,passwd,user等關(guān)鍵字,嘗試獲取某個(gè)用戶(hù)的賬號密碼,進(jìn)入后臺,去擴展自己的攻擊面;
又或是此時(shí)已獲得后臺用戶(hù)權限,想找到一個(gè)Sql注入打到shell或內網(wǎng),此時(shí)應該以Insert,Delete,Update,Select,Where,Order By等關(guān)鍵字為主,去篩選查找;
或通過(guò)漏洞拿到了shell分但是數據庫用戶(hù)密碼是加密的,此時(shí)還想繼續獲取數據分,呢么還是類(lèi)似1的方式,篩選password,username,Admin,Administrator,root,system等高權限用戶(hù)關(guān)鍵字,嘗試獲取在寫(xiě)入數據庫前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情況,靈活關(guān)聯(lián)
我當時(shí)正處于第一種情況只有一個(gè)登錄頁(yè)面,此時(shí)立馬去篩選關(guān)鍵字,在龐大的日志中,篩選出來(lái)了一條關(guān)于管理員用戶(hù)admin的查詢(xún)語(yǔ)句
獲取到了hash值,然后很幸運的是,cmd5有相關(guān)緩存,直接解了出來(lái)
進(jìn)入后臺后,在上傳處有對后綴的限制,有對內容的限制
此處我通過(guò)換行繞過(guò)后綴限制,臟數據繞過(guò)了對內容的限制,成功上傳了php的shell
其實(shí)這些后續的bypass上傳花費了我更長(cháng)的事件,上述上傳還需要一次特別的更名操作,才能被解析,但這里不是寫(xiě)Getshell的,而不是分享收集信息的實(shí)戰理論,因此不多講。這里主要就是跟大家啰嗦了下,在拿到僅限的大量無(wú)用信息中,一定要把此時(shí)自己獲得的信息和關(guān)鍵字做匹配,做關(guān)聯(lián),減少在廢物信息中的搜尋時(shí)間,最效率化利用當前的信息,去擴展自己的滲透攻擊面
0x02 內部_收集信息
前期Shiro打點(diǎn)(我也很好奇,2022年了,還有shiro),特別小的內網(wǎng),沒(méi)任何東西打,只能拿數據分了。
嘗試翻找各種數據庫配置文件,可以根據數據庫后綴文件名進(jìn)行檢索,比如yml,ini,conf,config等
這個(gè)數據庫里面數據很少,基本湊不夠。
于是找到一個(gè)源碼備份文件,雖然不懂Java,但是只要能收集信息的地方,我們一個(gè)都不能漏。在源碼文件中,我們可以收集到的信息,往往有很多硬編碼的信息,注釋中的測試賬號密碼,泄露的token,api,accesskey等。
即使你不會(huì )java,你也可以解壓縮jar包,然后丟到IDEA中可查看源代碼?;蛘呤褂肑d-Gui直接打開(kāi)jar包也可以查看源代碼
發(fā)現jar包中打包進(jìn)來(lái)了數據庫配置文件,里面有一個(gè)內網(wǎng)的aliyun mysql數據庫。沒(méi)有太多的用戶(hù)數據,但是發(fā)現了一些app_id,app_secret字段
拿著(zhù)通過(guò)這些關(guān)鍵字,我在源代碼中檢索,發(fā)現跟微信相關(guān)
通過(guò)查詢(xún)資料發(fā)現,app_id和app_secret是關(guān)于企業(yè)微信的,兩個(gè)參數認證后可以獲取Token,通過(guò)Token可以調用企業(yè)微信的各種API,比如將自己添加到企業(yè)微信用戶(hù)中,獲取企業(yè)微信部門(mén)人員列表等,具體利用可參考下面的文章
這里我通過(guò)id和sercert認證獲取Token中,由于不在白名單中,被拒絕了。
此時(shí)我仍沒(méi)有放棄,在數據庫中繼續檢索關(guān)鍵詞Token(sql語(yǔ)句檢索列名或內容可參考百度學(xué)習),發(fā)現了token_cache的字段,翻譯過(guò)來(lái)就是token緩存
此時(shí)通過(guò)/cgi-bin/groups/get api驗證Token是可用狀態(tài),后續的信息利用就不放出了,無(wú)非是獲取了部門(mén)所有人員詳細信息,以及提個(gè)嚴重漏洞罷了
搞完數據庫,我接著(zhù)看源碼,此時(shí)我沒(méi)有立刻搜索文件內容,而是搜索整個(gè)jar包中的文件名,關(guān)鍵字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通過(guò)關(guān)鍵字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通過(guò)文件名我找到了一個(gè)帶有OSS名字的class
通過(guò)該Class我又找到了一些存儲配置的Class
找到了兩個(gè)阿里云 accesskey,一個(gè)七牛云的acesskey
通過(guò)阿里云accesskey拿到一個(gè)OSS BUCKET 以及150多臺的云主機
0x03 總結
通過(guò)上述內網(wǎng)的兩個(gè)例子,主要就是想將現有信息和關(guān)鍵字關(guān)聯(lián),靈活篩選。
簡(jiǎn)單的說(shuō),就是要根據當前獲得信息的固有屬性來(lái)與關(guān)鍵字做適配,什么環(huán)境該擁有什么屬性,什么屬性該適配哪種檢索關(guān)鍵字以及檢索方式。盡可能的做一個(gè)關(guān)聯(lián)性假想。
本篇文章實(shí)質(zhì)是實(shí)戰技術(shù)案例分享,但是想透過(guò)兩個(gè)特別簡(jiǎn)單的例子,來(lái)描述下自己心中對于收集信息,擴展攻擊面的認知?;臼亲晕掖植诘淖疽?jiàn),如果能給各位師傅帶來(lái)一點(diǎn)技巧的擴充幫助,也足夠我歡喜了。
喜歡就點(diǎn)在看哦~
長(cháng)按識別二維碼
歡迎投稿
EMAIL:
博客: 查看全部
完整收集信息以擴展實(shí)戰攻擊面
原文:0x00 前言
距離上次分享文章已經(jīng)過(guò)去了5個(gè)月,寫(xiě)這篇文章之前。我已經(jīng)做了較多的滲透項目,也打了一些地級和省級市的紅隊項目。在此期間,讓我感覺(jué)非常受用的技巧無(wú)非是對于信息的收集,不管是在前期打點(diǎn),亦或是拿到shell后的橫向,對于目標信息的掌握程度,很大層面決定了能打到多深,能打到多寬。由于自己技術(shù)受限,仍然停留在安服水平,因此文章主要以簡(jiǎn)單技巧分享為主。主要是分享自己在早期以及近期遇到的兩個(gè)例子,也是較為簡(jiǎn)單的實(shí)戰技術(shù)理論,并不是較為復雜的研究性分享,分別以外部和內部為例。
并且本文主要是說(shuō)收集信息,而不是信息收集,希望加以區分。
0x01 外部_收集信息
這個(gè)例子是我以前眾測的時(shí)候找到的一系列漏洞,主要成果就是通過(guò)日志泄露到Getshell。
該站點(diǎn)是Thinkphp的,但是做了Nginx反代,通過(guò)wappalyzer可以收集到站點(diǎn)指紋,通過(guò)路徑報錯,也可以判斷出是TP站點(diǎn),一般此時(shí)要么是3.x要么是5.x
最后通過(guò)漏洞掃描工具ThinkphpGUI-1.2-SNAPSHOT發(fā)現存在Tp3.x日志泄露的問(wèn)題
通過(guò)TPlogScan獲取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
獲取了若干日志后,就到了收集信息的重點(diǎn),這里主要分享的實(shí)戰理論就是
在收集信息中,一定要將所獲得的信息和關(guān)鍵字關(guān)聯(lián),進(jìn)行靈活篩選
所獲得的信息,在這里就是指,我們獲取的TP日志,回想一般日志會(huì )記錄的東西,比如Sql語(yǔ)句,比如攻擊流量,比如程序運行日志。
關(guān)鍵字,在這里就是指,我們經(jīng)常關(guān)心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
關(guān)聯(lián):將這些得到的信息和關(guān)鍵字關(guān)聯(lián),比如Sql語(yǔ)句中會(huì )出現對用戶(hù)名稱(chēng)和密碼的對比是否正確,會(huì )出現數據的添加刪除等。
靈活篩選:根據現有信息,去優(yōu)先選擇我們需要獲得的信息
如只有一個(gè)后臺登錄頁(yè)面,當前最好的篩選是通過(guò)用戶(hù)名密碼的字段在大量的日志中去篩選password,username,passwd,user等關(guān)鍵字,嘗試獲取某個(gè)用戶(hù)的賬號密碼,進(jìn)入后臺,去擴展自己的攻擊面;
又或是此時(shí)已獲得后臺用戶(hù)權限,想找到一個(gè)Sql注入打到shell或內網(wǎng),此時(shí)應該以Insert,Delete,Update,Select,Where,Order By等關(guān)鍵字為主,去篩選查找;
或通過(guò)漏洞拿到了shell分但是數據庫用戶(hù)密碼是加密的,此時(shí)還想繼續獲取數據分,呢么還是類(lèi)似1的方式,篩選password,username,Admin,Administrator,root,system等高權限用戶(hù)關(guān)鍵字,嘗試獲取在寫(xiě)入數據庫前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情況,靈活關(guān)聯(lián)
我當時(shí)正處于第一種情況只有一個(gè)登錄頁(yè)面,此時(shí)立馬去篩選關(guān)鍵字,在龐大的日志中,篩選出來(lái)了一條關(guān)于管理員用戶(hù)admin的查詢(xún)語(yǔ)句
獲取到了hash值,然后很幸運的是,cmd5有相關(guān)緩存,直接解了出來(lái)

進(jìn)入后臺后,在上傳處有對后綴的限制,有對內容的限制
此處我通過(guò)換行繞過(guò)后綴限制,臟數據繞過(guò)了對內容的限制,成功上傳了php的shell
其實(shí)這些后續的bypass上傳花費了我更長(cháng)的事件,上述上傳還需要一次特別的更名操作,才能被解析,但這里不是寫(xiě)Getshell的,而不是分享收集信息的實(shí)戰理論,因此不多講。這里主要就是跟大家啰嗦了下,在拿到僅限的大量無(wú)用信息中,一定要把此時(shí)自己獲得的信息和關(guān)鍵字做匹配,做關(guān)聯(lián),減少在廢物信息中的搜尋時(shí)間,最效率化利用當前的信息,去擴展自己的滲透攻擊面
0x02 內部_收集信息
前期Shiro打點(diǎn)(我也很好奇,2022年了,還有shiro),特別小的內網(wǎng),沒(méi)任何東西打,只能拿數據分了。
嘗試翻找各種數據庫配置文件,可以根據數據庫后綴文件名進(jìn)行檢索,比如yml,ini,conf,config等
這個(gè)數據庫里面數據很少,基本湊不夠。
于是找到一個(gè)源碼備份文件,雖然不懂Java,但是只要能收集信息的地方,我們一個(gè)都不能漏。在源碼文件中,我們可以收集到的信息,往往有很多硬編碼的信息,注釋中的測試賬號密碼,泄露的token,api,accesskey等。
即使你不會(huì )java,你也可以解壓縮jar包,然后丟到IDEA中可查看源代碼?;蛘呤褂肑d-Gui直接打開(kāi)jar包也可以查看源代碼
發(fā)現jar包中打包進(jìn)來(lái)了數據庫配置文件,里面有一個(gè)內網(wǎng)的aliyun mysql數據庫。沒(méi)有太多的用戶(hù)數據,但是發(fā)現了一些app_id,app_secret字段
拿著(zhù)通過(guò)這些關(guān)鍵字,我在源代碼中檢索,發(fā)現跟微信相關(guān)
通過(guò)查詢(xún)資料發(fā)現,app_id和app_secret是關(guān)于企業(yè)微信的,兩個(gè)參數認證后可以獲取Token,通過(guò)Token可以調用企業(yè)微信的各種API,比如將自己添加到企業(yè)微信用戶(hù)中,獲取企業(yè)微信部門(mén)人員列表等,具體利用可參考下面的文章
這里我通過(guò)id和sercert認證獲取Token中,由于不在白名單中,被拒絕了。
此時(shí)我仍沒(méi)有放棄,在數據庫中繼續檢索關(guān)鍵詞Token(sql語(yǔ)句檢索列名或內容可參考百度學(xué)習),發(fā)現了token_cache的字段,翻譯過(guò)來(lái)就是token緩存
此時(shí)通過(guò)/cgi-bin/groups/get api驗證Token是可用狀態(tài),后續的信息利用就不放出了,無(wú)非是獲取了部門(mén)所有人員詳細信息,以及提個(gè)嚴重漏洞罷了

搞完數據庫,我接著(zhù)看源碼,此時(shí)我沒(méi)有立刻搜索文件內容,而是搜索整個(gè)jar包中的文件名,關(guān)鍵字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通過(guò)關(guān)鍵字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通過(guò)文件名我找到了一個(gè)帶有OSS名字的class
通過(guò)該Class我又找到了一些存儲配置的Class
找到了兩個(gè)阿里云 accesskey,一個(gè)七牛云的acesskey
通過(guò)阿里云accesskey拿到一個(gè)OSS BUCKET 以及150多臺的云主機
0x03 總結
通過(guò)上述內網(wǎng)的兩個(gè)例子,主要就是想將現有信息和關(guān)鍵字關(guān)聯(lián),靈活篩選。
簡(jiǎn)單的說(shuō),就是要根據當前獲得信息的固有屬性來(lái)與關(guān)鍵字做適配,什么環(huán)境該擁有什么屬性,什么屬性該適配哪種檢索關(guān)鍵字以及檢索方式。盡可能的做一個(gè)關(guān)聯(lián)性假想。
本篇文章實(shí)質(zhì)是實(shí)戰技術(shù)案例分享,但是想透過(guò)兩個(gè)特別簡(jiǎn)單的例子,來(lái)描述下自己心中對于收集信息,擴展攻擊面的認知?;臼亲晕掖植诘淖疽?jiàn),如果能給各位師傅帶來(lái)一點(diǎn)技巧的擴充幫助,也足夠我歡喜了。
喜歡就點(diǎn)在看哦~
長(cháng)按識別二維碼
歡迎投稿
EMAIL:
博客:
行業(yè)解決方案:WebRTC錄采集平面數據
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-10-20 18:39
1. 網(wǎng)絡(luò )交易采集
WebRTC中有一個(gè)可用于獲取桌面的API:獲取顯示媒體
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
約束是可選的 約束約束與 getUser 媒體函數中的約束一致。
2. 采集平面數據
采集平面數據:此功能在 Chrome 中是實(shí)驗性的。
在實(shí)際戰斗之前,我們需要打開(kāi)瀏覽器并進(jìn)行設置 chrome://flags/#enable-experimental-web-platform-features
如下圖所示:
接下來(lái),讓我們看一下具體的js代碼,如下所示:
C++音頻和視頻開(kāi)發(fā)
學(xué)習地址:免費]FFMPEG/WebRTC/RTMP/NDK/安卓音視頻流高級開(kāi)發(fā)
【文章福利】:免費C++音視頻學(xué)習包、技術(shù)視頻、內容包括(音視頻開(kāi)發(fā)、大廠(chǎng)面試問(wèn)題、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免費分享,如有必要,可以添加君陽(yáng)接收! ~學(xué)習交流俊陽(yáng)994289133點(diǎn)擊加入即可接收信息包
'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');
// 定義二進(jìn)制數組
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 獲取視頻幀圖片相關(guān)的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是設備信息的數組
function gotDevices(deviceInfos){
// 遍歷設備信息數組, 函數里面也有個(gè)參數是每一項的deviceinfo, 這樣我們就拿到每個(gè)設備的信息了
deviceInfos.forEach(function(deviceinfo){
// 創(chuàng )建每一項
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方面里面我們要傳人一個(gè)參數,也就是流,
// 這個(gè)流里面實(shí)際上包含了音頻軌和視頻軌,因為我們通過(guò)constraints設置了要采集視頻和音頻
// 我們直接吧這個(gè)流賦值給HTML中賦值的video標簽
// 當時(shí)拿到這個(gè)流了,說(shuō)明用戶(hù)已經(jīng)同意去訪(fǎng)問(wèn)音視頻設備了
function gotMediaStream(stream){
<p>
// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定數據源來(lái)自stream,這樣視頻標簽采集到這個(gè)數據之后就可以將視頻和音頻播放出來(lái)
// 通過(guò)stream來(lái)獲取到視頻的track 這樣我們就將所有的視頻流中的track都獲取到了,這里我們只取列表中的第一個(gè)
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我們就能調用Track的方法
var videoConstraints = videoTrack.getSettings(); // 這樣就可以拿到所有video的約束
// 將這個(gè)對象轉化成json格式
// 第一個(gè)是videoConstraints, 第二個(gè)為空, 第三個(gè)表示縮進(jìn)2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 當我們采集到音視頻的數據之后,我們返回一個(gè)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;
// 這里是約束參數,正常情況下我們只需要是否使用視頻是否使用音頻
// 對于視頻就可以按我們剛才所說(shuō)的做一些限制
/**
* video : {
width: 640, // 寬帶
height: 480, // 高度
frameRate:15, // 幀率
facingMode: 'enviroment', // 設置為后置攝像頭
deviceId : deviceId ? deviceId : undefined // 如果deviceId不為空直接設置值,如果為空就是undefined
},
*/
var constraints = { // 表示同時(shí)采集視頻金和音頻
video : true,
audio : false
}
// 調用錄屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 這樣就可以抓起桌面的數據了
.then(gotMediaStream) // 使用Promise串聯(lián)的方式,獲取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 當我選擇攝像頭的時(shí)候,他可以觸發(fā)一個(gè)事件,
// 當我調用start之后我要改變constraints
videoSource.onchange = start;
// 選擇特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 點(diǎn)擊按鈕獲取視頻幀圖片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 調用canvas API獲取上下文,圖片是二維的,所以2d,這樣我們就拿到它的上下文了
// 調用drawImage繪制圖片,第一個(gè)參數就是視頻,我們這里是videoplay,
// 第二和第三個(gè)參數是起始點(diǎn) 0,0
// 第四個(gè)和第五個(gè)參數表示圖片的高度和寬度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//
function handleDataAvailable(e){ // 5、獲取數據的事件函數 當我們點(diǎn)擊錄制之后,數據就會(huì )源源不斷的從這個(gè)事件函數中獲取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 將e.data放入二進(jìn)制數組里面
// 這個(gè)buffer應該是我們在開(kāi)始錄制的時(shí)候創(chuàng )建這個(gè)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,以便于后面停止錄制的時(shí)候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 調用錄制API // window.stream在gotMediaStream中獲取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、調用事件 這個(gè)事件處理函數里面就會(huì )收到我們錄制的那塊數據 當我們收集到這個(gè)數據之后我們應該把它存儲起來(lái)
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面傳入一個(gè)時(shí)間片,每隔一個(gè) 時(shí)間片存儲 一塊數據
}
// 3、停止錄制
function stopRecord(){
// 6、調用停止錄制
mediaRecorder.stop();
}
// 1、錄制視頻
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 開(kāi)始錄制
startRecord(); // 調用startRecord方法開(kāi)啟錄制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按鈕狀態(tài)禁止
btnDownload.disabled = true; // 下載按鈕狀態(tài)禁止
}else{ // 結束錄制
stopRecord(); // 停止錄制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止錄制之后可以播放
btnDownload.disabled = false; // 停止錄制可以下載
}
}
// 點(diǎn)擊播放視頻
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>
原創(chuàng )鏈接:WebRTC錄制采集平面數據 - 信息中心 - 音視頻發(fā)展中國網(wǎng) - 打造中國最權威的音視頻技術(shù)交流分享論壇
解決方案:百度seo快速排名工具!
軟件介紹
百度seo快速排名工具,用來(lái)提高百度權重,百度排名的小工具。
使用場(chǎng)景
如果您以前沒(méi)有看過(guò)它,您可以先回顧一下。
就是說(shuō)做網(wǎng)站一般來(lái)說(shuō),如果你想做一個(gè)高權重的網(wǎng)站,要花很長(cháng)時(shí)間,甚至很多年,如果你想花時(shí)間做一個(gè)高權重網(wǎng)站,可以刷品牌字。
比如第一次做煎蛋的時(shí)候,雖然權重是0,但是必須在上排名第一。
只是炒蛋網(wǎng)這個(gè)詞沒(méi)有索引,所以權重也是0。我們想一想:只要我們把炒蛋網(wǎng)這個(gè)詞刷出索引,然后把這個(gè)詞提交到站長(cháng)家,那么我們可以在短時(shí)間內獲得高權重。
另外,一個(gè)帶有“網(wǎng)上賺錢(qián)”等索引的詞,搜索這個(gè)詞,你的網(wǎng)站可能在第10頁(yè),普通人找不到你的網(wǎng)站。
但是如果你用軟件,搜索這個(gè)詞,然后進(jìn)入你的網(wǎng)站,搜索引擎也會(huì )認為你的網(wǎng)站滿(mǎn)足了用戶(hù)的需求,也會(huì )提升你的排名。
指示
打開(kāi)軟件設置“ip代理api地址”、搜索詞、URL。
添加會(huì )有點(diǎn)慢。
也可以直接在文件夾中設置:
需要注意的是ip代理api地址需要購買(mǎi)和付費,有幾個(gè)免費的已經(jīng)測試過(guò),不能使用。
另外,搜狗搜索也不行。
如果要刷多個(gè)字,可以多打開(kāi)軟件,放在多個(gè)文件夾中,全部打開(kāi)!
下載鏈接 查看全部
行業(yè)解決方案:WebRTC錄采集平面數據
1. 網(wǎng)絡(luò )交易采集
WebRTC中有一個(gè)可用于獲取桌面的API:獲取顯示媒體
var promise = navigator.mediaDevices.getDisplayMedia(constraints);
約束是可選的 約束約束與 getUser 媒體函數中的約束一致。
2. 采集平面數據
采集平面數據:此功能在 Chrome 中是實(shí)驗性的。
在實(shí)際戰斗之前,我們需要打開(kāi)瀏覽器并進(jìn)行設置 chrome://flags/#enable-experimental-web-platform-features
如下圖所示:
接下來(lái),讓我們看一下具體的js代碼,如下所示:
C++音頻和視頻開(kāi)發(fā)
學(xué)習地址:免費]FFMPEG/WebRTC/RTMP/NDK/安卓音視頻流高級開(kāi)發(fā)
【文章福利】:免費C++音視頻學(xué)習包、技術(shù)視頻、內容包括(音視頻開(kāi)發(fā)、大廠(chǎng)面試問(wèn)題、FFmpeg、webRTC、rtmp、hls、rtsp、ffplay、srs),免費分享,如有必要,可以添加君陽(yáng)接收! ~學(xué)習交流俊陽(yáng)994289133點(diǎn)擊加入即可接收信息包
'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');
// 定義二進(jìn)制數組
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 獲取視頻幀圖片相關(guān)的元素
var snapshot = document.querySelector('button#snapshot');
var picture = document.querySelector('canvas#picture');
picture.width = 640;
picture.height = 480;
// deviceInfos是設備信息的數組
function gotDevices(deviceInfos){
// 遍歷設備信息數組, 函數里面也有個(gè)參數是每一項的deviceinfo, 這樣我們就拿到每個(gè)設備的信息了
deviceInfos.forEach(function(deviceinfo){
// 創(chuàng )建每一項
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方面里面我們要傳人一個(gè)參數,也就是流,
// 這個(gè)流里面實(shí)際上包含了音頻軌和視頻軌,因為我們通過(guò)constraints設置了要采集視頻和音頻
// 我們直接吧這個(gè)流賦值給HTML中賦值的video標簽
// 當時(shí)拿到這個(gè)流了,說(shuō)明用戶(hù)已經(jīng)同意去訪(fǎng)問(wèn)音視頻設備了
function gotMediaStream(stream){
<p>

// audioplay.srcObject = stream;
videoplay.srcObject = stream; // 指定數據源來(lái)自stream,這樣視頻標簽采集到這個(gè)數據之后就可以將視頻和音頻播放出來(lái)
// 通過(guò)stream來(lái)獲取到視頻的track 這樣我們就將所有的視頻流中的track都獲取到了,這里我們只取列表中的第一個(gè)
var videoTrack = stream.getVideoTracks()[0];
// 拿到track之后我們就能調用Track的方法
var videoConstraints = videoTrack.getSettings(); // 這樣就可以拿到所有video的約束
// 將這個(gè)對象轉化成json格式
// 第一個(gè)是videoConstraints, 第二個(gè)為空, 第三個(gè)表示縮進(jìn)2格
divConstraints.textContent = JSON.stringify(videoConstraints, null, 2);
window.stream = stream;
// 當我們采集到音視頻的數據之后,我們返回一個(gè)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;
// 這里是約束參數,正常情況下我們只需要是否使用視頻是否使用音頻
// 對于視頻就可以按我們剛才所說(shuō)的做一些限制
/**
* video : {
width: 640, // 寬帶
height: 480, // 高度
frameRate:15, // 幀率
facingMode: 'enviroment', // 設置為后置攝像頭
deviceId : deviceId ? deviceId : undefined // 如果deviceId不為空直接設置值,如果為空就是undefined
},
*/
var constraints = { // 表示同時(shí)采集視頻金和音頻
video : true,
audio : false
}
// 調用錄屏API
navigator.mediaDevices.getDisplayMedia(constraints) // 這樣就可以抓起桌面的數據了
.then(gotMediaStream) // 使用Promise串聯(lián)的方式,獲取流成功了
.then(gotDevices)
.catch(handleError);
}
}
start();
// 當我選擇攝像頭的時(shí)候,他可以觸發(fā)一個(gè)事件,
// 當我調用start之后我要改變constraints
videoSource.onchange = start;
// 選擇特效的方法
filtersSelect.onchange = function(){
videoplay.className = filtersSelect.value;
}
// 點(diǎn)擊按鈕獲取視頻幀圖片
snapshot.onclick = function() {
picture.className = filtersSelect.value;
// 調用canvas API獲取上下文,圖片是二維的,所以2d,這樣我們就拿到它的上下文了
// 調用drawImage繪制圖片,第一個(gè)參數就是視頻,我們這里是videoplay,
// 第二和第三個(gè)參數是起始點(diǎn) 0,0
// 第四個(gè)和第五個(gè)參數表示圖片的高度和寬度
picture.getContext('2d').drawImage(videoplay, 0, 0, picture.width, picture.height);
}
//

function handleDataAvailable(e){ // 5、獲取數據的事件函數 當我們點(diǎn)擊錄制之后,數據就會(huì )源源不斷的從這個(gè)事件函數中獲取到
if(e && e.data && e.data.size > 0){
buffer.push(e.data); // 將e.data放入二進(jìn)制數組里面
// 這個(gè)buffer應該是我們在開(kāi)始錄制的時(shí)候創(chuàng )建這個(gè)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,以便于后面停止錄制的時(shí)候可以用到
mediaRecorder = new MediaRecorder(window.stream, options); // 調用錄制API // window.stream在gotMediaStream中獲取
}catch(e){
console.error('Failed to create MediaRecorder:', e);
return;
}
// 4、調用事件 這個(gè)事件處理函數里面就會(huì )收到我們錄制的那塊數據 當我們收集到這個(gè)數據之后我們應該把它存儲起來(lái)
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // start方法里面傳入一個(gè)時(shí)間片,每隔一個(gè) 時(shí)間片存儲 一塊數據
}
// 3、停止錄制
function stopRecord(){
// 6、調用停止錄制
mediaRecorder.stop();
}
// 1、錄制視頻
btnRecord.onclick = ()=>{
if(btnRecord.textContent === 'Start Record'){ // 開(kāi)始錄制
startRecord(); // 調用startRecord方法開(kāi)啟錄制
btnRecord.textContent = 'Stop Record'; // 修改button的文案
btnPlay.disabled = true; // 播放按鈕狀態(tài)禁止
btnDownload.disabled = true; // 下載按鈕狀態(tài)禁止
}else{ // 結束錄制
stopRecord(); // 停止錄制
btnRecord.textContent = 'Start Record';
btnPlay.disabled = false; // 停止錄制之后可以播放
btnDownload.disabled = false; // 停止錄制可以下載
}
}
// 點(diǎn)擊播放視頻
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>
原創(chuàng )鏈接:WebRTC錄制采集平面數據 - 信息中心 - 音視頻發(fā)展中國網(wǎng) - 打造中國最權威的音視頻技術(shù)交流分享論壇
解決方案:百度seo快速排名工具!
軟件介紹
百度seo快速排名工具,用來(lái)提高百度權重,百度排名的小工具。
使用場(chǎng)景
如果您以前沒(méi)有看過(guò)它,您可以先回顧一下。
就是說(shuō)做網(wǎng)站一般來(lái)說(shuō),如果你想做一個(gè)高權重的網(wǎng)站,要花很長(cháng)時(shí)間,甚至很多年,如果你想花時(shí)間做一個(gè)高權重網(wǎng)站,可以刷品牌字。

比如第一次做煎蛋的時(shí)候,雖然權重是0,但是必須在上排名第一。
只是炒蛋網(wǎng)這個(gè)詞沒(méi)有索引,所以權重也是0。我們想一想:只要我們把炒蛋網(wǎng)這個(gè)詞刷出索引,然后把這個(gè)詞提交到站長(cháng)家,那么我們可以在短時(shí)間內獲得高權重。
另外,一個(gè)帶有“網(wǎng)上賺錢(qián)”等索引的詞,搜索這個(gè)詞,你的網(wǎng)站可能在第10頁(yè),普通人找不到你的網(wǎng)站。
但是如果你用軟件,搜索這個(gè)詞,然后進(jìn)入你的網(wǎng)站,搜索引擎也會(huì )認為你的網(wǎng)站滿(mǎn)足了用戶(hù)的需求,也會(huì )提升你的排名。
指示
打開(kāi)軟件設置“ip代理api地址”、搜索詞、URL。

添加會(huì )有點(diǎn)慢。
也可以直接在文件夾中設置:
需要注意的是ip代理api地址需要購買(mǎi)和付費,有幾個(gè)免費的已經(jīng)測試過(guò),不能使用。
另外,搜狗搜索也不行。
如果要刷多個(gè)字,可以多打開(kāi)軟件,放在多個(gè)文件夾中,全部打開(kāi)!
下載鏈接
通用解決方案:程序員必備網(wǎng)站之一:API Coding
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-10-18 15:17
大家好,我叫G。
前不久,我們推送了一篇文章文章《這個(gè)神器可以幫助你快速找到你想要的API接口!》,分享給大家網(wǎng)站:來(lái)自印度、丹麥的開(kāi)發(fā)者制作的Public APIs,其主要功能是幫助開(kāi)發(fā)者找到一些免費實(shí)用的API接口。
在文章的最后,順便提到了作者的其他幾個(gè)項目,并承諾以后會(huì )介紹給大家。今天,小G就是來(lái)兌現這個(gè)承諾的。
下面我們要介紹的網(wǎng)站就是API Coding。
它的主要功能是采集和匯總眾多API相關(guān)的開(kāi)放接口、學(xué)習資源、工具教程等,幫助開(kāi)發(fā)者降低信息檢索成本和學(xué)習成本。
地址:apicoding.io
從它的主頁(yè)介紹來(lái)看,它的主要內容主要分為以下幾類(lèi)。
API 合集:自由開(kāi)放的接口
它采集了互聯(lián)網(wǎng)上大量免費開(kāi)放的API接口,包括視頻會(huì )議、股票分析、貨幣轉換、PDF轉換、IP查詢(xún)、圖像壓縮、短鏈生成等眾多不同功能的API接口。
地址:apicoding.io/public-apis
學(xué)習:解釋API開(kāi)發(fā)的文章
共收錄6個(gè)文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 開(kāi)發(fā)工具
共采集了22個(gè)有用的API工具,包括但不限于云存儲、云托管、JSON在線(xiàn)編輯/解析/生成、API接口調試、假數據生成、數據爬取等功能。
地址:apicoding.io/tools
資源:API 教程和項目在線(xiàn)開(kāi)放
主要采集網(wǎng)上眾多作者發(fā)現的優(yōu)質(zhì)API教程,包括API的最佳開(kāi)發(fā)實(shí)踐、微軟API設計指南、REST API的快速創(chuàng )建、真實(shí)環(huán)境在線(xiàn)部署等。
地址:apicoding.io/resources
總體來(lái)說(shuō),網(wǎng)站提供的界面列表、學(xué)習資源、開(kāi)發(fā)工具都挺實(shí)用的。
如果你目前的API接口設計和開(kāi)發(fā)能力比較薄弱,建議你看看這個(gè)網(wǎng)站,相信你能在上面找到很多好東西。
--
文末安利還有一波我們的公眾號:GitHubDaily。目前每天至少更新3篇文章,主要分享比較實(shí)用或者有趣的開(kāi)發(fā)工具和開(kāi)源項目,偶爾聊聊技術(shù)圈的最新。有什么新鮮事,感興趣的朋友可以關(guān)注一下。
高效的方法:如何利用SEO站長(cháng)工具優(yōu)化工作
網(wǎng)站 的提升都被優(yōu)化器使用。沒(méi)有搜索引擎優(yōu)化,推廣是不可能的。百度站長(cháng)之物的推出,得到了草根站長(cháng)們的大力支持。雖然這些東西不能滿(mǎn)足很多地方站長(cháng)的需求,但是很多內容都很好的支持了站長(cháng)。如何更好地利用百度站長(cháng)?有必要了解一下百度站長(cháng)的一些成就。
1.如何發(fā)送外部鏈接應該從外部鏈接分析中獲得。這些都是自然技巧,其他的網(wǎng)站在講解的時(shí)候也需要說(shuō)明。你會(huì )發(fā)現百度文章采集里面的文字很好,百度筆墨采集前面的鏈接也很不錯。這很好。錨文本上下文鏈接是網(wǎng)站外鏈發(fā)布的重要推廣上下文,也是站長(cháng)們關(guān)注和值得做的事情。
2. 競爭對手數據也可以通過(guò)外鏈進(jìn)行解釋。通過(guò)外鏈搞定站長(cháng),可以輕松搞定一系列外鏈競爭對手。我們能知道有多少外展是有效的,外展的傳遞平臺在哪里?俗話(huà)說(shuō):“知己知彼,百戰百勝”。解釋競爭對手的 網(wǎng)站 是我創(chuàng )建 網(wǎng)站 的常見(jiàn)情況。實(shí)時(shí)獲取競爭對手的外鏈資源,挖掘新資源是重中之重。站長(cháng)只有大量的熟人對競爭對手的所有信息進(jìn)行粗略的解釋和超越。競爭對手的外部鏈接也是站長(cháng)學(xué)習的。
3. 豐富使用網(wǎng)頁(yè)優(yōu)化啟動(dòng)“可以提高網(wǎng)站的訪(fǎng)問(wèn)率,站長(cháng)可以利用一系列條件來(lái)提高網(wǎng)站的運行率,這些成就每個(gè)都要學(xué)習豐富網(wǎng)站。這樣一個(gè)敷衍的商業(yè)網(wǎng)站的結果是非常實(shí)用的。網(wǎng)頁(yè)優(yōu)化的結果是當我創(chuàng )建一個(gè)網(wǎng)站并更新它時(shí),我可以實(shí)時(shí)照顧百度。如何優(yōu)化我的網(wǎng)站網(wǎng)站? 同時(shí),網(wǎng)站 上有一些headers 需要改進(jìn)。
這可以讓你在輸入關(guān)鍵詞后查看這些詞中哪些相關(guān)詞被用戶(hù)搜索過(guò),從而可以大致提高網(wǎng)站對關(guān)鍵詞的收益。
站長(cháng)使用東西在很大程度上簡(jiǎn)化了站長(cháng)在使用過(guò)程中,服從性也提高了,站長(cháng)的優(yōu)化能力也提高了。這些都是百度站長(cháng)用的東西。雖然現在百度的東西還不是很全面,但相信在不久的將來(lái),站長(cháng)的東西會(huì )全面轉型,內容會(huì )越來(lái)越滿(mǎn)意。 查看全部
通用解決方案:程序員必備網(wǎng)站之一:API Coding
大家好,我叫G。
前不久,我們推送了一篇文章文章《這個(gè)神器可以幫助你快速找到你想要的API接口!》,分享給大家網(wǎng)站:來(lái)自印度、丹麥的開(kāi)發(fā)者制作的Public APIs,其主要功能是幫助開(kāi)發(fā)者找到一些免費實(shí)用的API接口。
在文章的最后,順便提到了作者的其他幾個(gè)項目,并承諾以后會(huì )介紹給大家。今天,小G就是來(lái)兌現這個(gè)承諾的。
下面我們要介紹的網(wǎng)站就是API Coding。
它的主要功能是采集和匯總眾多API相關(guān)的開(kāi)放接口、學(xué)習資源、工具教程等,幫助開(kāi)發(fā)者降低信息檢索成本和學(xué)習成本。
地址:apicoding.io
從它的主頁(yè)介紹來(lái)看,它的主要內容主要分為以下幾類(lèi)。
API 合集:自由開(kāi)放的接口

它采集了互聯(lián)網(wǎng)上大量免費開(kāi)放的API接口,包括視頻會(huì )議、股票分析、貨幣轉換、PDF轉換、IP查詢(xún)、圖像壓縮、短鏈生成等眾多不同功能的API接口。
地址:apicoding.io/public-apis
學(xué)習:解釋API開(kāi)發(fā)的文章
共收錄6個(gè)文章教程,主要教你如何使用Node.js或Python快速部署API接口。
地址:apicoding.io/learn
工具:聚合 API 開(kāi)發(fā)工具
共采集了22個(gè)有用的API工具,包括但不限于云存儲、云托管、JSON在線(xiàn)編輯/解析/生成、API接口調試、假數據生成、數據爬取等功能。
地址:apicoding.io/tools

資源:API 教程和項目在線(xiàn)開(kāi)放
主要采集網(wǎng)上眾多作者發(fā)現的優(yōu)質(zhì)API教程,包括API的最佳開(kāi)發(fā)實(shí)踐、微軟API設計指南、REST API的快速創(chuàng )建、真實(shí)環(huán)境在線(xiàn)部署等。
地址:apicoding.io/resources
總體來(lái)說(shuō),網(wǎng)站提供的界面列表、學(xué)習資源、開(kāi)發(fā)工具都挺實(shí)用的。
如果你目前的API接口設計和開(kāi)發(fā)能力比較薄弱,建議你看看這個(gè)網(wǎng)站,相信你能在上面找到很多好東西。
--
文末安利還有一波我們的公眾號:GitHubDaily。目前每天至少更新3篇文章,主要分享比較實(shí)用或者有趣的開(kāi)發(fā)工具和開(kāi)源項目,偶爾聊聊技術(shù)圈的最新。有什么新鮮事,感興趣的朋友可以關(guān)注一下。
高效的方法:如何利用SEO站長(cháng)工具優(yōu)化工作
網(wǎng)站 的提升都被優(yōu)化器使用。沒(méi)有搜索引擎優(yōu)化,推廣是不可能的。百度站長(cháng)之物的推出,得到了草根站長(cháng)們的大力支持。雖然這些東西不能滿(mǎn)足很多地方站長(cháng)的需求,但是很多內容都很好的支持了站長(cháng)。如何更好地利用百度站長(cháng)?有必要了解一下百度站長(cháng)的一些成就。

1.如何發(fā)送外部鏈接應該從外部鏈接分析中獲得。這些都是自然技巧,其他的網(wǎng)站在講解的時(shí)候也需要說(shuō)明。你會(huì )發(fā)現百度文章采集里面的文字很好,百度筆墨采集前面的鏈接也很不錯。這很好。錨文本上下文鏈接是網(wǎng)站外鏈發(fā)布的重要推廣上下文,也是站長(cháng)們關(guān)注和值得做的事情。
2. 競爭對手數據也可以通過(guò)外鏈進(jìn)行解釋。通過(guò)外鏈搞定站長(cháng),可以輕松搞定一系列外鏈競爭對手。我們能知道有多少外展是有效的,外展的傳遞平臺在哪里?俗話(huà)說(shuō):“知己知彼,百戰百勝”。解釋競爭對手的 網(wǎng)站 是我創(chuàng )建 網(wǎng)站 的常見(jiàn)情況。實(shí)時(shí)獲取競爭對手的外鏈資源,挖掘新資源是重中之重。站長(cháng)只有大量的熟人對競爭對手的所有信息進(jìn)行粗略的解釋和超越。競爭對手的外部鏈接也是站長(cháng)學(xué)習的。
3. 豐富使用網(wǎng)頁(yè)優(yōu)化啟動(dòng)“可以提高網(wǎng)站的訪(fǎng)問(wèn)率,站長(cháng)可以利用一系列條件來(lái)提高網(wǎng)站的運行率,這些成就每個(gè)都要學(xué)習豐富網(wǎng)站。這樣一個(gè)敷衍的商業(yè)網(wǎng)站的結果是非常實(shí)用的。網(wǎng)頁(yè)優(yōu)化的結果是當我創(chuàng )建一個(gè)網(wǎng)站并更新它時(shí),我可以實(shí)時(shí)照顧百度。如何優(yōu)化我的網(wǎng)站網(wǎng)站? 同時(shí),網(wǎng)站 上有一些headers 需要改進(jìn)。

這可以讓你在輸入關(guān)鍵詞后查看這些詞中哪些相關(guān)詞被用戶(hù)搜索過(guò),從而可以大致提高網(wǎng)站對關(guān)鍵詞的收益。
站長(cháng)使用東西在很大程度上簡(jiǎn)化了站長(cháng)在使用過(guò)程中,服從性也提高了,站長(cháng)的優(yōu)化能力也提高了。這些都是百度站長(cháng)用的東西。雖然現在百度的東西還不是很全面,但相信在不久的將來(lái),站長(cháng)的東西會(huì )全面轉型,內容會(huì )越來(lái)越滿(mǎn)意。
完整解決方案:JavaScript架構前端監控搭建過(guò)程步驟
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 72 次瀏覽 ? 2022-10-18 05:15
目錄
前言
上一篇介紹了為什么前端會(huì )有監控系統?前端監控系統有什么意義?有朋友看完后留言,想聽(tīng)聽(tīng)一些詳細的實(shí)現。那么在本文中,我們將開(kāi)始介紹前端監控是如何實(shí)現的。
如果還是不明白為什么,監控有什么用,推薦閱讀上一篇文章文章:前端為什么不能沒(méi)有監控系統?
在實(shí)施之前,首先要在腦海中有一個(gè)整體的背景,了解構建前端監控的具體流程步驟。因為前端監控系統其實(shí)是一個(gè)完整的全棧項目,不僅僅是前端,甚至主要的實(shí)現都圍繞著(zhù)數據。
當然,還有一點(diǎn)需要說(shuō)明。本文的實(shí)現主要針對普通業(yè)務(wù)和中小廠(chǎng)自研方向。我看過(guò)大廠(chǎng)做的監控系統。它非常復雜和強大,動(dòng)輒數以?xún)|計的數據。最終走向了大數據的方向。我只介紹如何實(shí)現main函數,如何解決問(wèn)題。
前端監控的構建過(guò)程分為以下幾個(gè)階段:
下面我來(lái)梳理一下各個(gè)階段的關(guān)鍵實(shí)現思路。
采集階段:采集什么數據?
監控的第一步是采集數據。有數據是監控的前提。
采集數據的含義是記錄用戶(hù)在使用產(chǎn)品過(guò)程中的真實(shí)操作。結合我們上一篇的分析,實(shí)際操作產(chǎn)生的數據可以分為兩類(lèi):異常數據和行為數據。
我們先分析異常數據。項目中的異常一般可以分為兩類(lèi),一類(lèi)是前端異常,一類(lèi)是接口異常。
前端異常
前端異常大致可以分為:
最重要的,也是我們遇到最多的,就是各種js代碼執行異常。比如類(lèi)型錯誤、引用錯誤等。這些異常大部分是由于我們的編碼不精確造成的,所以采集這些異常有助于我們提高編碼質(zhì)量。
然后是 Promise 異常。Promise 是 ES6 最重要的屬性之一??简炍覀兊膉s異步編程能力,主要體現在接口請求上。因此,這兩部分的異常捕獲非常關(guān)鍵。
另外,靜態(tài)資源加載異常一般是指引用了一些html中的圖片地址、第三方j(luò )s地址等,由于各種原因不能正常加載,這個(gè)也要監控。
console.error 異常一般用在第三方前端框架中。它自定義了一些錯誤,會(huì )被console.error拋出。此類(lèi)異常也需要被捕獲。
至于跨域異常,我們經(jīng)常會(huì )遇到這種情況,通??梢栽谇昂蠖碎_(kāi)發(fā)聯(lián)調階段發(fā)現。但不確定是后端的配置突然在線(xiàn)更改,導致前端跨域。為了安全起見(jiàn),您還應該對其進(jìn)行監控。
前端異常采集大概只有這5種,基本覆蓋了前端90%以上的異常。
接口異常
接口異常屬于后端異常,但是接口異常會(huì )直接導致前端頁(yè)面錯誤。因此,此類(lèi)異常是我們判斷線(xiàn)上問(wèn)題根源的重要依據。接口異??梢愿鶕憫Y果分類(lèi):
有時(shí)由于網(wǎng)絡(luò )問(wèn)題或服務(wù)器問(wèn)題,前端發(fā)起請求后沒(méi)有收到響應,請求被掛起。這次是無(wú)響應/超時(shí)響應異常。對于此類(lèi)異常,我們可以設置最大請求時(shí)間,超時(shí)后主動(dòng)斷開(kāi)請求,添加接口超時(shí)記錄。
另外,其他類(lèi)型的接口異??梢愿鶕﨟TTP狀態(tài)碼或者后端返回的error_code等指定字段來(lái)判斷。
不管是使用狀態(tài)碼還是其他判斷方式,只要能區分異常類(lèi)型,這個(gè)不是嚴格要求的。
4xx異常類(lèi)型是請求異常,一般是前端傳遞的參數有問(wèn)題,或者接口驗證參數有問(wèn)題。處理此類(lèi)異常的關(guān)鍵是保存請求參數,這樣可以方便前端排查。
5xx 錯誤是服務(wù)器內部處理的異常。此類(lèi)異常的關(guān)鍵信息是報錯時(shí)間和返回的異常描述。保存這些可以方便后端查找日志。
我認為權限不足也是一種重要的錯誤類(lèi)型。因為有些管理系統的權限設計比較復雜,有時(shí)候界面突然莫名其妙無(wú)法調整,影響用戶(hù)接下來(lái)的操作,也需要記錄和跟蹤。
行為數據
行為數據比較廣泛,用戶(hù)任何有意義的操作都可以定義為行為數據。
例如,當一個(gè)按鈕被點(diǎn)擊時(shí),它在那里停留了多長(cháng)時(shí)間,新功能的點(diǎn)擊率,何時(shí)使用等等。自主研發(fā)的監控系統的優(yōu)勢之一是靈活性。您需要的任何有用信息都可以在此階段進(jìn)行設計。
這個(gè)階段非常關(guān)鍵,是監控系統設計的核心,所以我寫(xiě)的很詳細,這個(gè)階段大家要多考慮采集哪些數據。后面的階段都是基于這個(gè)設計的具體實(shí)現。
API階段:構建上報數據的API接口
在上一階段,采集數據計劃已經(jīng)準備好了。當 采集 數據到達時(shí),接下來(lái)會(huì )上報數據。
說(shuō)白了,數據上報就是通過(guò)調用API接口將數據傳輸出來(lái),然后存入數據庫。因此,這個(gè)階段的任務(wù)是構建一個(gè)用于報告數據的API接口應用程序。
作為一名光榮的前端工程師,在開(kāi)發(fā)接口時(shí)自然會(huì )選擇屬于 JS 家族的 Node.js。Node.js 目前有很多框架。我比較喜歡輕量簡(jiǎn)潔,什么都需要自己安裝,所以選擇了簡(jiǎn)潔經(jīng)典的Express框架。
構建 API 應用程序要做的事情是:
還有一些細節需要處理。這個(gè)階段對于后端基礎薄弱的同學(xué)來(lái)說(shuō)是一個(gè)很好的學(xué)習機會(huì )。
強烈建議前端的朋友掌握一些后端的基礎知識,至少從簡(jiǎn)單的原理上了解是怎么回事。這個(gè)階段主要是了解API應用是如何搭建的,每個(gè)部分為什么要做,可以解決哪些問(wèn)題,這樣你對后端的基礎知識就會(huì )建立起來(lái)。
框架搭建好后,主要是設計接口URL,然后編寫(xiě)處理邏輯,保證這一步設計的接口可以調整,可以接收數據。
數據存儲階段:與數據庫接口對接
上一步我們構建了API接口,接收到采集的數據。然后,在這一步中,我們需要連接數據庫,并將 采集 中的數據存儲到數據庫中。
數據庫方面,選擇對前端最友好的,屬于NoSQL家族的文檔數據庫MongoDB。
這個(gè)數據庫最大的特點(diǎn)就是存儲的數據格式類(lèi)似于JSON,操作就像在JS中調用函數,結合JOSN數據。我們很容易理解并開(kāi)始使用前端??梢栽趯?shí)戰過(guò)程中體驗。優(yōu)雅也。
數據存儲階段主要介紹數據庫的基本信息和操作,包括以下幾個(gè)方面:
這個(gè)階段的關(guān)鍵是數據驗證。在設計完數據庫字段后,我們希望所有寫(xiě)入的數據都必須符合我們想要的數據格式。如果驗證后不符合,我們可以補充或修改數據字段,或者干脆拒絕寫(xiě)入,這樣可以保證數據的可靠性,避免不必要的數據清洗。
數據寫(xiě)入完成后,需要添加一些簡(jiǎn)單的查詢(xún)和修改功能。因為要在寫(xiě)完數據后查看執行是否成功,可以查看一個(gè)列表來(lái)查看結果。
還需要修改功能。前端監控中一個(gè)很常見(jiàn)的需求就是計算用戶(hù)的頁(yè)面停留時(shí)間。我的計劃是在用戶(hù)進(jìn)入某個(gè)頁(yè)面時(shí)創(chuàng )建一條記錄,然后在用戶(hù)離開(kāi)時(shí)修改該記錄并添加一個(gè)結束時(shí)間字段,這需要修改功能。
最后但并非最不重要的一點(diǎn)是,許多人都在談?wù)撊绾吻謇頂祿?。?shí)際上,這取決于您在將數據存儲在您面前時(shí)如何驗證。如果確實(shí)可以存儲無(wú)效數據,可以寫(xiě)一個(gè)清空數據的接口,自己寫(xiě)清空邏輯,定時(shí)執行。
查詢(xún)統計階段:數據查詢(xún)和統計分析
經(jīng)過(guò)一系列的準備,我們已經(jīng)完成了API接口和數據寫(xiě)入的功能。假設我們有 采集 足夠的數據并存儲在數據庫中,這個(gè)階段就是充分利用這些數據的時(shí)候了。
這個(gè)階段的主要任務(wù)是對數據進(jìn)行檢索和統計分析,基本上是“查詢(xún)”操作。
這里的查詢(xún)不僅僅是為了檢查,如何檢查,關(guān)系到我們采集到的數據能否得到有效利用。我的想法是從這兩個(gè)方面入手:
當然,這只是籠統的說(shuō)法。行為數據也將在一行中查詢(xún)。例如,如果我想查看用戶(hù)在某個(gè)時(shí)間做了什么,這就是精確搜索。還有異常數據的統計,比如異常接口的觸發(fā)頻率排名。
行為數據量會(huì )非常大,在用戶(hù)使用系統的過(guò)程中會(huì )頻繁生成并寫(xiě)入數據庫。因此,在這類(lèi)數據的大部分情況下,都是通過(guò)聚合查詢(xún)的方式,從頁(yè)數、時(shí)間等多個(gè)維度進(jìn)行整體統計,最后得出一些百分比的結論。這些統計值可以大致反映產(chǎn)品的實(shí)際使用情況。
這里有個(gè)優(yōu)化點(diǎn),因為頻繁的請求會(huì )增加接口的負擔,所以一部分數據也可以在本地存儲,達到一定數量后,一次性請求并存儲接口。
異常數據對于開(kāi)發(fā)者來(lái)說(shuō)非常重要,對于我們定位和解決bug來(lái)說(shuō)是天賜之物。與行為數據的多重統計不同,我們更關(guān)心異常數據的每一條記錄的詳細信息,讓錯誤一目了然。
查詢(xún)異常數據也比較簡(jiǎn)單。和普通的列表查詢(xún)一樣,只需要返回最新的異常數據即可。當然,我們排查問(wèn)題后,也要把處理的異常標記為已處理,這樣可以防止重復排查。
可以看出,這個(gè)階段最重要的是做一個(gè)統計界面,為下一階段圖表展示的可視化做準備。
可視化階段:最終數據圖表展示
在最后階段,我們開(kāi)發(fā)了一個(gè)統計界面并找到了想要的數據結果。不幸的是,這些結果只有程序員才能理解,其他人可能無(wú)法理解。所以最后,為了更直觀(guān)的反映數據,我們需要使用前端的可視化圖表,讓這些數據活起來(lái)。
在這個(gè)階段,我們終于回到了最熟悉的前端領(lǐng)域。這個(gè)階段的任務(wù)比較簡(jiǎn)單,比較順利?;赗eact構建一個(gè)新的前端應用,訪(fǎng)問(wèn)上一步的統計界面,然后集成前端圖表庫,以圖表的形式展示統計結果。
這個(gè)新應用是一個(gè)前端監控系統,真正需要展示給外界。供團隊內部的開(kāi)發(fā)人員或產(chǎn)品學(xué)生使用,方便他們實(shí)時(shí)查看產(chǎn)品產(chǎn)生的數據信息,解決自己的問(wèn)題。
事實(shí)上,現階段沒(méi)有關(guān)鍵問(wèn)題可談。主要是選擇一個(gè)好用的圖表庫并連接接口。還有各種類(lèi)型的圖表。需要考慮哪些數據適合哪些圖表,根據實(shí)際情況做出判斷。
最后,監控系統的前端頁(yè)面和界面數據不是人人都能看到的,所以要有基本的登錄頁(yè)面和功能。做到這一點(diǎn),這個(gè)階段的任務(wù)就結束了。
報警階段:發(fā)現異常立即報警通知
前一階段,監控系統前端搭建完成,統計數據以圖表形式展示后,整個(gè)監控系統基本可用。
但是還有另一種情況,就是用戶(hù)在使用我們的產(chǎn)品時(shí)突然報錯,錯誤信息也被寫(xiě)入了數據庫。如果此時(shí)你不主動(dòng)刷新頁(yè)面,實(shí)際上你也不能一直刷新頁(yè)面,那么我們根本不知道這個(gè)錯誤。
如果這是一個(gè)非常致命的bug,影響范圍很廣,我們甚至不知道這個(gè)bug是什么時(shí)候發(fā)生的,那會(huì )給我們帶來(lái)很大的損失。
所以,為了保證我們能及時(shí)解決bug,告警通知的功能就顯得非常重要了。它的作用是在出現異常的第一時(shí)間推送給開(kāi)發(fā)者,讓大家第一時(shí)間發(fā)現問(wèn)題,然后以最快的速度解決,避免遺漏。
報警通知,現在一般的解決方案是連接釘釘或者企業(yè)微信的機器人,我們這里使用釘釘。使用哪個(gè)平臺取決于您的主題所在的平臺。比如我的團隊主體在釘釘上,所以在發(fā)送報警通知時(shí),可以直接用手機號@任意一個(gè)團隊成員,實(shí)現更精準的提醒。
本部分是對 API 應用的補充。申請釘釘開(kāi)發(fā)者權限后,訪(fǎng)問(wèn)API中的相關(guān)代碼。
部署階段:萬(wàn)事俱備,只等上線(xiàn)
前期我們完成了數據采集、API應用構建、數據存儲、前端可視化展示、監控告警。整個(gè)前端監控系統功能齊全。最后一步是將所有的前端和后端數據庫都在線(xiàn)部署,供大家訪(fǎng)問(wèn)。
部署主要是nginx解析、https配置、數據庫安裝、nodejs的應用部署等,這個(gè)階段的內容會(huì )多一點(diǎn)運維。不過(guò)不用擔心,這里我也會(huì )詳細介紹關(guān)鍵操作。
系統上線(xiàn)后,你可以嘗試在你的任意一個(gè)前端項目中通過(guò)API保存數據采集,按照第一篇中的采集方法,然后登錄監控系統查看真實(shí)使用數據。
當這部分完成后,恭喜,一個(gè)小型的前端監控系統搭建完成。未來(lái)我們可以在此基礎上繼續擴展功能,慢慢讓這個(gè)自研的監控系統變得更強大。
總結
本文介紹了前端監控系統的搭建流程,將整個(gè)流程分為幾個(gè)階段,簡(jiǎn)要介紹了每個(gè)階段要做什么,有哪些關(guān)鍵問(wèn)題,幫助大家理清搭建監控系統的思路,以及更多關(guān)于前端監控和構建JavaScript架構的信息,請關(guān)注腳本之家文章的其他相關(guān)話(huà)題!
最佳實(shí)踐:DEDE采集規則過(guò)濾與替換
刪除最常用的超鏈接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像這樣填寫(xiě)它,那么鏈接的文本也會(huì )被刪除{dede:trim替換=''}]*)>(.*){/dede:trim}
2、過(guò)濾JS調用廣告,比如GG廣告,添加這樣的東西:{dede:trim=''}{/dede:trim}
3. 過(guò)濾 div 標簽。這是非常重要的,如果不過(guò)濾,它可能會(huì )錯放已發(fā)布的文章布局,并且當前大多數采集在遇到它之后都放錯了位置。{dede:trim replace=''}
{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有時(shí)有必要像這樣過(guò)濾:{dede:修剪替換=''}
?。?*)
{/dede:trim}
4.其他過(guò)濾規則可以根據上述規則引入。
5.過(guò)濾經(jīng)常使用的片段和關(guān)鍵字使用情況。{dede:trim replace=''}{/dede:trim}
6.更換簡(jiǎn)單。
{dede:trim replace ='被替換的單詞'} 要替換的單詞 {/dede:trim}
當然,采集的內容也需要搜索引擎收錄,過(guò)濾和替換的目的是為了減少重復、偽原創(chuàng ),如何具體操作,這取決于個(gè)人的要求和喜好。
有關(guān)更多信息,請參閱 IT 技術(shù)專(zhuān)欄 查看全部
完整解決方案:JavaScript架構前端監控搭建過(guò)程步驟
目錄
前言
上一篇介紹了為什么前端會(huì )有監控系統?前端監控系統有什么意義?有朋友看完后留言,想聽(tīng)聽(tīng)一些詳細的實(shí)現。那么在本文中,我們將開(kāi)始介紹前端監控是如何實(shí)現的。
如果還是不明白為什么,監控有什么用,推薦閱讀上一篇文章文章:前端為什么不能沒(méi)有監控系統?
在實(shí)施之前,首先要在腦海中有一個(gè)整體的背景,了解構建前端監控的具體流程步驟。因為前端監控系統其實(shí)是一個(gè)完整的全棧項目,不僅僅是前端,甚至主要的實(shí)現都圍繞著(zhù)數據。
當然,還有一點(diǎn)需要說(shuō)明。本文的實(shí)現主要針對普通業(yè)務(wù)和中小廠(chǎng)自研方向。我看過(guò)大廠(chǎng)做的監控系統。它非常復雜和強大,動(dòng)輒數以?xún)|計的數據。最終走向了大數據的方向。我只介紹如何實(shí)現main函數,如何解決問(wèn)題。
前端監控的構建過(guò)程分為以下幾個(gè)階段:
下面我來(lái)梳理一下各個(gè)階段的關(guān)鍵實(shí)現思路。
采集階段:采集什么數據?
監控的第一步是采集數據。有數據是監控的前提。
采集數據的含義是記錄用戶(hù)在使用產(chǎn)品過(guò)程中的真實(shí)操作。結合我們上一篇的分析,實(shí)際操作產(chǎn)生的數據可以分為兩類(lèi):異常數據和行為數據。
我們先分析異常數據。項目中的異常一般可以分為兩類(lèi),一類(lèi)是前端異常,一類(lèi)是接口異常。
前端異常
前端異常大致可以分為:
最重要的,也是我們遇到最多的,就是各種js代碼執行異常。比如類(lèi)型錯誤、引用錯誤等。這些異常大部分是由于我們的編碼不精確造成的,所以采集這些異常有助于我們提高編碼質(zhì)量。
然后是 Promise 異常。Promise 是 ES6 最重要的屬性之一??简炍覀兊膉s異步編程能力,主要體現在接口請求上。因此,這兩部分的異常捕獲非常關(guān)鍵。
另外,靜態(tài)資源加載異常一般是指引用了一些html中的圖片地址、第三方j(luò )s地址等,由于各種原因不能正常加載,這個(gè)也要監控。
console.error 異常一般用在第三方前端框架中。它自定義了一些錯誤,會(huì )被console.error拋出。此類(lèi)異常也需要被捕獲。
至于跨域異常,我們經(jīng)常會(huì )遇到這種情況,通??梢栽谇昂蠖碎_(kāi)發(fā)聯(lián)調階段發(fā)現。但不確定是后端的配置突然在線(xiàn)更改,導致前端跨域。為了安全起見(jiàn),您還應該對其進(jìn)行監控。
前端異常采集大概只有這5種,基本覆蓋了前端90%以上的異常。
接口異常
接口異常屬于后端異常,但是接口異常會(huì )直接導致前端頁(yè)面錯誤。因此,此類(lèi)異常是我們判斷線(xiàn)上問(wèn)題根源的重要依據。接口異??梢愿鶕憫Y果分類(lèi):
有時(shí)由于網(wǎng)絡(luò )問(wèn)題或服務(wù)器問(wèn)題,前端發(fā)起請求后沒(méi)有收到響應,請求被掛起。這次是無(wú)響應/超時(shí)響應異常。對于此類(lèi)異常,我們可以設置最大請求時(shí)間,超時(shí)后主動(dòng)斷開(kāi)請求,添加接口超時(shí)記錄。
另外,其他類(lèi)型的接口異??梢愿鶕﨟TTP狀態(tài)碼或者后端返回的error_code等指定字段來(lái)判斷。
不管是使用狀態(tài)碼還是其他判斷方式,只要能區分異常類(lèi)型,這個(gè)不是嚴格要求的。
4xx異常類(lèi)型是請求異常,一般是前端傳遞的參數有問(wèn)題,或者接口驗證參數有問(wèn)題。處理此類(lèi)異常的關(guān)鍵是保存請求參數,這樣可以方便前端排查。

5xx 錯誤是服務(wù)器內部處理的異常。此類(lèi)異常的關(guān)鍵信息是報錯時(shí)間和返回的異常描述。保存這些可以方便后端查找日志。
我認為權限不足也是一種重要的錯誤類(lèi)型。因為有些管理系統的權限設計比較復雜,有時(shí)候界面突然莫名其妙無(wú)法調整,影響用戶(hù)接下來(lái)的操作,也需要記錄和跟蹤。
行為數據
行為數據比較廣泛,用戶(hù)任何有意義的操作都可以定義為行為數據。
例如,當一個(gè)按鈕被點(diǎn)擊時(shí),它在那里停留了多長(cháng)時(shí)間,新功能的點(diǎn)擊率,何時(shí)使用等等。自主研發(fā)的監控系統的優(yōu)勢之一是靈活性。您需要的任何有用信息都可以在此階段進(jìn)行設計。
這個(gè)階段非常關(guān)鍵,是監控系統設計的核心,所以我寫(xiě)的很詳細,這個(gè)階段大家要多考慮采集哪些數據。后面的階段都是基于這個(gè)設計的具體實(shí)現。
API階段:構建上報數據的API接口
在上一階段,采集數據計劃已經(jīng)準備好了。當 采集 數據到達時(shí),接下來(lái)會(huì )上報數據。
說(shuō)白了,數據上報就是通過(guò)調用API接口將數據傳輸出來(lái),然后存入數據庫。因此,這個(gè)階段的任務(wù)是構建一個(gè)用于報告數據的API接口應用程序。
作為一名光榮的前端工程師,在開(kāi)發(fā)接口時(shí)自然會(huì )選擇屬于 JS 家族的 Node.js。Node.js 目前有很多框架。我比較喜歡輕量簡(jiǎn)潔,什么都需要自己安裝,所以選擇了簡(jiǎn)潔經(jīng)典的Express框架。
構建 API 應用程序要做的事情是:
還有一些細節需要處理。這個(gè)階段對于后端基礎薄弱的同學(xué)來(lái)說(shuō)是一個(gè)很好的學(xué)習機會(huì )。
強烈建議前端的朋友掌握一些后端的基礎知識,至少從簡(jiǎn)單的原理上了解是怎么回事。這個(gè)階段主要是了解API應用是如何搭建的,每個(gè)部分為什么要做,可以解決哪些問(wèn)題,這樣你對后端的基礎知識就會(huì )建立起來(lái)。
框架搭建好后,主要是設計接口URL,然后編寫(xiě)處理邏輯,保證這一步設計的接口可以調整,可以接收數據。
數據存儲階段:與數據庫接口對接
上一步我們構建了API接口,接收到采集的數據。然后,在這一步中,我們需要連接數據庫,并將 采集 中的數據存儲到數據庫中。
數據庫方面,選擇對前端最友好的,屬于NoSQL家族的文檔數據庫MongoDB。
這個(gè)數據庫最大的特點(diǎn)就是存儲的數據格式類(lèi)似于JSON,操作就像在JS中調用函數,結合JOSN數據。我們很容易理解并開(kāi)始使用前端??梢栽趯?shí)戰過(guò)程中體驗。優(yōu)雅也。
數據存儲階段主要介紹數據庫的基本信息和操作,包括以下幾個(gè)方面:
這個(gè)階段的關(guān)鍵是數據驗證。在設計完數據庫字段后,我們希望所有寫(xiě)入的數據都必須符合我們想要的數據格式。如果驗證后不符合,我們可以補充或修改數據字段,或者干脆拒絕寫(xiě)入,這樣可以保證數據的可靠性,避免不必要的數據清洗。
數據寫(xiě)入完成后,需要添加一些簡(jiǎn)單的查詢(xún)和修改功能。因為要在寫(xiě)完數據后查看執行是否成功,可以查看一個(gè)列表來(lái)查看結果。
還需要修改功能。前端監控中一個(gè)很常見(jiàn)的需求就是計算用戶(hù)的頁(yè)面停留時(shí)間。我的計劃是在用戶(hù)進(jìn)入某個(gè)頁(yè)面時(shí)創(chuàng )建一條記錄,然后在用戶(hù)離開(kāi)時(shí)修改該記錄并添加一個(gè)結束時(shí)間字段,這需要修改功能。
最后但并非最不重要的一點(diǎn)是,許多人都在談?wù)撊绾吻謇頂祿?。?shí)際上,這取決于您在將數據存儲在您面前時(shí)如何驗證。如果確實(shí)可以存儲無(wú)效數據,可以寫(xiě)一個(gè)清空數據的接口,自己寫(xiě)清空邏輯,定時(shí)執行。
查詢(xún)統計階段:數據查詢(xún)和統計分析
經(jīng)過(guò)一系列的準備,我們已經(jīng)完成了API接口和數據寫(xiě)入的功能。假設我們有 采集 足夠的數據并存儲在數據庫中,這個(gè)階段就是充分利用這些數據的時(shí)候了。
這個(gè)階段的主要任務(wù)是對數據進(jìn)行檢索和統計分析,基本上是“查詢(xún)”操作。
這里的查詢(xún)不僅僅是為了檢查,如何檢查,關(guān)系到我們采集到的數據能否得到有效利用。我的想法是從這兩個(gè)方面入手:

當然,這只是籠統的說(shuō)法。行為數據也將在一行中查詢(xún)。例如,如果我想查看用戶(hù)在某個(gè)時(shí)間做了什么,這就是精確搜索。還有異常數據的統計,比如異常接口的觸發(fā)頻率排名。
行為數據量會(huì )非常大,在用戶(hù)使用系統的過(guò)程中會(huì )頻繁生成并寫(xiě)入數據庫。因此,在這類(lèi)數據的大部分情況下,都是通過(guò)聚合查詢(xún)的方式,從頁(yè)數、時(shí)間等多個(gè)維度進(jìn)行整體統計,最后得出一些百分比的結論。這些統計值可以大致反映產(chǎn)品的實(shí)際使用情況。
這里有個(gè)優(yōu)化點(diǎn),因為頻繁的請求會(huì )增加接口的負擔,所以一部分數據也可以在本地存儲,達到一定數量后,一次性請求并存儲接口。
異常數據對于開(kāi)發(fā)者來(lái)說(shuō)非常重要,對于我們定位和解決bug來(lái)說(shuō)是天賜之物。與行為數據的多重統計不同,我們更關(guān)心異常數據的每一條記錄的詳細信息,讓錯誤一目了然。
查詢(xún)異常數據也比較簡(jiǎn)單。和普通的列表查詢(xún)一樣,只需要返回最新的異常數據即可。當然,我們排查問(wèn)題后,也要把處理的異常標記為已處理,這樣可以防止重復排查。
可以看出,這個(gè)階段最重要的是做一個(gè)統計界面,為下一階段圖表展示的可視化做準備。
可視化階段:最終數據圖表展示
在最后階段,我們開(kāi)發(fā)了一個(gè)統計界面并找到了想要的數據結果。不幸的是,這些結果只有程序員才能理解,其他人可能無(wú)法理解。所以最后,為了更直觀(guān)的反映數據,我們需要使用前端的可視化圖表,讓這些數據活起來(lái)。
在這個(gè)階段,我們終于回到了最熟悉的前端領(lǐng)域。這個(gè)階段的任務(wù)比較簡(jiǎn)單,比較順利?;赗eact構建一個(gè)新的前端應用,訪(fǎng)問(wèn)上一步的統計界面,然后集成前端圖表庫,以圖表的形式展示統計結果。
這個(gè)新應用是一個(gè)前端監控系統,真正需要展示給外界。供團隊內部的開(kāi)發(fā)人員或產(chǎn)品學(xué)生使用,方便他們實(shí)時(shí)查看產(chǎn)品產(chǎn)生的數據信息,解決自己的問(wèn)題。
事實(shí)上,現階段沒(méi)有關(guān)鍵問(wèn)題可談。主要是選擇一個(gè)好用的圖表庫并連接接口。還有各種類(lèi)型的圖表。需要考慮哪些數據適合哪些圖表,根據實(shí)際情況做出判斷。
最后,監控系統的前端頁(yè)面和界面數據不是人人都能看到的,所以要有基本的登錄頁(yè)面和功能。做到這一點(diǎn),這個(gè)階段的任務(wù)就結束了。
報警階段:發(fā)現異常立即報警通知
前一階段,監控系統前端搭建完成,統計數據以圖表形式展示后,整個(gè)監控系統基本可用。
但是還有另一種情況,就是用戶(hù)在使用我們的產(chǎn)品時(shí)突然報錯,錯誤信息也被寫(xiě)入了數據庫。如果此時(shí)你不主動(dòng)刷新頁(yè)面,實(shí)際上你也不能一直刷新頁(yè)面,那么我們根本不知道這個(gè)錯誤。
如果這是一個(gè)非常致命的bug,影響范圍很廣,我們甚至不知道這個(gè)bug是什么時(shí)候發(fā)生的,那會(huì )給我們帶來(lái)很大的損失。
所以,為了保證我們能及時(shí)解決bug,告警通知的功能就顯得非常重要了。它的作用是在出現異常的第一時(shí)間推送給開(kāi)發(fā)者,讓大家第一時(shí)間發(fā)現問(wèn)題,然后以最快的速度解決,避免遺漏。
報警通知,現在一般的解決方案是連接釘釘或者企業(yè)微信的機器人,我們這里使用釘釘。使用哪個(gè)平臺取決于您的主題所在的平臺。比如我的團隊主體在釘釘上,所以在發(fā)送報警通知時(shí),可以直接用手機號@任意一個(gè)團隊成員,實(shí)現更精準的提醒。
本部分是對 API 應用的補充。申請釘釘開(kāi)發(fā)者權限后,訪(fǎng)問(wèn)API中的相關(guān)代碼。
部署階段:萬(wàn)事俱備,只等上線(xiàn)
前期我們完成了數據采集、API應用構建、數據存儲、前端可視化展示、監控告警。整個(gè)前端監控系統功能齊全。最后一步是將所有的前端和后端數據庫都在線(xiàn)部署,供大家訪(fǎng)問(wèn)。
部署主要是nginx解析、https配置、數據庫安裝、nodejs的應用部署等,這個(gè)階段的內容會(huì )多一點(diǎn)運維。不過(guò)不用擔心,這里我也會(huì )詳細介紹關(guān)鍵操作。
系統上線(xiàn)后,你可以嘗試在你的任意一個(gè)前端項目中通過(guò)API保存數據采集,按照第一篇中的采集方法,然后登錄監控系統查看真實(shí)使用數據。
當這部分完成后,恭喜,一個(gè)小型的前端監控系統搭建完成。未來(lái)我們可以在此基礎上繼續擴展功能,慢慢讓這個(gè)自研的監控系統變得更強大。
總結
本文介紹了前端監控系統的搭建流程,將整個(gè)流程分為幾個(gè)階段,簡(jiǎn)要介紹了每個(gè)階段要做什么,有哪些關(guān)鍵問(wèn)題,幫助大家理清搭建監控系統的思路,以及更多關(guān)于前端監控和構建JavaScript架構的信息,請關(guān)注腳本之家文章的其他相關(guān)話(huà)題!
最佳實(shí)踐:DEDE采集規則過(guò)濾與替換
刪除最常用的超鏈接。{dede:trim replace=''}]*)>{/dede:trim}
{dede:trim replace=''}{/dede:trim}
如果你像這樣填寫(xiě)它,那么鏈接的文本也會(huì )被刪除{dede:trim替換=''}]*)>(.*){/dede:trim}
2、過(guò)濾JS調用廣告,比如GG廣告,添加這樣的東西:{dede:trim=''}{/dede:trim}
3. 過(guò)濾 div 標簽。這是非常重要的,如果不過(guò)濾,它可能會(huì )錯放已發(fā)布的文章布局,并且當前大多數采集在遇到它之后都放錯了位置。{dede:trim replace=''}

{/dede:trim}
{dede:trim replace=''}
{/dede:trim}
有時(shí)有必要像這樣過(guò)濾:{dede:修剪替換=''}
?。?*)
{/dede:trim}

4.其他過(guò)濾規則可以根據上述規則引入。
5.過(guò)濾經(jīng)常使用的片段和關(guān)鍵字使用情況。{dede:trim replace=''}{/dede:trim}
6.更換簡(jiǎn)單。
{dede:trim replace ='被替換的單詞'} 要替換的單詞 {/dede:trim}
當然,采集的內容也需要搜索引擎收錄,過(guò)濾和替換的目的是為了減少重復、偽原創(chuàng ),如何具體操作,這取決于個(gè)人的要求和喜好。
有關(guān)更多信息,請參閱 IT 技術(shù)專(zhuān)欄
最新版本:原來(lái)這才是Api文檔的完全體
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-10-14 19:10
一、簡(jiǎn)介
在目前主流的前后端分離模式開(kāi)發(fā)下,需要有一個(gè)好用的接口文檔。
**PS:以下幾點(diǎn)是實(shí)際開(kāi)發(fā)場(chǎng)景中遇到并實(shí)現的痛點(diǎn)**。
在項目的開(kāi)發(fā)過(guò)程中,接口文檔的存在可以讓前端和后端工程師保持統一的數據信息概念。例如:“項目需求的接口字段和參數字段。只要將請求返回的參數記錄在文檔中,前端和后端工程師就可以針對接口文檔統一編寫(xiě)自己的邏輯在寫(xiě)代碼的時(shí)候,統一命名后,各個(gè)代碼中就不會(huì )出現需要的函數的前端請求接口命名與后端返回接口的命名信息不一致的情況,這樣可以大大避免故障排查失敗,快速定位問(wèn)題。
一個(gè)好的界面文檔肯定會(huì )更直觀(guān)、更容易維護、更容易保存。這些基本屬性。但是到了21世紀的今天,還是有界面文檔還是用word文檔或者excel等筆記本記錄工具來(lái)記錄的。這樣,文檔是可用的,但是在項目的不斷迭代中,文檔需要不斷的維護和更新,投入了不必要的成本。在項目交接的場(chǎng)景中,也交付了大量的接口文檔。但是,在基于人工維護編寫(xiě)文檔時(shí),自然會(huì )出現刪除參數、復制錯誤等錯誤操作的錯誤,從而無(wú)法很好地保證文檔的正確性。
2.apifox在線(xiàn)接口文檔
如今,許多界面文檔工具層出不窮,如swagger、yapi、Knife4j等。但它們或多或少都有一些缺點(diǎn)。比如我們后端同學(xué)最常用的swagger-ui,有以下痛點(diǎn):
提交的參數為 JSON,無(wú)法格式化。如果參數錯誤,查找起來(lái)很麻煩。返回的結果不能折疊。閱讀時(shí)間太長(cháng)了。
swagger-ui 在界面數量增加的情況下非常難用,而且沒(méi)有分類(lèi)菜單。
在最近的技術(shù)社區中,發(fā)現了一個(gè)api接口工具Apifox。相當于一個(gè)集Postman + Swagger + Mock + JMeter于一體的工具。Apifox 的界面文檔是我遇到過(guò)的最親密的程序員之一。不僅解決了我遇到的開(kāi)發(fā)痛點(diǎn),接口文檔也很強大。
2.1 如何生成在線(xiàn)接口文檔 2.1.1 第一步
首先去Apifox官網(wǎng)根據你對應的系統下載對應的Apifox客戶(hù)端。當然,直接使用網(wǎng)頁(yè)版并不妨礙我們后續的步驟。
下載完成后,我們打開(kāi)客戶(hù)端或者網(wǎng)頁(yè)登錄。如果你是第一次使用,可以先注冊一個(gè)賬號再登錄。第一次使用的同學(xué)會(huì )發(fā)現如下頁(yè)面進(jìn)入。
因為演示,我會(huì )直接使用當前的示例團隊和里面的示例項目。點(diǎn)擊示例項目進(jìn)入Apifox,會(huì )看到演示中使用的寵物店的界面分組。
2.1.2 第二步
為了讓學(xué)生更恰當地使用 Apifox 替代到自己的項目中。我決定更多地模擬我們的真實(shí)使用環(huán)境,我在我的服務(wù)器上部署了一個(gè)名為 jeetcg-Boot 的開(kāi)源項目。本項目有自己的自定義接口文檔,但是可以導出一些OpenApi和Markdown格式的文檔,然后我可以使用導出的接口文檔來(lái)演示如何慢慢連接到網(wǎng)上提供的Apifox文檔。
現在的同學(xué)有沒(méi)有類(lèi)似swagger格式的文檔也沒(méi)關(guān)系,因為Apifox支持21種格式的導入方式,把你的數據轉換成Apifox。但也有例外。比如我上面提到的當前項目沒(méi)有文檔,其實(shí)你也可以通過(guò)Apifox的新界面添加當前項目的請求參數等信息,讓你的項目從現在開(kāi)始。有自己的接口文檔。所以這里我們主要關(guān)注生成在線(xiàn)文檔的操作如何創(chuàng )建一個(gè)新的在線(xiàn)文檔。,所以這里不再詳細介紹新的界面。此處操作不是很好的同學(xué)可以點(diǎn)擊這部分文檔幫助進(jìn)行參考。
然后我將我的jeetcg-boot項目的接口文件導出為一個(gè)OpenApi.json文件,通過(guò)Apifox的導入功能將我當前項目的接口轉入Apifox
6
通過(guò)這么簡(jiǎn)單的步驟,我的項目界面就成功移植到了Apifox進(jìn)行管理。
在這里我要表?yè)P一下 Apifox 真的很漂亮的設計和舒適的排版,對于像我這樣的顏值控。
2.1.3 第三步
這一步是我們目的的最后一步。確保我們的接口已經(jīng)存在于項目中后,我們可以通過(guò)左側的在線(xiàn)分享點(diǎn)擊我們的新分享。
7
此時(shí)我們可以看到創(chuàng )建在線(xiàn)文檔的信息表,需要填寫(xiě)接手當前項目的團隊或其他小公司對于合作伙伴使用的這種場(chǎng)景,建議填寫(xiě)對應的匹配名稱(chēng)。密碼訪(fǎng)問(wèn)可以為我們生成的在線(xiàn)文檔提供一層加密保護,讓不小心泄露的界面地址不會(huì )被其他人訪(fǎng)問(wèn)看到我們的界面設計等信息,所以這里要填寫(xiě)的小伙伴可以按照真實(shí)情況填寫(xiě)。過(guò)期時(shí)間可以決定我們當前生成的在線(xiàn)接口文檔的過(guò)期時(shí)間。共享范圍允許我們挑選和選擇我們需要生成到在線(xiàn)接口文檔的接口。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。
8
填寫(xiě)完所有信息后,我們可以點(diǎn)擊保存,為我們的項目生成一個(gè)在線(xiàn)界面文檔url。此時(shí),我們復制當前生成的在線(xiàn)接口文檔鏈接,打開(kāi)即可找到我們的項目接口文檔。
9
102.2 Apifox 的在線(xiàn)界面文檔中的“魔力”是什么 2.2.1 文檔中直接運行界面
細心的同學(xué)一定發(fā)現,選擇一個(gè)界面后,在我們文檔的右側有一個(gè)運行按鈕。單擊該按鈕將顯示執行操作界面。點(diǎn)擊發(fā)送后,我們可以看到返回的結果和我們的界面一模一樣。返回響應的格式相同。調用正是我們在生成這個(gè)接口時(shí)選擇使用的云mock環(huán)境,所以現在顯示的數據是mock為我們生成的假數據。
但是,這對于獲取文檔的開(kāi)發(fā)來(lái)說(shuō)并不是太簡(jiǎn)單??梢灾苯釉谖臋n上測試當前接口是否滿(mǎn)足要求,測試當前環(huán)境的接口狀態(tài)是否正常。
在mock環(huán)境中調用的接口也方便前端程序員先開(kāi)發(fā)后端,不會(huì )被后端同學(xué)卡住。
11
122.2.2 13種語(yǔ)言生成請求示例代碼
在文檔的中間,我們可以看到一些編程語(yǔ)言的非常明顯的圖標。它們是干什么用的??
13
作為一個(gè)前端程序員,我自然會(huì )用javascript來(lái)介紹給我的同學(xué)。點(diǎn)擊 javascript 圖標,我們發(fā)現下面有一行選項卡提供選擇。相信文章之前也是前端程序員的同學(xué)們并不陌生。這些是js常用的請求方法,在每個(gè)方法的選項卡下選擇編輯器。會(huì )有代碼使用這個(gè)方法來(lái)調用當前接口。**當我第一次看到這個(gè)功能時(shí),我驚呆了。有這么親密的互動(dòng)嗎?? **
由于程序員的職業(yè)病,我們當然要測試生成的代碼,他能跑嗎?正確的。這里推薦你使用一些在線(xiàn) IDE 來(lái)運行一些代碼的方法。例如,流行的 stackblitz
我們把axios的代碼復制到ide編輯器中,在線(xiàn)安裝axios的庫就可以在線(xiàn)運行了。
結果很明顯,右邊的打印和我們剛才跑的返回一模一樣。這真的是牛肉。所以意味著(zhù)這13種語(yǔ)言都可以生成自己的請求代碼,在實(shí)際代碼中驗證當前接口請求的性能。
如果你想在這里測試更多的編程語(yǔ)言,那我就分享一個(gè)在線(xiàn)的ide小閃電,可以運行30多種語(yǔ)言。
2.2.3 生成模型代碼
這個(gè)函數也是我很喜歡的一個(gè)函數,生成模型代碼。主要是為返回的響應參數生成的模型代碼。
比如我選擇使用Typescript代碼,那么它會(huì )自動(dòng)生成一個(gè)帶返回參數的typescript類(lèi)型接口,這對于使用ts開(kāi)發(fā)的前端同學(xué)來(lái)說(shuō)是一個(gè)福音。不再需要一一復制請求返回的類(lèi)型?,F在可以直接復制粘貼到界面文檔中,放入代碼中。
當前代碼生成模型的操作欄針對每種編程語(yǔ)言都有相應的配置開(kāi)關(guān)。例如,對于 typescript,您可以打開(kāi)僅生成類(lèi)型定義,這將刪除下面的轉換代碼。僅保留類(lèi)型定義。并且還可以對運行時(shí)的json.parse的結果進(jìn)行校驗,確保我們返回的結果參數符合條件。
所以需要生成什么類(lèi)型??的模型代碼就看同學(xué)們配置的需要了。
3. Apifox 在線(xiàn)分享接口文檔的詳細信息。這里我要說(shuō)的是,我認為目前的這個(gè)接口文檔確實(shí)是為了程序員的效率和易用性。
3.1.1 接口連接可直接點(diǎn)擊復制:
3.1.2 文檔整體布局
文檔的整體布局是左右結構的,所以當我們的程序員在閱讀文檔的時(shí)候需要做一個(gè)試運行的時(shí)候,我們可以通過(guò)左右檢查參數來(lái)檢查是否有不符合要求的參數,這與頂部的swagger參數和底部的請求不同。需要上下移動(dòng),方便性大打折扣。
3.1.3 運行時(shí)批量編輯參數
在操作界面中,我們有時(shí)會(huì )有大量的請求參數,可能需要臨時(shí)更改才能上廁所。表單中是否逐個(gè)更改是一件很痛苦的事情,而Apifox為開(kāi)發(fā)者提供了批量編輯交互。更容易實(shí)現他們的目標
四、結尾
使用過(guò) Apifox 后,相信你會(huì )或多或少對這款軟件的細節和強大的功能印象深刻。因為一個(gè)軟件工具的使命必須是為用戶(hù)提供方便,處處簡(jiǎn)化用戶(hù)的操作,讓工作更有效率,這就是一個(gè)好工具的表現。
Apifox 確實(shí)有一點(diǎn)要說(shuō),它是一個(gè)有利于程序員的良心工具。
終極:吐血整理!頂級程序員的百寶箱來(lái)咯!| 原力計劃
每個(gè)人都知道我是一個(gè)電子商務(wù)企業(yè)。在線(xiàn)界面多的在線(xiàn)問(wèn)題如何排查?捕獲數據包并查看數據。
JMeter
Apache JMeter 是 Apache 組織開(kāi)發(fā)的基于 Java 的壓力測試工具
是的,它用于壓力測試。如何模擬大量請求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平臺使用的軟件編程文檔管理工具,可以瀏覽 API 文檔,管理代碼片段。Dash 自帶豐富的 API 文檔,涵蓋各種主流編程語(yǔ)言和框架。
開(kāi)發(fā)文檔
上面的兄弟,不過(guò)這個(gè)不用下載,是在線(xiàn)的
數據夾
DataGrip 是 JetBrains 推出的數據庫管理產(chǎn)品。對于 JetBrains,開(kāi)發(fā)者必須熟悉它。IDEA和ReSharper都是這家公司的產(chǎn)品,用戶(hù)體驗非常好。
一開(kāi)始,我只是用它來(lái)看看我的同事正在使用一個(gè)很酷的界面。后來(lái)發(fā)現功能也很好吃,突出文字等等。你可以挖掘很多功能。
視覺(jué)虛擬機
VisualVM 是 Netbeans 的一個(gè)配置文件子項目。JDK6.0 update 7已經(jīng)收錄,可以監控線(xiàn)程,內存情況,查看內存中方法和對象的CPU時(shí)間,已經(jīng)被GC的對象,反向查看分配的棧(比如分配了哪些對象)到 100 個(gè)字符串對象)。
VisualVM 可以根據需要安裝不同的插件。每個(gè)插件都有不同的關(guān)注點(diǎn)。有的主要監控GC,有的主要監控內存,還有的監控線(xiàn)程。
Iterm2
這是我用于日志故障排除的客戶(hù)端工具。它還支持許多配置??梢灾苯觭sh到跳板查看在線(xiàn)機器的狀態(tài)等,還是需要在線(xiàn)排查的。
網(wǎng)*有道詞典
有朋友想問(wèn)帥青是什么情況,是不是有鬼畜混進(jìn)來(lái)?
不,我們在開(kāi)發(fā)它們時(shí)不知道很多單詞,或者在命名它們時(shí)不知道單詞的英文。仍然有必要檢查它們。標準化的命名是你成為頂級大牛的第一步。你的名字全是A.B,C 當你的代碼審核時(shí),你的Leader會(huì )打電話(huà)給hr讓你回家過(guò)年,然后再提交。新年來(lái)臨之際,不要輕易嘗試。
崇高的文本
這是一個(gè)文本記錄的工具,也可以用來(lái)寫(xiě)代碼,但是如果我們有IDE的話(huà),它可以作為日?,嵤掠涗浀墓ぞ?,臨時(shí)文檔處理的工具也是可以的,而且反正還是很有用的。
最近剛好有人才群里的人才打電話(huà)給我安利,給我做筆記和寫(xiě)博客的工具,說(shuō)我的排版很好看。(我在飄)
安排!
印象筆記
這可以說(shuō)是陪伴我大學(xué)到現在的一個(gè)工具。數了幾千個(gè)文件,記錄了生活中的小事,學(xué)了編程之后的很多東西。我在收錄里面。
我不會(huì )和其他筆記比較,因為我一開(kāi)始使用的那個(gè)從來(lái)沒(méi)有被替換過(guò)。
泰波拉
Typora 是我一直在為其編寫(xiě) Markdown 的工具。它易于使用,但也可以切換模式。你相信嗎?打字機模式、對焦模式、音源模式總有一款適合你。
ipic
我使用 Typora 的圖片床。Markdown復制圖片是不是從本地地址進(jìn)來(lái)的,發(fā)到外網(wǎng)就失效了。但是,這個(gè)基于 Typora 的工具,你復制進(jìn)去的時(shí)候可以直接上傳到互聯(lián)網(wǎng)上?,F在,你可以在任何你想要的平臺上發(fā)布。
Md2All
每個(gè)人都很好奇我的降價(jià)如何看起來(lái)如此美麗。其實(shí)我寫(xiě)完markdown后,轉成html,就用了上面的工具。
寫(xiě)完就在這里打出來(lái)然后發(fā)出去。打字花了很長(cháng)時(shí)間,忍不住夸了帥C。
圖像處理 Adob??e Photoshop CC 2019
ps,眾所周知,正常的圖片處理啊用這個(gè)香味,沒(méi)事幫美P拍照,說(shuō)不定還能找個(gè)女朋友(又開(kāi)始YY了)
Adobe Premiere Pro CC 2019
這可能是最常用的視頻處理軟件了,非常好用?。?!
功能太豐富了,喘不過(guò)氣來(lái)。缺點(diǎn)是學(xué)習成本有點(diǎn)高,入門(mén)很快。成為大神需要很多時(shí)間。
Adobe After Effects CC 2019
不知道你看了多少視頻。視頻的很多特效都是由此制作的。下面還有一個(gè)我的演示。
GIPHY 捕獲
有時(shí)候人們文章不想用靜態(tài)圖片來(lái)表達,而是想錄制Gif動(dòng)畫(huà)來(lái)寫(xiě)代碼,那么這個(gè)軟件真的好用。
視頻播放 KMPlayer
其實(shí)帥C,我心里有一個(gè)玩家神器,快點(diǎn)播吧。
可惜沒(méi)過(guò)多久,直播就過(guò)早地死掉了。我將使用以下播放軟件播放自己的視頻。
因為很多電腦自帶的格式可能不支持,而且我喜歡剪輯視頻,一直在用。
斗圖
你有沒(méi)有注意到我之前的很多 文章 表情實(shí)際上是在網(wǎng)上制作的?
碳
帥兵之前的文章里很多代碼的圖片都是這個(gè)網(wǎng)站生成的。有很多款式可供選擇,非常漂亮。
代碼LF
這個(gè) 網(wǎng)站 很有趣。如果你在寫(xiě)代碼的時(shí)候不知道如何命名這些單詞,可以去這里查看一下。他是GitHub的爬蟲(chóng)工具??吹酱笊裰?,總會(huì )有想法。
注:我簡(jiǎn)單介紹一下上面的軟件是做什么的,因為實(shí)在太多了,真正的功能還需要深挖。
總結
其實(shí)更香的工具太多了,這里就不一一介紹了,其實(shí)有一個(gè)很簡(jiǎn)單的方法,就是問(wèn),學(xué),學(xué)。
我就是這樣??吹絃eader用什么工具,我問(wèn)他是什么,好用嗎?如何使用?
包括我寫(xiě)博客,其實(shí)才寫(xiě)了20多天。第一天準備寫(xiě)的時(shí)候,直接問(wèn)三外(Java3y),你用什么開(kāi)發(fā)工具,怎么用,包括他主要發(fā)布哪些平臺,發(fā)布時(shí)間段,我會(huì )直接問(wèn)。
他坐在我對面,因為我的猥褻而被迫說(shuō)出真相,主要是因為最近有需要我為他寫(xiě)代碼哈哈。
別人有這么多經(jīng)驗,會(huì )不會(huì )是軟件不好?而且在使用過(guò)程中如果不知道,可以問(wèn)問(wèn)對方,是不是很香。
潺潺
我們先來(lái)看看人才交流群里一位人才提出的問(wèn)題:
不知道大家還記得我之前寫(xiě)的冪等情況嗎?
這就是下圖中的情況。當我下單增加或減少 GMV 時(shí),我會(huì )先去看看有沒(méi)有流水。有的話(huà)就證明已經(jīng)加了,我直接回。如果沒(méi)有,請繼續以下過(guò)程。
其實(shí)他提的問(wèn)題很好,因為我們日常的開(kāi)發(fā)是主從同步,讀寫(xiě)分離,也就是說(shuō)我們可能會(huì )加GMV,但是我們操作主庫,他需要同步數據到奴隸圖書(shū)館,但是這個(gè)他在這個(gè)過(guò)程中被耽擱了。
這時(shí)候如果另一個(gè)系統重試訂單號消息,你又進(jìn)來(lái)了嗎?你查看流水,發(fā)現沒(méi)有流水,卻以為自己沒(méi)有加錢(qián),進(jìn)行了加錢(qián)的操作,結果耽誤了。, 是不是加了兩次。
正常開(kāi)發(fā)中確實(shí)有,但是主從延遲應該是DBA(Database Administrator)考慮的,但是我說(shuō)不能寫(xiě)有邏輯漏洞的代碼,其實(shí)很簡(jiǎn)單,把他放到Redis中,設置一個(gè)時(shí)間約30分鐘,可避免在此期間重復食用。如果延遲超過(guò)30分鐘,問(wèn)題已經(jīng)很大了,DBA會(huì )知道的。
本文由吐血整理,大家吃好,記得給個(gè)贊哦!
原來(lái)的:
【結尾】
來(lái)吧,原力計劃的升級版來(lái)了!2019年末,我們?yōu)槟鷾蕚淞艘粓?chǎng)交通盛宴!即日起,只要參與原力計劃,文章達到要求,即可獲得流量+現金的支持!
參與方式:發(fā)布原創(chuàng )文章時(shí),在提交頁(yè)面勾選原力計劃即可參與。掃碼戳詳情↓ 查看全部
最新版本:原來(lái)這才是Api文檔的完全體
一、簡(jiǎn)介
在目前主流的前后端分離模式開(kāi)發(fā)下,需要有一個(gè)好用的接口文檔。
**PS:以下幾點(diǎn)是實(shí)際開(kāi)發(fā)場(chǎng)景中遇到并實(shí)現的痛點(diǎn)**。
在項目的開(kāi)發(fā)過(guò)程中,接口文檔的存在可以讓前端和后端工程師保持統一的數據信息概念。例如:“項目需求的接口字段和參數字段。只要將請求返回的參數記錄在文檔中,前端和后端工程師就可以針對接口文檔統一編寫(xiě)自己的邏輯在寫(xiě)代碼的時(shí)候,統一命名后,各個(gè)代碼中就不會(huì )出現需要的函數的前端請求接口命名與后端返回接口的命名信息不一致的情況,這樣可以大大避免故障排查失敗,快速定位問(wèn)題。
一個(gè)好的界面文檔肯定會(huì )更直觀(guān)、更容易維護、更容易保存。這些基本屬性。但是到了21世紀的今天,還是有界面文檔還是用word文檔或者excel等筆記本記錄工具來(lái)記錄的。這樣,文檔是可用的,但是在項目的不斷迭代中,文檔需要不斷的維護和更新,投入了不必要的成本。在項目交接的場(chǎng)景中,也交付了大量的接口文檔。但是,在基于人工維護編寫(xiě)文檔時(shí),自然會(huì )出現刪除參數、復制錯誤等錯誤操作的錯誤,從而無(wú)法很好地保證文檔的正確性。
2.apifox在線(xiàn)接口文檔
如今,許多界面文檔工具層出不窮,如swagger、yapi、Knife4j等。但它們或多或少都有一些缺點(diǎn)。比如我們后端同學(xué)最常用的swagger-ui,有以下痛點(diǎn):
提交的參數為 JSON,無(wú)法格式化。如果參數錯誤,查找起來(lái)很麻煩。返回的結果不能折疊。閱讀時(shí)間太長(cháng)了。
swagger-ui 在界面數量增加的情況下非常難用,而且沒(méi)有分類(lèi)菜單。
在最近的技術(shù)社區中,發(fā)現了一個(gè)api接口工具Apifox。相當于一個(gè)集Postman + Swagger + Mock + JMeter于一體的工具。Apifox 的界面文檔是我遇到過(guò)的最親密的程序員之一。不僅解決了我遇到的開(kāi)發(fā)痛點(diǎn),接口文檔也很強大。
2.1 如何生成在線(xiàn)接口文檔 2.1.1 第一步
首先去Apifox官網(wǎng)根據你對應的系統下載對應的Apifox客戶(hù)端。當然,直接使用網(wǎng)頁(yè)版并不妨礙我們后續的步驟。
下載完成后,我們打開(kāi)客戶(hù)端或者網(wǎng)頁(yè)登錄。如果你是第一次使用,可以先注冊一個(gè)賬號再登錄。第一次使用的同學(xué)會(huì )發(fā)現如下頁(yè)面進(jìn)入。
因為演示,我會(huì )直接使用當前的示例團隊和里面的示例項目。點(diǎn)擊示例項目進(jìn)入Apifox,會(huì )看到演示中使用的寵物店的界面分組。
2.1.2 第二步
為了讓學(xué)生更恰當地使用 Apifox 替代到自己的項目中。我決定更多地模擬我們的真實(shí)使用環(huán)境,我在我的服務(wù)器上部署了一個(gè)名為 jeetcg-Boot 的開(kāi)源項目。本項目有自己的自定義接口文檔,但是可以導出一些OpenApi和Markdown格式的文檔,然后我可以使用導出的接口文檔來(lái)演示如何慢慢連接到網(wǎng)上提供的Apifox文檔。
現在的同學(xué)有沒(méi)有類(lèi)似swagger格式的文檔也沒(méi)關(guān)系,因為Apifox支持21種格式的導入方式,把你的數據轉換成Apifox。但也有例外。比如我上面提到的當前項目沒(méi)有文檔,其實(shí)你也可以通過(guò)Apifox的新界面添加當前項目的請求參數等信息,讓你的項目從現在開(kāi)始。有自己的接口文檔。所以這里我們主要關(guān)注生成在線(xiàn)文檔的操作如何創(chuàng )建一個(gè)新的在線(xiàn)文檔。,所以這里不再詳細介紹新的界面。此處操作不是很好的同學(xué)可以點(diǎn)擊這部分文檔幫助進(jìn)行參考。
然后我將我的jeetcg-boot項目的接口文件導出為一個(gè)OpenApi.json文件,通過(guò)Apifox的導入功能將我當前項目的接口轉入Apifox

6
通過(guò)這么簡(jiǎn)單的步驟,我的項目界面就成功移植到了Apifox進(jìn)行管理。
在這里我要表?yè)P一下 Apifox 真的很漂亮的設計和舒適的排版,對于像我這樣的顏值控。
2.1.3 第三步
這一步是我們目的的最后一步。確保我們的接口已經(jīng)存在于項目中后,我們可以通過(guò)左側的在線(xiàn)分享點(diǎn)擊我們的新分享。
7
此時(shí)我們可以看到創(chuàng )建在線(xiàn)文檔的信息表,需要填寫(xiě)接手當前項目的團隊或其他小公司對于合作伙伴使用的這種場(chǎng)景,建議填寫(xiě)對應的匹配名稱(chēng)。密碼訪(fǎng)問(wèn)可以為我們生成的在線(xiàn)文檔提供一層加密保護,讓不小心泄露的界面地址不會(huì )被其他人訪(fǎng)問(wèn)看到我們的界面設計等信息,所以這里要填寫(xiě)的小伙伴可以按照真實(shí)情況填寫(xiě)。過(guò)期時(shí)間可以決定我們當前生成的在線(xiàn)接口文檔的過(guò)期時(shí)間。共享范圍允許我們挑選和選擇我們需要生成到在線(xiàn)接口文檔的接口。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。我們可能會(huì )遇到這樣一種場(chǎng)景,我們需要向開(kāi)發(fā)團隊提供一些功能復雜的接口,但又不想將所有接口都暴露給對方。這時(shí)候我們就可以選擇需要提供的接口了。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。運行時(shí)環(huán)境是決定生成的在線(xiàn)接口文檔調用什么環(huán)境的接口。這里的環(huán)境設置,同學(xué)們可以看看這部分。這里我們選擇用來(lái)模擬我們的接口調用的環(huán)境。更多設置允許我們在我們的在線(xiàn)文檔中顯示這三個(gè)信息。
8
填寫(xiě)完所有信息后,我們可以點(diǎn)擊保存,為我們的項目生成一個(gè)在線(xiàn)界面文檔url。此時(shí),我們復制當前生成的在線(xiàn)接口文檔鏈接,打開(kāi)即可找到我們的項目接口文檔。
9
102.2 Apifox 的在線(xiàn)界面文檔中的“魔力”是什么 2.2.1 文檔中直接運行界面
細心的同學(xué)一定發(fā)現,選擇一個(gè)界面后,在我們文檔的右側有一個(gè)運行按鈕。單擊該按鈕將顯示執行操作界面。點(diǎn)擊發(fā)送后,我們可以看到返回的結果和我們的界面一模一樣。返回響應的格式相同。調用正是我們在生成這個(gè)接口時(shí)選擇使用的云mock環(huán)境,所以現在顯示的數據是mock為我們生成的假數據。
但是,這對于獲取文檔的開(kāi)發(fā)來(lái)說(shuō)并不是太簡(jiǎn)單??梢灾苯釉谖臋n上測試當前接口是否滿(mǎn)足要求,測試當前環(huán)境的接口狀態(tài)是否正常。
在mock環(huán)境中調用的接口也方便前端程序員先開(kāi)發(fā)后端,不會(huì )被后端同學(xué)卡住。
11
122.2.2 13種語(yǔ)言生成請求示例代碼
在文檔的中間,我們可以看到一些編程語(yǔ)言的非常明顯的圖標。它們是干什么用的??
13
作為一個(gè)前端程序員,我自然會(huì )用javascript來(lái)介紹給我的同學(xué)。點(diǎn)擊 javascript 圖標,我們發(fā)現下面有一行選項卡提供選擇。相信文章之前也是前端程序員的同學(xué)們并不陌生。這些是js常用的請求方法,在每個(gè)方法的選項卡下選擇編輯器。會(huì )有代碼使用這個(gè)方法來(lái)調用當前接口。**當我第一次看到這個(gè)功能時(shí),我驚呆了。有這么親密的互動(dòng)嗎?? **

由于程序員的職業(yè)病,我們當然要測試生成的代碼,他能跑嗎?正確的。這里推薦你使用一些在線(xiàn) IDE 來(lái)運行一些代碼的方法。例如,流行的 stackblitz
我們把axios的代碼復制到ide編輯器中,在線(xiàn)安裝axios的庫就可以在線(xiàn)運行了。
結果很明顯,右邊的打印和我們剛才跑的返回一模一樣。這真的是牛肉。所以意味著(zhù)這13種語(yǔ)言都可以生成自己的請求代碼,在實(shí)際代碼中驗證當前接口請求的性能。
如果你想在這里測試更多的編程語(yǔ)言,那我就分享一個(gè)在線(xiàn)的ide小閃電,可以運行30多種語(yǔ)言。
2.2.3 生成模型代碼
這個(gè)函數也是我很喜歡的一個(gè)函數,生成模型代碼。主要是為返回的響應參數生成的模型代碼。
比如我選擇使用Typescript代碼,那么它會(huì )自動(dòng)生成一個(gè)帶返回參數的typescript類(lèi)型接口,這對于使用ts開(kāi)發(fā)的前端同學(xué)來(lái)說(shuō)是一個(gè)福音。不再需要一一復制請求返回的類(lèi)型?,F在可以直接復制粘貼到界面文檔中,放入代碼中。
當前代碼生成模型的操作欄針對每種編程語(yǔ)言都有相應的配置開(kāi)關(guān)。例如,對于 typescript,您可以打開(kāi)僅生成類(lèi)型定義,這將刪除下面的轉換代碼。僅保留類(lèi)型定義。并且還可以對運行時(shí)的json.parse的結果進(jìn)行校驗,確保我們返回的結果參數符合條件。
所以需要生成什么類(lèi)型??的模型代碼就看同學(xué)們配置的需要了。
3. Apifox 在線(xiàn)分享接口文檔的詳細信息。這里我要說(shuō)的是,我認為目前的這個(gè)接口文檔確實(shí)是為了程序員的效率和易用性。
3.1.1 接口連接可直接點(diǎn)擊復制:
3.1.2 文檔整體布局
文檔的整體布局是左右結構的,所以當我們的程序員在閱讀文檔的時(shí)候需要做一個(gè)試運行的時(shí)候,我們可以通過(guò)左右檢查參數來(lái)檢查是否有不符合要求的參數,這與頂部的swagger參數和底部的請求不同。需要上下移動(dòng),方便性大打折扣。
3.1.3 運行時(shí)批量編輯參數
在操作界面中,我們有時(shí)會(huì )有大量的請求參數,可能需要臨時(shí)更改才能上廁所。表單中是否逐個(gè)更改是一件很痛苦的事情,而Apifox為開(kāi)發(fā)者提供了批量編輯交互。更容易實(shí)現他們的目標
四、結尾
使用過(guò) Apifox 后,相信你會(huì )或多或少對這款軟件的細節和強大的功能印象深刻。因為一個(gè)軟件工具的使命必須是為用戶(hù)提供方便,處處簡(jiǎn)化用戶(hù)的操作,讓工作更有效率,這就是一個(gè)好工具的表現。
Apifox 確實(shí)有一點(diǎn)要說(shuō),它是一個(gè)有利于程序員的良心工具。
終極:吐血整理!頂級程序員的百寶箱來(lái)咯!| 原力計劃
每個(gè)人都知道我是一個(gè)電子商務(wù)企業(yè)。在線(xiàn)界面多的在線(xiàn)問(wèn)題如何排查?捕獲數據包并查看數據。
JMeter
Apache JMeter 是 Apache 組織開(kāi)發(fā)的基于 Java 的壓力測試工具
是的,它用于壓力測試。如何模擬大量請求?就用它吧。
短跑
Dash for mac 是一款配合 Mac OS 平臺使用的軟件編程文檔管理工具,可以瀏覽 API 文檔,管理代碼片段。Dash 自帶豐富的 API 文檔,涵蓋各種主流編程語(yǔ)言和框架。
開(kāi)發(fā)文檔
上面的兄弟,不過(guò)這個(gè)不用下載,是在線(xiàn)的
數據夾
DataGrip 是 JetBrains 推出的數據庫管理產(chǎn)品。對于 JetBrains,開(kāi)發(fā)者必須熟悉它。IDEA和ReSharper都是這家公司的產(chǎn)品,用戶(hù)體驗非常好。
一開(kāi)始,我只是用它來(lái)看看我的同事正在使用一個(gè)很酷的界面。后來(lái)發(fā)現功能也很好吃,突出文字等等。你可以挖掘很多功能。
視覺(jué)虛擬機
VisualVM 是 Netbeans 的一個(gè)配置文件子項目。JDK6.0 update 7已經(jīng)收錄,可以監控線(xiàn)程,內存情況,查看內存中方法和對象的CPU時(shí)間,已經(jīng)被GC的對象,反向查看分配的棧(比如分配了哪些對象)到 100 個(gè)字符串對象)。
VisualVM 可以根據需要安裝不同的插件。每個(gè)插件都有不同的關(guān)注點(diǎn)。有的主要監控GC,有的主要監控內存,還有的監控線(xiàn)程。
Iterm2
這是我用于日志故障排除的客戶(hù)端工具。它還支持許多配置??梢灾苯觭sh到跳板查看在線(xiàn)機器的狀態(tài)等,還是需要在線(xiàn)排查的。
網(wǎng)*有道詞典
有朋友想問(wèn)帥青是什么情況,是不是有鬼畜混進(jìn)來(lái)?
不,我們在開(kāi)發(fā)它們時(shí)不知道很多單詞,或者在命名它們時(shí)不知道單詞的英文。仍然有必要檢查它們。標準化的命名是你成為頂級大牛的第一步。你的名字全是A.B,C 當你的代碼審核時(shí),你的Leader會(huì )打電話(huà)給hr讓你回家過(guò)年,然后再提交。新年來(lái)臨之際,不要輕易嘗試。
崇高的文本
這是一個(gè)文本記錄的工具,也可以用來(lái)寫(xiě)代碼,但是如果我們有IDE的話(huà),它可以作為日?,嵤掠涗浀墓ぞ?,臨時(shí)文檔處理的工具也是可以的,而且反正還是很有用的。
最近剛好有人才群里的人才打電話(huà)給我安利,給我做筆記和寫(xiě)博客的工具,說(shuō)我的排版很好看。(我在飄)
安排!

印象筆記
這可以說(shuō)是陪伴我大學(xué)到現在的一個(gè)工具。數了幾千個(gè)文件,記錄了生活中的小事,學(xué)了編程之后的很多東西。我在收錄里面。
我不會(huì )和其他筆記比較,因為我一開(kāi)始使用的那個(gè)從來(lái)沒(méi)有被替換過(guò)。
泰波拉
Typora 是我一直在為其編寫(xiě) Markdown 的工具。它易于使用,但也可以切換模式。你相信嗎?打字機模式、對焦模式、音源模式總有一款適合你。
ipic
我使用 Typora 的圖片床。Markdown復制圖片是不是從本地地址進(jìn)來(lái)的,發(fā)到外網(wǎng)就失效了。但是,這個(gè)基于 Typora 的工具,你復制進(jìn)去的時(shí)候可以直接上傳到互聯(lián)網(wǎng)上?,F在,你可以在任何你想要的平臺上發(fā)布。
Md2All
每個(gè)人都很好奇我的降價(jià)如何看起來(lái)如此美麗。其實(shí)我寫(xiě)完markdown后,轉成html,就用了上面的工具。
寫(xiě)完就在這里打出來(lái)然后發(fā)出去。打字花了很長(cháng)時(shí)間,忍不住夸了帥C。
圖像處理 Adob??e Photoshop CC 2019
ps,眾所周知,正常的圖片處理啊用這個(gè)香味,沒(méi)事幫美P拍照,說(shuō)不定還能找個(gè)女朋友(又開(kāi)始YY了)
Adobe Premiere Pro CC 2019
這可能是最常用的視頻處理軟件了,非常好用?。?!
功能太豐富了,喘不過(guò)氣來(lái)。缺點(diǎn)是學(xué)習成本有點(diǎn)高,入門(mén)很快。成為大神需要很多時(shí)間。
Adobe After Effects CC 2019
不知道你看了多少視頻。視頻的很多特效都是由此制作的。下面還有一個(gè)我的演示。
GIPHY 捕獲
有時(shí)候人們文章不想用靜態(tài)圖片來(lái)表達,而是想錄制Gif動(dòng)畫(huà)來(lái)寫(xiě)代碼,那么這個(gè)軟件真的好用。
視頻播放 KMPlayer
其實(shí)帥C,我心里有一個(gè)玩家神器,快點(diǎn)播吧。
可惜沒(méi)過(guò)多久,直播就過(guò)早地死掉了。我將使用以下播放軟件播放自己的視頻。
因為很多電腦自帶的格式可能不支持,而且我喜歡剪輯視頻,一直在用。

斗圖
你有沒(méi)有注意到我之前的很多 文章 表情實(shí)際上是在網(wǎng)上制作的?
碳
帥兵之前的文章里很多代碼的圖片都是這個(gè)網(wǎng)站生成的。有很多款式可供選擇,非常漂亮。
代碼LF
這個(gè) 網(wǎng)站 很有趣。如果你在寫(xiě)代碼的時(shí)候不知道如何命名這些單詞,可以去這里查看一下。他是GitHub的爬蟲(chóng)工具??吹酱笊裰?,總會(huì )有想法。
注:我簡(jiǎn)單介紹一下上面的軟件是做什么的,因為實(shí)在太多了,真正的功能還需要深挖。
總結
其實(shí)更香的工具太多了,這里就不一一介紹了,其實(shí)有一個(gè)很簡(jiǎn)單的方法,就是問(wèn),學(xué),學(xué)。
我就是這樣??吹絃eader用什么工具,我問(wèn)他是什么,好用嗎?如何使用?
包括我寫(xiě)博客,其實(shí)才寫(xiě)了20多天。第一天準備寫(xiě)的時(shí)候,直接問(wèn)三外(Java3y),你用什么開(kāi)發(fā)工具,怎么用,包括他主要發(fā)布哪些平臺,發(fā)布時(shí)間段,我會(huì )直接問(wèn)。
他坐在我對面,因為我的猥褻而被迫說(shuō)出真相,主要是因為最近有需要我為他寫(xiě)代碼哈哈。
別人有這么多經(jīng)驗,會(huì )不會(huì )是軟件不好?而且在使用過(guò)程中如果不知道,可以問(wèn)問(wèn)對方,是不是很香。
潺潺
我們先來(lái)看看人才交流群里一位人才提出的問(wèn)題:
不知道大家還記得我之前寫(xiě)的冪等情況嗎?
這就是下圖中的情況。當我下單增加或減少 GMV 時(shí),我會(huì )先去看看有沒(méi)有流水。有的話(huà)就證明已經(jīng)加了,我直接回。如果沒(méi)有,請繼續以下過(guò)程。
其實(shí)他提的問(wèn)題很好,因為我們日常的開(kāi)發(fā)是主從同步,讀寫(xiě)分離,也就是說(shuō)我們可能會(huì )加GMV,但是我們操作主庫,他需要同步數據到奴隸圖書(shū)館,但是這個(gè)他在這個(gè)過(guò)程中被耽擱了。
這時(shí)候如果另一個(gè)系統重試訂單號消息,你又進(jìn)來(lái)了嗎?你查看流水,發(fā)現沒(méi)有流水,卻以為自己沒(méi)有加錢(qián),進(jìn)行了加錢(qián)的操作,結果耽誤了。, 是不是加了兩次。
正常開(kāi)發(fā)中確實(shí)有,但是主從延遲應該是DBA(Database Administrator)考慮的,但是我說(shuō)不能寫(xiě)有邏輯漏洞的代碼,其實(shí)很簡(jiǎn)單,把他放到Redis中,設置一個(gè)時(shí)間約30分鐘,可避免在此期間重復食用。如果延遲超過(guò)30分鐘,問(wèn)題已經(jīng)很大了,DBA會(huì )知道的。
本文由吐血整理,大家吃好,記得給個(gè)贊哦!
原來(lái)的:
【結尾】
來(lái)吧,原力計劃的升級版來(lái)了!2019年末,我們?yōu)槟鷾蕚淞艘粓?chǎng)交通盛宴!即日起,只要參與原力計劃,文章達到要求,即可獲得流量+現金的支持!
參與方式:發(fā)布原創(chuàng )文章時(shí),在提交頁(yè)面勾選原力計劃即可參與。掃碼戳詳情↓
文章采集api 完美:Datakit,真正的統一可觀(guān)測性 Agent
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 153 次瀏覽 ? 2022-10-12 05:25
隨著(zhù)云和云原生的發(fā)展,越來(lái)越多的客戶(hù)意識到“數據”的重要性,掀起了一波又一波的數據積累浪潮。
如今,國內外數據量很大采集器,但采集的能力大多是單一的。比如 Telegraf 只支持指標,Filebeat 只服務(wù)日志,OpenTelemetry 的 Collector 對非云原生組件不友好。需要大量安裝 Exporter 插件。為了實(shí)現系統的可觀(guān)察性,需要使用多個(gè)采集器,造成資源的浪費。
Datakit是目前唯一真正整合各種環(huán)境(傳統環(huán)境,云/云原生)數據統一的平臺采集,一個(gè)進(jìn)程或者Daemonset Pod就可以實(shí)現全方位的數據采集,配置體驗不錯,開(kāi)源且可擴展。本文將對Datakit相關(guān)功能進(jìn)行全面介紹。
?。―ataKit 內部架構)
多維可觀(guān)測性數據采集
Datakit 支持來(lái)自各種基礎設施和技術(shù)棧的采集 Metrics、Logs、Traces 等數據,并對這些數據進(jìn)行結構化處理。
1.實(shí)時(shí)基礎設施對象
DataKit 支持從主機、容器、k8s、進(jìn)程、云產(chǎn)品等所有基礎設施對象的實(shí)時(shí)狀態(tài),一氣呵成。例如:
(1) Datakit hostobject用于采集基本的主機信息,如硬件型號、基本資源消耗等。
?。?)進(jìn)程采集器可以監控系統中各種正在運行的進(jìn)程,獲取并分析進(jìn)程運行時(shí)的各種指標,包括內存使用率、CPU時(shí)間、進(jìn)程當前狀態(tài)、進(jìn)程監控的端口等..,并且根據進(jìn)程運行時(shí)各種指標的信息,用戶(hù)可以在觀(guān)察云中配置相關(guān)的告警,以便用戶(hù)了解進(jìn)程的狀態(tài),當進(jìn)程發(fā)生故障時(shí),故障進(jìn)程可以及時(shí)維護。
二、指標
相比Telegraf只能采集系列數據,DataKit涵蓋的數據更全面采集類(lèi)型,擁有海量技術(shù)棧指標采集能力,采集器配置更簡(jiǎn)單,數據質(zhì)量更好.
3. 日志
針對日志數據的整體可觀(guān)測性,提供了一種足夠靈活多變的信息組合方式。正因為如此,相比指標和追蹤,日志有更多的采集和處理方式,以適應不同的采集環(huán)境、架構和技術(shù)棧的場(chǎng)景。
從磁盤(pán)文件中獲取日志
這是最原創(chuàng )的日志處理方式。無(wú)論是開(kāi)發(fā)者還是傳統的日志采集方案,一般都是先將日志直接寫(xiě)入磁盤(pán)文件。寫(xiě)入磁盤(pán)文件的日志具有以下特點(diǎn):
(1) 順序寫(xiě)入:一般的日志框架可以保證日志在磁盤(pán)文件中,保持時(shí)間的序列性
自動(dòng)分片:由于磁盤(pán)日志文件是物理增量的,為了防止日志炸毀磁盤(pán),一般的日志框架會(huì )自動(dòng)進(jìn)行分片,或者通過(guò)一些外部常駐腳本來(lái)實(shí)現日志分片
(2) 基于以上特性,DataKit 只需要跟蹤這些文件的變化(即采集 最新更新),一旦寫(xiě)入日志,DataKit 就可以采集 到達,其部署也很簡(jiǎn)單,在日志采集器的conf中填寫(xiě)文件路徑(或通配符路徑)為采集即可。
通過(guò)調用環(huán)境API獲取日志
這個(gè)采集方法目前主要針對容器環(huán)境下的stdout日志。這種日志需要容器(或Kubernetes Pod)中運行的應用程序將日志輸出到stdout,然后通過(guò)Docker的日志接口,將對應的stdout的日志同步到DataKit。
遠程推送日志到 DataKit
對于遠程日志推送,主要是
(1) 開(kāi)發(fā)者直接將應用日志推送到DataKit指定的服務(wù)中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持將日志發(fā)送到遠程服務(wù)。
(2) 第三方平臺日志訪(fǎng)問(wèn)
這種形式的特點(diǎn)是日志直接發(fā)送到DataKit,不需要把日志放在中間。
Sidecar 形式的日志采集
采集這個(gè)方法其實(shí)結合了磁盤(pán)日志采集和日志遠程推送兩種方法。具體來(lái)說(shuō)就是在用戶(hù)的Pod中添加一個(gè)兼容DataKit的Sidecar(即logfwd)。應用,采集方法如下:
4.鏈接跟蹤
DataKit目前支持多種廣泛使用的trace數據,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要將對應的數據地址指向Datakit即可。
5.終端行為
DataKit支持全面采集前端行為數據,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集網(wǎng)頁(yè)或移動(dòng)設備上報的用戶(hù)訪(fǎng)問(wèn)監控數據。建議將 RUM 單獨部署在公網(wǎng)上,不要與現有服務(wù)(如 Kubernetes 集群)一起部署。因為RUM接口上的流量可能非常大,集群內部的流量會(huì )受到干擾,集群內部一些可能的資源調度機制可能會(huì )影響RUM服務(wù)的運行。
通常,生產(chǎn)環(huán)境中的js文件會(huì )經(jīng)過(guò)各種轉換和壓縮,與開(kāi)發(fā)時(shí)的源代碼有較大差異,不方便調試。如果需要在源代碼中定位錯誤,則必須使用 sourcemap 文件。
DataKit支持將js對應的sourcemap文件壓縮打包,命名為--.zip,上傳到/data/rum/,從而實(shí)現上報的錯誤指標集數據自動(dòng)轉換 error_stack_source 字段并將其附加到指標集。
6. 云原生安全
SChecker插件,絕對安全的安全檢查器,lua沙箱只讀分析,支持300+安全事件發(fā)現,用戶(hù)可以自定義自己的規則文件和lib庫。
一般來(lái)說(shuō),運維過(guò)程中一項非常重要的工作就是檢查系統、軟件、日志等一系列狀態(tài)。傳統的解決方案往往是由工程師編寫(xiě)shell(bash)腳本來(lái)執行類(lèi)似的工作,并使用一些遠程腳本來(lái)執行類(lèi)似的任務(wù)。管理工具實(shí)現集群管理。然而,這種方法實(shí)際上是非常危險的。由于系統檢查操作中權限過(guò)多的問(wèn)題,經(jīng)常以root模式運行。一旦惡意腳本被執行,后果將是災難性的。在實(shí)踐中,惡意腳本有兩種,一種是惡意命令,如rm -rf,另一種是數據竊取,如通過(guò)網(wǎng)絡(luò )IO向外部泄露數據。
因此,Security Checker 希望提供一種新型的安全腳本方法(限制命令執行、限制本地 IO、限制網(wǎng)絡(luò ) IO)來(lái)保證所有行為安全可控,Security Checker 將通過(guò)統一的網(wǎng)絡(luò )模型在日志的形式采集事件。同時(shí),Security Checker 將提供大量可更新的規則庫腳本,包括對系統、容器、網(wǎng)絡(luò )和安全的一系列檢查。scheck 是安全檢查器的縮寫(xiě)。
7、基于eBPF的網(wǎng)絡(luò )監控
DataKit eBPF 采集器 支持采集主機/進(jìn)程/容器的網(wǎng)絡(luò )層 4/7 性能和異常數據。
eBPF采集器、采集主機網(wǎng)絡(luò )TCP、UDP連接信息、Bash執行日志等。這個(gè)采集器主要包括兩種:ebpf-net和ebpf-bash:
ebpf 網(wǎng):
數據類(lèi)別:網(wǎng)絡(luò )
完整的解決方案:面向開(kāi)源軟件的自動(dòng)化漏洞數據采集與處理技術(shù)研究
漏洞數據分散在數百個(gè)資源中,數據碎片化、無(wú)格式,導致采集不便、處理復雜。然而,人工構建的漏洞數據集樣本類(lèi)型簡(jiǎn)單、特征單一,難以支撐真實(shí)軟件漏洞檢測的研究。因此,軟件安全領(lǐng)域缺乏大規模、真實(shí)、有效的漏洞數據集。針對這一問(wèn)題,本文提出了一種開(kāi)源軟件漏洞數據自動(dòng)化采集及處理系統,能夠自動(dòng)實(shí)現來(lái)自多源平臺的采集補丁文件,進(jìn)行冗余處理和一致性處理。得到一個(gè)縮減的數據集,進(jìn)一步生成大量的漏洞樣本。與現有研究相比,本文構建的系統可以采集更多源平臺的漏洞數據,漏洞數據更豐富,樣本質(zhì)量更高。通過(guò)深度學(xué)習漏洞檢測實(shí)驗證明,本文在數據集上訓練的模型在實(shí)際軟件漏洞檢測中更為有效。
該成果已在實(shí)驗室github組織下開(kāi)源,相關(guān)內容請訪(fǎng)問(wèn)。
背景和動(dòng)機
在軟件安全領(lǐng)域,漏洞檢測技術(shù)是一個(gè)具有挑戰性的問(wèn)題。為了減少人工參與,提高漏洞的檢測規模和檢測速度,基于深度學(xué)習的漏洞檢測模型應運而生。然而,漏洞檢測領(lǐng)域缺乏大規模的、真實(shí)的漏洞數據集。一方面,目前公開(kāi)的人工構建的數據集,如SARD數據集,只能作為學(xué)術(shù)研究的對象,對真實(shí)漏洞的研究輔助相對有限。漏洞檢測不是很有效。另一方面,漏洞數據分散在數百個(gè)資源上,沒(méi)有統一的訪(fǎng)問(wèn)渠道,而且這些數據是碎片化的、無(wú)格式的,這給數據采集和處理帶來(lái)了挑戰。此外,不同來(lái)源的漏洞數據質(zhì)量參差不齊,其中一些是安全缺陷,不一定是漏洞補丁。傳統的采集方法依賴(lài)安全專(zhuān)家通過(guò)人工分析進(jìn)行過(guò)濾,耗時(shí)耗力、效率低、成本高。為了解決這些問(wèn)題,本文構建了漏洞數據自動(dòng)化采集處理系統,旨在總結漏洞數據的分布規律和內容特征,突破漏洞數據準確提取等關(guān)鍵點(diǎn)。自動(dòng)過(guò)濾漏洞補丁鏈接。技術(shù),解決自動(dòng)化問(wèn)題采集和多源漏洞補丁采集 大數據環(huán)境下海量異構的漏洞信息,從而實(shí)現構建大規模、高質(zhì)量的漏洞數據集,為深度學(xué)習漏洞檢測提供有效的訓練數據,提高模型檢測精度。設計與實(shí)現如圖1所示。系統主要有三個(gè)模塊: 1)Data采集模塊,輸入為美國國家漏洞數據庫NVD和一般漏洞,輸出為漏洞信息和補丁文件;2)數據處理模塊,輸入為多源采集的補丁文件,輸出為處理后的簡(jiǎn)化補丁庫;3)數據生成模塊,輸入為補丁庫和上一步輸出的開(kāi)源項目的源代碼,
圖 1 系統架構圖
在data采集模塊中,我們對權威漏洞庫NVD的數據進(jìn)行解析提取,得到結構化的漏洞屬性信息。進(jìn)一步系統分析研究主流開(kāi)源軟件的漏洞參考鏈接,找出存在漏洞的平臺鏈接,獲取不同安全發(fā)布平臺的漏洞補丁文件,從而獲取漏洞樣本,為深度學(xué)習漏洞檢測提供數據支持研究。. 我們提出了一種基于多源補丁的數據自動(dòng)化采集 模型,通過(guò)三種方法自動(dòng)化采集補丁。首先是從補丁的安全漏洞公告平臺獲取補丁,軟件廠(chǎng)商自己的漏洞公告平臺,和代碼管理倉庫。在對數百個(gè)補丁發(fā)布平臺進(jìn)行系統分析總結后,總結出20多種補丁自動(dòng)化。采集網(wǎng)站,如圖2。二是通過(guò)“CVE”過(guò)濾GitHub的歷史修改Commits " 關(guān)鍵詞,查找CVE的修改記錄,自動(dòng)過(guò)濾歷史修改。三是在bug追蹤平臺Bugzilla的NVD Reference中搜索與CVE匹配的bugid,得到對應的bug修復文件或補丁。
圖2 補丁源平臺
在數據處理模塊中,我們系統地分析了多源補丁的結構和格式,總結了標準的補丁文件結構和內容信息,并對通過(guò)多種采集方法得到的補丁文件進(jìn)行了合并和去冗余。相同軟件版本冗余如圖3,不同版本軟件冗余如圖4。我們提出了一套基于多種信息的補丁有效性評估機制,并結合提取的漏洞文件名,函數名和補丁源平臺,判斷補丁文件和漏洞的相關(guān)性。如果補丁是直接針對漏洞功能的補丁,則認為是最準確的類(lèi)型1;如果補丁是針對漏洞文件的補丁,它被認為是下一個(gè)準確的類(lèi)型2;如果補丁無(wú)法判斷是打漏洞函數還是漏洞文件,則可以判斷補丁是針對CVE的,則為T(mén)ype 3;如果不能通過(guò)現有信息直接判斷,需要進(jìn)一步人工處理,則暫按第4類(lèi)處理。
圖 3 相同軟件版本的補丁冗余
圖 4 不同軟件版本的補丁冗余
在數據生成模塊中,我們將補丁文件與代碼庫進(jìn)行匹配,以獲取函數級別和文件級別的細粒度漏洞樣本。由于源代碼漏洞數據集均為線(xiàn)性文本形式,無(wú)法反映代碼程序的控制依賴(lài)信息和層次結構信息,缺乏程序語(yǔ)義與漏洞特征的關(guān)系,難以獲得準確的語(yǔ)法結構信息通過(guò)進(jìn)一步分析。具有更多語(yǔ)義信息的中間語(yǔ)言形式的漏洞數據可以提供更全面、更直接的代碼表示,提高漏洞檢測模型的檢測能力和準確性。本模塊搭建各版本主流軟件的編譯環(huán)境,查找編譯漏洞文件所需的頭文件、庫文件等依賴(lài)項,并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。
表 1 數據集統計
采用基于深度學(xué)習的漏洞檢測框架 SySeVR() 訓練最有效的模型 BGRU。實(shí)驗一是原創(chuàng )數據集在真實(shí)漏洞數據NVD上的檢測結果。原創(chuàng )數據集有14000個(gè)SARD程序和1591個(gè)NVD程序,包括13906個(gè)SADR易受攻擊程序(包括易受攻擊的函數和修補函數),94個(gè)非易受攻擊程序,874個(gè)NVD易受攻擊程序,717個(gè)無(wú)bug程序。實(shí)驗2使用一個(gè)新的數據集,使用原創(chuàng )數據集中來(lái)自SARD的數據集,將部分NVD數據集替換為本文構建的6847個(gè)易受攻擊程序和6573個(gè)非易受攻擊程序,并在真實(shí)數據集上進(jìn)行測試軟件漏洞數據集 NVD。測試結果如表2所示。
表2 漏洞檢測實(shí)驗結果對比
可以看出,用系統構建的數據集訓練的模型在真實(shí)數據集的漏洞檢測方面表現更好。這體現在假陰性率和假陽(yáng)性率的降低,以及準確率、準確率和召回率的提高上。這是因為在模型訓練中加入了大量真實(shí)的軟件漏洞數據,提供了豐富的漏洞樣本,使得模型可以用于漏洞特征進(jìn)行更全面的學(xué)習。 查看全部
文章采集api 完美:Datakit,真正的統一可觀(guān)測性 Agent
隨著(zhù)云和云原生的發(fā)展,越來(lái)越多的客戶(hù)意識到“數據”的重要性,掀起了一波又一波的數據積累浪潮。
如今,國內外數據量很大采集器,但采集的能力大多是單一的。比如 Telegraf 只支持指標,Filebeat 只服務(wù)日志,OpenTelemetry 的 Collector 對非云原生組件不友好。需要大量安裝 Exporter 插件。為了實(shí)現系統的可觀(guān)察性,需要使用多個(gè)采集器,造成資源的浪費。
Datakit是目前唯一真正整合各種環(huán)境(傳統環(huán)境,云/云原生)數據統一的平臺采集,一個(gè)進(jìn)程或者Daemonset Pod就可以實(shí)現全方位的數據采集,配置體驗不錯,開(kāi)源且可擴展。本文將對Datakit相關(guān)功能進(jìn)行全面介紹。
?。―ataKit 內部架構)
多維可觀(guān)測性數據采集
Datakit 支持來(lái)自各種基礎設施和技術(shù)棧的采集 Metrics、Logs、Traces 等數據,并對這些數據進(jìn)行結構化處理。
1.實(shí)時(shí)基礎設施對象
DataKit 支持從主機、容器、k8s、進(jìn)程、云產(chǎn)品等所有基礎設施對象的實(shí)時(shí)狀態(tài),一氣呵成。例如:
(1) Datakit hostobject用于采集基本的主機信息,如硬件型號、基本資源消耗等。
?。?)進(jìn)程采集器可以監控系統中各種正在運行的進(jìn)程,獲取并分析進(jìn)程運行時(shí)的各種指標,包括內存使用率、CPU時(shí)間、進(jìn)程當前狀態(tài)、進(jìn)程監控的端口等..,并且根據進(jìn)程運行時(shí)各種指標的信息,用戶(hù)可以在觀(guān)察云中配置相關(guān)的告警,以便用戶(hù)了解進(jìn)程的狀態(tài),當進(jìn)程發(fā)生故障時(shí),故障進(jìn)程可以及時(shí)維護。
二、指標
相比Telegraf只能采集系列數據,DataKit涵蓋的數據更全面采集類(lèi)型,擁有海量技術(shù)棧指標采集能力,采集器配置更簡(jiǎn)單,數據質(zhì)量更好.
3. 日志
針對日志數據的整體可觀(guān)測性,提供了一種足夠靈活多變的信息組合方式。正因為如此,相比指標和追蹤,日志有更多的采集和處理方式,以適應不同的采集環(huán)境、架構和技術(shù)棧的場(chǎng)景。
從磁盤(pán)文件中獲取日志

這是最原創(chuàng )的日志處理方式。無(wú)論是開(kāi)發(fā)者還是傳統的日志采集方案,一般都是先將日志直接寫(xiě)入磁盤(pán)文件。寫(xiě)入磁盤(pán)文件的日志具有以下特點(diǎn):
(1) 順序寫(xiě)入:一般的日志框架可以保證日志在磁盤(pán)文件中,保持時(shí)間的序列性
自動(dòng)分片:由于磁盤(pán)日志文件是物理增量的,為了防止日志炸毀磁盤(pán),一般的日志框架會(huì )自動(dòng)進(jìn)行分片,或者通過(guò)一些外部常駐腳本來(lái)實(shí)現日志分片
(2) 基于以上特性,DataKit 只需要跟蹤這些文件的變化(即采集 最新更新),一旦寫(xiě)入日志,DataKit 就可以采集 到達,其部署也很簡(jiǎn)單,在日志采集器的conf中填寫(xiě)文件路徑(或通配符路徑)為采集即可。
通過(guò)調用環(huán)境API獲取日志
這個(gè)采集方法目前主要針對容器環(huán)境下的stdout日志。這種日志需要容器(或Kubernetes Pod)中運行的應用程序將日志輸出到stdout,然后通過(guò)Docker的日志接口,將對應的stdout的日志同步到DataKit。
遠程推送日志到 DataKit
對于遠程日志推送,主要是
(1) 開(kāi)發(fā)者直接將應用日志推送到DataKit指定的服務(wù)中。例如,Java 的 log4j 和 Python 的原生 SocketHandler 支持將日志發(fā)送到遠程服務(wù)。
(2) 第三方平臺日志訪(fǎng)問(wèn)
這種形式的特點(diǎn)是日志直接發(fā)送到DataKit,不需要把日志放在中間。
Sidecar 形式的日志采集
采集這個(gè)方法其實(shí)結合了磁盤(pán)日志采集和日志遠程推送兩種方法。具體來(lái)說(shuō)就是在用戶(hù)的Pod中添加一個(gè)兼容DataKit的Sidecar(即logfwd)。應用,采集方法如下:

4.鏈接跟蹤
DataKit目前支持多種廣泛使用的trace數據,如zipkin/jaeger/otel/skywalking/ddtrace等,只需要將對應的數據地址指向Datakit即可。
5.終端行為
DataKit支持全面采集前端行為數據,包括H5/Android/IOS/Fultter/React-native等。
RUM(Real User Monitor)采集器用于采集網(wǎng)頁(yè)或移動(dòng)設備上報的用戶(hù)訪(fǎng)問(wèn)監控數據。建議將 RUM 單獨部署在公網(wǎng)上,不要與現有服務(wù)(如 Kubernetes 集群)一起部署。因為RUM接口上的流量可能非常大,集群內部的流量會(huì )受到干擾,集群內部一些可能的資源調度機制可能會(huì )影響RUM服務(wù)的運行。
通常,生產(chǎn)環(huán)境中的js文件會(huì )經(jīng)過(guò)各種轉換和壓縮,與開(kāi)發(fā)時(shí)的源代碼有較大差異,不方便調試。如果需要在源代碼中定位錯誤,則必須使用 sourcemap 文件。
DataKit支持將js對應的sourcemap文件壓縮打包,命名為--.zip,上傳到/data/rum/,從而實(shí)現上報的錯誤指標集數據自動(dòng)轉換 error_stack_source 字段并將其附加到指標集。
6. 云原生安全
SChecker插件,絕對安全的安全檢查器,lua沙箱只讀分析,支持300+安全事件發(fā)現,用戶(hù)可以自定義自己的規則文件和lib庫。
一般來(lái)說(shuō),運維過(guò)程中一項非常重要的工作就是檢查系統、軟件、日志等一系列狀態(tài)。傳統的解決方案往往是由工程師編寫(xiě)shell(bash)腳本來(lái)執行類(lèi)似的工作,并使用一些遠程腳本來(lái)執行類(lèi)似的任務(wù)。管理工具實(shí)現集群管理。然而,這種方法實(shí)際上是非常危險的。由于系統檢查操作中權限過(guò)多的問(wèn)題,經(jīng)常以root模式運行。一旦惡意腳本被執行,后果將是災難性的。在實(shí)踐中,惡意腳本有兩種,一種是惡意命令,如rm -rf,另一種是數據竊取,如通過(guò)網(wǎng)絡(luò )IO向外部泄露數據。
因此,Security Checker 希望提供一種新型的安全腳本方法(限制命令執行、限制本地 IO、限制網(wǎng)絡(luò ) IO)來(lái)保證所有行為安全可控,Security Checker 將通過(guò)統一的網(wǎng)絡(luò )模型在日志的形式采集事件。同時(shí),Security Checker 將提供大量可更新的規則庫腳本,包括對系統、容器、網(wǎng)絡(luò )和安全的一系列檢查。scheck 是安全檢查器的縮寫(xiě)。
7、基于eBPF的網(wǎng)絡(luò )監控
DataKit eBPF 采集器 支持采集主機/進(jìn)程/容器的網(wǎng)絡(luò )層 4/7 性能和異常數據。
eBPF采集器、采集主機網(wǎng)絡(luò )TCP、UDP連接信息、Bash執行日志等。這個(gè)采集器主要包括兩種:ebpf-net和ebpf-bash:
ebpf 網(wǎng):
數據類(lèi)別:網(wǎng)絡(luò )
完整的解決方案:面向開(kāi)源軟件的自動(dòng)化漏洞數據采集與處理技術(shù)研究
漏洞數據分散在數百個(gè)資源中,數據碎片化、無(wú)格式,導致采集不便、處理復雜。然而,人工構建的漏洞數據集樣本類(lèi)型簡(jiǎn)單、特征單一,難以支撐真實(shí)軟件漏洞檢測的研究。因此,軟件安全領(lǐng)域缺乏大規模、真實(shí)、有效的漏洞數據集。針對這一問(wèn)題,本文提出了一種開(kāi)源軟件漏洞數據自動(dòng)化采集及處理系統,能夠自動(dòng)實(shí)現來(lái)自多源平臺的采集補丁文件,進(jìn)行冗余處理和一致性處理。得到一個(gè)縮減的數據集,進(jìn)一步生成大量的漏洞樣本。與現有研究相比,本文構建的系統可以采集更多源平臺的漏洞數據,漏洞數據更豐富,樣本質(zhì)量更高。通過(guò)深度學(xué)習漏洞檢測實(shí)驗證明,本文在數據集上訓練的模型在實(shí)際軟件漏洞檢測中更為有效。
該成果已在實(shí)驗室github組織下開(kāi)源,相關(guān)內容請訪(fǎng)問(wèn)。
背景和動(dòng)機
在軟件安全領(lǐng)域,漏洞檢測技術(shù)是一個(gè)具有挑戰性的問(wèn)題。為了減少人工參與,提高漏洞的檢測規模和檢測速度,基于深度學(xué)習的漏洞檢測模型應運而生。然而,漏洞檢測領(lǐng)域缺乏大規模的、真實(shí)的漏洞數據集。一方面,目前公開(kāi)的人工構建的數據集,如SARD數據集,只能作為學(xué)術(shù)研究的對象,對真實(shí)漏洞的研究輔助相對有限。漏洞檢測不是很有效。另一方面,漏洞數據分散在數百個(gè)資源上,沒(méi)有統一的訪(fǎng)問(wèn)渠道,而且這些數據是碎片化的、無(wú)格式的,這給數據采集和處理帶來(lái)了挑戰。此外,不同來(lái)源的漏洞數據質(zhì)量參差不齊,其中一些是安全缺陷,不一定是漏洞補丁。傳統的采集方法依賴(lài)安全專(zhuān)家通過(guò)人工分析進(jìn)行過(guò)濾,耗時(shí)耗力、效率低、成本高。為了解決這些問(wèn)題,本文構建了漏洞數據自動(dòng)化采集處理系統,旨在總結漏洞數據的分布規律和內容特征,突破漏洞數據準確提取等關(guān)鍵點(diǎn)。自動(dòng)過(guò)濾漏洞補丁鏈接。技術(shù),解決自動(dòng)化問(wèn)題采集和多源漏洞補丁采集 大數據環(huán)境下海量異構的漏洞信息,從而實(shí)現構建大規模、高質(zhì)量的漏洞數據集,為深度學(xué)習漏洞檢測提供有效的訓練數據,提高模型檢測精度。設計與實(shí)現如圖1所示。系統主要有三個(gè)模塊: 1)Data采集模塊,輸入為美國國家漏洞數據庫NVD和一般漏洞,輸出為漏洞信息和補丁文件;2)數據處理模塊,輸入為多源采集的補丁文件,輸出為處理后的簡(jiǎn)化補丁庫;3)數據生成模塊,輸入為補丁庫和上一步輸出的開(kāi)源項目的源代碼,
圖 1 系統架構圖
在data采集模塊中,我們對權威漏洞庫NVD的數據進(jìn)行解析提取,得到結構化的漏洞屬性信息。進(jìn)一步系統分析研究主流開(kāi)源軟件的漏洞參考鏈接,找出存在漏洞的平臺鏈接,獲取不同安全發(fā)布平臺的漏洞補丁文件,從而獲取漏洞樣本,為深度學(xué)習漏洞檢測提供數據支持研究。. 我們提出了一種基于多源補丁的數據自動(dòng)化采集 模型,通過(guò)三種方法自動(dòng)化采集補丁。首先是從補丁的安全漏洞公告平臺獲取補丁,軟件廠(chǎng)商自己的漏洞公告平臺,和代碼管理倉庫。在對數百個(gè)補丁發(fā)布平臺進(jìn)行系統分析總結后,總結出20多種補丁自動(dòng)化。采集網(wǎng)站,如圖2。二是通過(guò)“CVE”過(guò)濾GitHub的歷史修改Commits " 關(guān)鍵詞,查找CVE的修改記錄,自動(dòng)過(guò)濾歷史修改。三是在bug追蹤平臺Bugzilla的NVD Reference中搜索與CVE匹配的bugid,得到對應的bug修復文件或補丁。

圖2 補丁源平臺
在數據處理模塊中,我們系統地分析了多源補丁的結構和格式,總結了標準的補丁文件結構和內容信息,并對通過(guò)多種采集方法得到的補丁文件進(jìn)行了合并和去冗余。相同軟件版本冗余如圖3,不同版本軟件冗余如圖4。我們提出了一套基于多種信息的補丁有效性評估機制,并結合提取的漏洞文件名,函數名和補丁源平臺,判斷補丁文件和漏洞的相關(guān)性。如果補丁是直接針對漏洞功能的補丁,則認為是最準確的類(lèi)型1;如果補丁是針對漏洞文件的補丁,它被認為是下一個(gè)準確的類(lèi)型2;如果補丁無(wú)法判斷是打漏洞函數還是漏洞文件,則可以判斷補丁是針對CVE的,則為T(mén)ype 3;如果不能通過(guò)現有信息直接判斷,需要進(jìn)一步人工處理,則暫按第4類(lèi)處理。
圖 3 相同軟件版本的補丁冗余
圖 4 不同軟件版本的補丁冗余

在數據生成模塊中,我們將補丁文件與代碼庫進(jìn)行匹配,以獲取函數級別和文件級別的細粒度漏洞樣本。由于源代碼漏洞數據集均為線(xiàn)性文本形式,無(wú)法反映代碼程序的控制依賴(lài)信息和層次結構信息,缺乏程序語(yǔ)義與漏洞特征的關(guān)系,難以獲得準確的語(yǔ)法結構信息通過(guò)進(jìn)一步分析。具有更多語(yǔ)義信息的中間語(yǔ)言形式的漏洞數據可以提供更全面、更直接的代碼表示,提高漏洞檢測模型的檢測能力和準確性。本模塊搭建各版本主流軟件的編譯環(huán)境,查找編譯漏洞文件所需的頭文件、庫文件等依賴(lài)項,并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。并使用編譯器以中間語(yǔ)言的形式生成漏洞樣本。目前已經(jīng)對19個(gè)開(kāi)源軟件進(jìn)行了數據采集和處理,得到了有效的細粒度漏洞樣本庫。補丁庫涵蓋 4643 個(gè) CVE,收錄 8685 個(gè)補丁文件。漏洞樣本庫有6847個(gè)漏洞文件樣本、6573個(gè)無(wú)漏洞文件樣本、10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。847個(gè)漏洞文件樣本,6573個(gè)無(wú)漏洞文件樣本,10412個(gè)漏洞函數/非漏洞函數程序樣本。統計結果見(jiàn)表1。
表 1 數據集統計
采用基于深度學(xué)習的漏洞檢測框架 SySeVR() 訓練最有效的模型 BGRU。實(shí)驗一是原創(chuàng )數據集在真實(shí)漏洞數據NVD上的檢測結果。原創(chuàng )數據集有14000個(gè)SARD程序和1591個(gè)NVD程序,包括13906個(gè)SADR易受攻擊程序(包括易受攻擊的函數和修補函數),94個(gè)非易受攻擊程序,874個(gè)NVD易受攻擊程序,717個(gè)無(wú)bug程序。實(shí)驗2使用一個(gè)新的數據集,使用原創(chuàng )數據集中來(lái)自SARD的數據集,將部分NVD數據集替換為本文構建的6847個(gè)易受攻擊程序和6573個(gè)非易受攻擊程序,并在真實(shí)數據集上進(jìn)行測試軟件漏洞數據集 NVD。測試結果如表2所示。
表2 漏洞檢測實(shí)驗結果對比
可以看出,用系統構建的數據集訓練的模型在真實(shí)數據集的漏洞檢測方面表現更好。這體現在假陰性率和假陽(yáng)性率的降低,以及準確率、準確率和召回率的提高上。這是因為在模型訓練中加入了大量真實(shí)的軟件漏洞數據,提供了豐富的漏洞樣本,使得模型可以用于漏洞特征進(jìn)行更全面的學(xué)習。
實(shí)用文章:【php 帶cookie采集某頁(yè)面】的更多相關(guān)文章
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2022-10-11 21:20
如果在基于 vue 的 webpack 基架開(kāi)發(fā)中使用代理轉發(fā),結果瀏覽器在沒(méi)有 cookie 的情況下發(fā)出請求,導致登錄始終使會(huì )話(huà)失敗,該怎么辦?
環(huán)境:有2個(gè)業(yè)務(wù)接口需要轉發(fā)到82臺服務(wù)器:/用戶(hù)/getCode.do.do./user/doLogin.do現象:使用以上兩個(gè)接口實(shí)現用戶(hù)登錄功能,首先顯示登錄頁(yè)面,調用:/user/getCode.do獲取驗證碼,然后在用戶(hù)界面中輸入用戶(hù)名。點(diǎn)擊登錄后調用密碼和驗證碼: /用戶(hù)/do登錄接口實(shí)現登錄.結果: /用戶(hù)/do登錄后臺始終找不到驗證碼,因為瀏覽器沒(méi)有將 JSE 放入 cookie 中...
教程:python爬蟲(chóng)之 requests實(shí)戰之網(wǎng)頁(yè)采集器
今天繼續我們的爬蟲(chóng)學(xué)習,采集器學(xué)習一個(gè)請求實(shí)用的網(wǎng)頁(yè):以搜狗主頁(yè)為例
代碼的設計步驟:
我們遵循以下設計過(guò)程來(lái)開(kāi)發(fā)Web采集器:
?。?) UA偽裝:將相應的用戶(hù)代理封裝到字典中
在這里,添加了一些知識:
UA:用戶(hù)代理(請求運營(yíng)商的身份)
?。?。
UA檢測:服務(wù)器網(wǎng)站門(mén)戶(hù)檢測到相應請求載體的身份,如果是瀏覽器,則為正常請求,否則很可能拒絕請求
UA偽裝:使爬蟲(chóng)的請求向量身份偽裝成某個(gè)瀏覽器
?。?) 發(fā)起請求,get 模式返回響應對象
?。?)獲取響應數據,文本以字符串的形式返回響應數據
?。?) 數據的持久存儲
下面,附加“我的代碼”部分:
import requests
'''
網(wǎng)頁(yè)采集器
UA:User-Agent(請求載體的身份標識)
UA檢測:門(mén)戶(hù)網(wǎng)站的服務(wù)器會(huì )檢測對應請求載體的身份標識,如果是瀏覽器則說(shuō)明是一個(gè)正常請求,否則很有可能拒絕該請求
UA偽裝:讓爬蟲(chóng)對應的請求載體身份標識偽裝成某一個(gè)瀏覽器
'''
if __name__ == "__main__":
#UA偽裝:將對應的User-Agent封裝到一個(gè)字典內
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.發(fā)起請求,get方式會(huì )返回一個(gè)響應對象
#處理url攜帶的參數:封裝到字典內
kw = input('enter a word:')
param = {
'query':kw
}
#對指定的url發(fā)起的請求對應的url是攜帶參數的,并且請求過(guò)程中處理了參數
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詳細代碼為:
化妝品生產(chǎn)許可信息管理系統服務(wù)平臺
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部許可證】【業(yè)務(wù)辦理】
許可證編號
企業(yè)名稱(chēng)
社會(huì )信用代碼
所屬省份
生產(chǎn)類(lèi)別
<p>
發(fā)證日期
企業(yè)名稱(chēng)
許可證編號
發(fā)證機關(guān) 有效期至
本站由國家藥品監督管理局主辦
版權所有 未經(jīng)許可禁止轉載或建立鏡像 Copyright © NMPA All Rights Reserved
</p> 查看全部
實(shí)用文章:【php 帶cookie采集某頁(yè)面】的更多相關(guān)文章

如果在基于 vue 的 webpack 基架開(kāi)發(fā)中使用代理轉發(fā),結果瀏覽器在沒(méi)有 cookie 的情況下發(fā)出請求,導致登錄始終使會(huì )話(huà)失敗,該怎么辦?

環(huán)境:有2個(gè)業(yè)務(wù)接口需要轉發(fā)到82臺服務(wù)器:/用戶(hù)/getCode.do.do./user/doLogin.do現象:使用以上兩個(gè)接口實(shí)現用戶(hù)登錄功能,首先顯示登錄頁(yè)面,調用:/user/getCode.do獲取驗證碼,然后在用戶(hù)界面中輸入用戶(hù)名。點(diǎn)擊登錄后調用密碼和驗證碼: /用戶(hù)/do登錄接口實(shí)現登錄.結果: /用戶(hù)/do登錄后臺始終找不到驗證碼,因為瀏覽器沒(méi)有將 JSE 放入 cookie 中...
教程:python爬蟲(chóng)之 requests實(shí)戰之網(wǎng)頁(yè)采集器
今天繼續我們的爬蟲(chóng)學(xué)習,采集器學(xué)習一個(gè)請求實(shí)用的網(wǎng)頁(yè):以搜狗主頁(yè)為例
代碼的設計步驟:
我們遵循以下設計過(guò)程來(lái)開(kāi)發(fā)Web采集器:
?。?) UA偽裝:將相應的用戶(hù)代理封裝到字典中
在這里,添加了一些知識:
UA:用戶(hù)代理(請求運營(yíng)商的身份)
?。?。
UA檢測:服務(wù)器網(wǎng)站門(mén)戶(hù)檢測到相應請求載體的身份,如果是瀏覽器,則為正常請求,否則很可能拒絕請求
UA偽裝:使爬蟲(chóng)的請求向量身份偽裝成某個(gè)瀏覽器
?。?) 發(fā)起請求,get 模式返回響應對象
?。?)獲取響應數據,文本以字符串的形式返回響應數據
?。?) 數據的持久存儲
下面,附加“我的代碼”部分:
import requests
'''
網(wǎng)頁(yè)采集器
UA:User-Agent(請求載體的身份標識)
UA檢測:門(mén)戶(hù)網(wǎng)站的服務(wù)器會(huì )檢測對應請求載體的身份標識,如果是瀏覽器則說(shuō)明是一個(gè)正常請求,否則很有可能拒絕該請求
UA偽裝:讓爬蟲(chóng)對應的請求載體身份標識偽裝成某一個(gè)瀏覽器
'''
if __name__ == "__main__":
#UA偽裝:將對應的User-Agent封裝到一個(gè)字典內
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.發(fā)起請求,get方式會(huì )返回一個(gè)響應對象
#處理url攜帶的參數:封裝到字典內
kw = input('enter a word:')
param = {
'query':kw
}
#對指定的url發(fā)起的請求對應的url是攜帶參數的,并且請求過(guò)程中處理了參數
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詳細代碼為:
化妝品生產(chǎn)許可信息管理系統服務(wù)平臺
var G = {"baseUrl":"http://scxk.nmpa.gov.cn:81/xk/"};
【全部許可證】【業(yè)務(wù)辦理】
許可證編號
企業(yè)名稱(chēng)
社會(huì )信用代碼
所屬省份
生產(chǎn)類(lèi)別
<p>

發(fā)證日期
企業(yè)名稱(chēng)
許可證編號
發(fā)證機關(guān) 有效期至
本站由國家藥品監督管理局主辦
版權所有 未經(jīng)許可禁止轉載或建立鏡像 Copyright © NMPA All Rights Reserved
</p>
干貨:wordpress子比主題免費文章批量翻譯工具
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 74 次瀏覽 ? 2022-10-10 18:23
wordpress子主題文章翻譯可以讓我們批量對需要翻譯的文章進(jìn)行中英文翻譯,一鍵自動(dòng)發(fā)布到我們對應的欄目。翻譯不僅支持中英文,還支持日文、泰文、阿拉伯文、德文等多種語(yǔ)言。翻譯插件對接百度翻譯、有道翻譯、谷歌翻譯等API。
wordpress子主題文章翻譯插件對接多家大廠(chǎng)翻譯接口,自帶翻譯接口。無(wú)論是文章批量翻譯還是語(yǔ)言之間的來(lái)回翻譯,都可以一鍵點(diǎn)擊,批量操作。WordPress子主題文章翻譯插件支持各類(lèi)cms,不僅WordPress、zblog、易友cms等各類(lèi)cms都可以輕松對接。
WordPress子主題文章翻譯插件支持全網(wǎng)內容采集、批量翻譯、文章偽原創(chuàng )發(fā)布。想象一下使用一個(gè)wordpress子主題文章翻譯插件,導入一個(gè)關(guān)鍵詞列表,然后讓AI翻譯寫(xiě)出我們網(wǎng)站需要的原創(chuàng )文章。
搜索引擎正在識別由人工智能翻譯編寫(xiě)的內容。這包括由人工智能或機器學(xué)習生成的內容。搜索引擎政策更新是為了打擊那些使用人工智能以欺騙搜索引擎算法的方式翻譯書(shū)面內容的人。這種類(lèi)型的內容通常被設計為在搜索結果中排名靠前,但與手工翻譯的內容質(zhì)量不同。
搜索引擎表示,在確定內容是合成的還是操縱的時(shí),它會(huì )考慮許多因素。這包括使用“旋轉”技術(shù)生成相同內容的多個(gè)版本,以及使用人工智能生成旨在欺騙搜索引擎算法的文本??赡軙?huì )對發(fā)現發(fā)布此類(lèi)內容的 網(wǎng)站 采取行動(dòng),包括從搜索結果中刪除。這是打擊那些使用人工智能玩系統的人的重要一步。
毫無(wú)疑問(wèn),人工智能 (AI) 正在徹底改變內容寫(xiě)作領(lǐng)域。然而,人工智能書(shū)面內容的使用增加也可能產(chǎn)生潛在的問(wèn)題。一個(gè)潛在的問(wèn)題是,由 AI 翻譯人員編寫(xiě)的內容可能會(huì )變得過(guò)于公式化和重復。隨著(zhù)人工智能算法變得越來(lái)越復雜,它們將能夠更有效地識別數據中的模式。隨著(zhù)算法識別和復制成功的模式,這可能導致由人工智能翻譯編寫(xiě)的內容變得越來(lái)越公式化。另一個(gè)潛在問(wèn)題是 AI 翻譯人員編寫(xiě)的內容可能是非個(gè)人的。
隨著(zhù) AI 越來(lái)越多地參與到內容翻譯寫(xiě)作過(guò)程中,WordPress 字幕可能會(huì )失去人類(lèi)翻譯寫(xiě)作的溫暖和個(gè)性。最后,人工智能翻譯的內容有可能被用來(lái)操縱公眾輿論。隨著(zhù)人工智能在理解和復制人類(lèi)情感方面變得更好,它可以用來(lái)翻譯為引發(fā)某種情感反應而編寫(xiě)的內容。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,WordPress 子主題越來(lái)越多地使用人工智能來(lái)翻譯可能會(huì )產(chǎn)生潛在問(wèn)題的內容。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果??傮w而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。
技術(shù)文章:谷歌seo特點(diǎn)技巧(網(wǎng)站google搜索優(yōu)化)
如何優(yōu)化谷歌排名?谷歌排名優(yōu)化有哪些網(wǎng)站要求?
中國是外貿出口大國。最近有很多出口企業(yè)問(wèn)我們對谷歌排名優(yōu)化有什么要求?什么是谷歌排名優(yōu)化?哪個(gè)品牌最適合谷歌排名優(yōu)化?下面小編將為您解答這個(gè)問(wèn)題:
疫情影響下,外貿企業(yè)迎難而上,求創(chuàng )新求變,數千家傳統外貿企業(yè)伸出援手,提質(zhì)增效。在客戶(hù)開(kāi)發(fā)和營(yíng)銷(xiāo)方面,外貿企業(yè)利用大數據精準營(yíng)銷(xiāo)工具、B2B平臺、線(xiàn)上展會(huì )等方式,開(kāi)發(fā)、推廣、引流客戶(hù),加速數字化轉型。
優(yōu)易華擁有超過(guò)15年的互聯(lián)網(wǎng)營(yíng)銷(xiāo)經(jīng)驗,讓優(yōu)易華擁有豐富的海外數字營(yíng)銷(xiāo)經(jīng)驗,積累了大量的營(yíng)銷(xiāo)資源。該公司是谷歌認證的合作伙伴,谷歌搜索引擎優(yōu)化是主要項目之一。
谷歌排名優(yōu)化說(shuō)明及詳情:
1、谷歌排名優(yōu)化的最大優(yōu)勢是沒(méi)有各個(gè)引擎的獨立性。即使你只要求優(yōu)化百度,結果在百度、谷歌等各大搜索引擎中都會(huì )有不錯的排名,而SEO只能在一個(gè)搜索引擎中使用。好的排名顯示在網(wǎng)站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都會(huì )有好的排名,從而減少投入和投入。
2. 對于每個(gè)類(lèi)別,列出相關(guān)的 文章。下面我們用問(wèn)答的方式來(lái)說(shuō)明什么是谷歌排名優(yōu)化?如何學(xué)習谷歌排名優(yōu)化?如何進(jìn)行谷歌排名優(yōu)化?將每一頁(yè)的相關(guān)問(wèn)題歸納為兩類(lèi):?jiǎn)?wèn)題大師關(guān)鍵詞的集合列表,以及類(lèi)似問(wèn)題的列表。從根本上說(shuō),它清理了所有相關(guān)的關(guān)鍵詞,讓頁(yè)面有更好的用戶(hù)體驗,讓谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方顯示類(lèi)似的文章,有利于谷歌排名優(yōu)化和推廣,可以打開(kāi)。另外,文章發(fā)布后,相關(guān)的關(guān)鍵詞也可以補充評論功能。與谷歌不同,百度的排名規則以PR值作為明確的標準。但是百度也有一套算法對每個(gè)網(wǎng)站進(jìn)行加權,因為沒(méi)有標準,就沒(méi)有排名的依據。這個(gè)事實(shí)是非常真實(shí)的。因此,在SEO實(shí)踐中,網(wǎng)站獲得更高的PR值,是每個(gè)SEO人追求的目標。但是要獲得高PR值,需要一些高質(zhì)量的反向鏈接或者足夠多的反向鏈接。
4、提高網(wǎng)站的曝光度。如果一個(gè)網(wǎng)站做SEO,你在搜索引擎中的排名就會(huì )上升,更多的人會(huì )點(diǎn)擊你的網(wǎng)站。而且你會(huì )受益于不止一個(gè)搜索引擎,百度、谷歌、雅虎、搜狗等各種搜索引擎一般都有數據展示。作為一名員工,編寫(xiě)觀(guān)眾喜歡的內容并不難。加入谷歌也是考慮這些因素的時(shí)候。一開(kāi)始可能會(huì )很麻煩,但有了這些 SEO 技巧,你很快就會(huì )得到意想不到的結果。
如何優(yōu)化谷歌排名
一:隱藏文字/隱藏鏈接
一般指網(wǎng)頁(yè)專(zhuān)為搜索引擎設計,但普通訪(fǎng)問(wèn)者看不到的文字內容或鏈接。在各種隱藏技術(shù)中,最常見(jiàn)的是將文本或鏈接文本的字體顏色設置為與背景顏色相同或非常接近。
不可見(jiàn)/隱藏文本
目的是在不影響網(wǎng)站美觀(guān)的情況下,增加收錄大量關(guān)鍵詞的頁(yè)面的關(guān)鍵詞相關(guān)性分數,從而提高搜索引擎排名。
不可見(jiàn)/隱藏鏈接
它旨在通過(guò)在不影響 網(wǎng)站 的美觀(guān)性的情況下在其他頁(yè)面上添加指向目標優(yōu)化頁(yè)面的不可見(jiàn)鏈接來(lái)提高鏈接分數,從而提高搜索引擎排名。
大多數搜索引擎現在檢測到隱藏的技術(shù)并認為它們作弊。結果,收錄隱藏文本的網(wǎng)頁(yè)面臨被搜索引擎降級甚至從列表中刪除的懲罰。雖然不乏 網(wǎng)站 Google 員工利用隱形技術(shù)僥幸成功,但大多數人仍然認為不值得冒險。實(shí)際上,通過(guò)添加可視化文本內容并保證一定的關(guān)鍵詞密度,也可以達到同樣的優(yōu)化效果。
2:頁(yè)面與谷歌描述不符
通常發(fā)生在一個(gè)網(wǎng)站被提交給搜索引擎,而網(wǎng)站在網(wǎng)站為收錄之后被另一個(gè)頁(yè)面替換?!罢T餌-&-切換”就屬于這種作弊——創(chuàng )建優(yōu)化頁(yè)面和普通頁(yè)面,然后將優(yōu)化頁(yè)面提交給搜索引擎,當優(yōu)化頁(yè)面被搜索引擎收錄替換它與普通頁(yè)面。
三:誤導或重復關(guān)鍵詞
誤導關(guān)鍵詞(誤導性詞語(yǔ))
在與頁(yè)面無(wú)關(guān)的頁(yè)面中使用誤導性的 關(guān)鍵詞 來(lái)吸引訪(fǎng)問(wèn)者網(wǎng)站 訪(fǎng)問(wèn)該主題。顯然,這些所謂的 關(guān)鍵詞 與這個(gè)頁(yè)面無(wú)關(guān)。這種做法嚴重影響了搜索引擎提供的結果的相關(guān)性和客觀(guān)性,被搜索引擎所憎惡。
重復 關(guān)鍵詞(重復的單??詞)
這種作弊技術(shù)也稱(chēng)為“關(guān)鍵詞Keyword Stuffing”,利用搜索引擎對關(guān)鍵詞出現在網(wǎng)頁(yè)正文和標題中的高度關(guān)注,進(jìn)行關(guān)鍵詞不合理(過(guò)度)重復。其他類(lèi)似的做法包括在 HTML 元標記中填充關(guān)鍵字或使用多個(gè)關(guān)鍵字元標記來(lái)增加 關(guān)鍵詞 的相關(guān)性。這種技術(shù)很容易被搜索引擎檢測到并受到相應的懲罰。
四:隱形頁(yè)面
對實(shí)際訪(fǎng)問(wèn)者或搜索引擎的任何一方隱藏真實(shí)的 網(wǎng)站 內容,以便向搜索引擎提供非真實(shí)的 SEO 友好內容以提高排名。
五:欺騙性重定向
指快速將用戶(hù)訪(fǎng)問(wèn)的第一頁(yè)(著(zhù)陸頁(yè))重定向到內容完全不同的頁(yè)面。
《影子領(lǐng)域》
這是最常見(jiàn)的欺騙性重定向技術(shù),欺騙性地將用戶(hù)重定向到另一個(gè) 網(wǎng)站 或頁(yè)面。一般是通過(guò)使用HTML刷新標記(Meta Refresh)來(lái)實(shí)現的。大多數搜索引擎不會(huì )索引使用此徽標的頁(yè)面。如果您使用刷新標志來(lái)檢測瀏覽器或分辨率,則使用 Javascript 并最大化重定向時(shí)間。如果必須使用重定向功能,請確保刷新周期不少于 10 秒。
另一種情況是當用戶(hù)打開(kāi)一個(gè)網(wǎng)站時(shí),網(wǎng)站聲稱(chēng)自己的網(wǎng)站已經(jīng)移到了一個(gè)新的域名,并要求用戶(hù)點(diǎn)擊新的域名鏈接輸入 網(wǎng)站。但是當用戶(hù)進(jìn)去的時(shí)候,他發(fā)現這個(gè)鏈接是一個(gè)“附屬”鏈接。這也是一個(gè)欺騙性的重定向。
六:門(mén)口頁(yè)
也稱(chēng)為“橋接/門(mén)戶(hù)/跳轉/入口頁(yè)面”。它是針對某些關(guān)鍵字的特制頁(yè)面,專(zhuān)門(mén)為搜索引擎設計的,目的是提高特定關(guān)鍵詞在搜索引擎中的排名。目的豐富的關(guān)鍵詞域名被重定向到另一個(gè)域名的真實(shí)網(wǎng)站。搜索引擎蜘蛛傾向于忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面。
七:復制的網(wǎng)站或網(wǎng)頁(yè)
最常見(jiàn)的是鏡像站點(diǎn)(Mirror Sites)。通過(guò)復制 網(wǎng)站 或頁(yè)面的內容并分配不同的域名和服務(wù)器,它可以欺騙搜索引擎多次索引同一站點(diǎn)或同一頁(yè)面。大多數搜索引擎現在提供能夠檢測鏡像站點(diǎn)的適當過(guò)濾系統。找到鏡像站點(diǎn)后,源站點(diǎn)和鏡像站點(diǎn)都會(huì )從索引數據庫中刪除。
八:作弊鏈接技術(shù)/惡意鏈接(Link Spamming)
典型的作弊鏈接技術(shù)包括:
鏈接農場(chǎng)
批量鏈接交換程序
交叉鏈接
“鏈接工廠(chǎng)”(也稱(chēng)為“海量鏈接機制”)是指由大量交叉鏈接的網(wǎng)頁(yè)組成的網(wǎng)絡(luò )系統。這些網(wǎng)頁(yè)可能來(lái)自同一個(gè)域或多個(gè)不同的域,甚至來(lái)自不同的服務(wù)器。站點(diǎn)加入這樣的“鏈接工廠(chǎng)”后,一方面可以從系統中的所有網(wǎng)頁(yè)獲取鏈接,同時(shí)還需要“捐贈”自己的鏈接作為交換,從而提高通過(guò)這種方法進(jìn)行鏈接評分,從而達到干預鏈接評分。的目標。它們現在很容易被搜索引擎發(fā)現。一經(jīng)發(fā)現,無(wú)論有意還是無(wú)意,“鏈接工廠(chǎng)”中的所有網(wǎng)站都是千絲萬(wàn)縷的鏈接。
九:其他
日志作弊
具有較高頁(yè)面排名的網(wǎng)站通過(guò)對其進(jìn)行大量虛假點(diǎn)擊來(lái)獲取其傳入鏈接,以便在這些網(wǎng)站的頂級引薦來(lái)源日志中列出。Google 知道這種行為,并將對使用此路由獲取傳入鏈接的網(wǎng)站采取適當的措施。
門(mén)口域
目標豐富的關(guān)鍵詞 域旨在提高特定關(guān)鍵詞 在搜索引擎中的排名,然后重定向到其他域的主頁(yè)。由于搜索引擎通常會(huì )忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面檢索,因此不鼓勵使用這種技術(shù)。 查看全部
干貨:wordpress子比主題免費文章批量翻譯工具
wordpress子主題文章翻譯可以讓我們批量對需要翻譯的文章進(jìn)行中英文翻譯,一鍵自動(dòng)發(fā)布到我們對應的欄目。翻譯不僅支持中英文,還支持日文、泰文、阿拉伯文、德文等多種語(yǔ)言。翻譯插件對接百度翻譯、有道翻譯、谷歌翻譯等API。
wordpress子主題文章翻譯插件對接多家大廠(chǎng)翻譯接口,自帶翻譯接口。無(wú)論是文章批量翻譯還是語(yǔ)言之間的來(lái)回翻譯,都可以一鍵點(diǎn)擊,批量操作。WordPress子主題文章翻譯插件支持各類(lèi)cms,不僅WordPress、zblog、易友cms等各類(lèi)cms都可以輕松對接。
WordPress子主題文章翻譯插件支持全網(wǎng)內容采集、批量翻譯、文章偽原創(chuàng )發(fā)布。想象一下使用一個(gè)wordpress子主題文章翻譯插件,導入一個(gè)關(guān)鍵詞列表,然后讓AI翻譯寫(xiě)出我們網(wǎng)站需要的原創(chuàng )文章。

搜索引擎正在識別由人工智能翻譯編寫(xiě)的內容。這包括由人工智能或機器學(xué)習生成的內容。搜索引擎政策更新是為了打擊那些使用人工智能以欺騙搜索引擎算法的方式翻譯書(shū)面內容的人。這種類(lèi)型的內容通常被設計為在搜索結果中排名靠前,但與手工翻譯的內容質(zhì)量不同。
搜索引擎表示,在確定內容是合成的還是操縱的時(shí),它會(huì )考慮許多因素。這包括使用“旋轉”技術(shù)生成相同內容的多個(gè)版本,以及使用人工智能生成旨在欺騙搜索引擎算法的文本??赡軙?huì )對發(fā)現發(fā)布此類(lèi)內容的 網(wǎng)站 采取行動(dòng),包括從搜索結果中刪除。這是打擊那些使用人工智能玩系統的人的重要一步。
毫無(wú)疑問(wèn),人工智能 (AI) 正在徹底改變內容寫(xiě)作領(lǐng)域。然而,人工智能書(shū)面內容的使用增加也可能產(chǎn)生潛在的問(wèn)題。一個(gè)潛在的問(wèn)題是,由 AI 翻譯人員編寫(xiě)的內容可能會(huì )變得過(guò)于公式化和重復。隨著(zhù)人工智能算法變得越來(lái)越復雜,它們將能夠更有效地識別數據中的模式。隨著(zhù)算法識別和復制成功的模式,這可能導致由人工智能翻譯編寫(xiě)的內容變得越來(lái)越公式化。另一個(gè)潛在問(wèn)題是 AI 翻譯人員編寫(xiě)的內容可能是非個(gè)人的。

隨著(zhù) AI 越來(lái)越多地參與到內容翻譯寫(xiě)作過(guò)程中,WordPress 字幕可能會(huì )失去人類(lèi)翻譯寫(xiě)作的溫暖和個(gè)性。最后,人工智能翻譯的內容有可能被用來(lái)操縱公眾輿論。隨著(zhù)人工智能在理解和復制人類(lèi)情感方面變得更好,它可以用來(lái)翻譯為引發(fā)某種情感反應而編寫(xiě)的內容。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果。
總體而言,WordPress 子主題越來(lái)越多地使用人工智能來(lái)翻譯可能會(huì )產(chǎn)生潛在問(wèn)題的內容。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。這可能被用來(lái)大規模操縱公眾輿論,并帶來(lái)潛在的危險后果??傮w而言,越來(lái)越多地使用人工智能來(lái)翻譯書(shū)面內容可能會(huì )產(chǎn)生潛在的問(wèn)題。然而,同樣重要的是要記住,人工智能有可能徹底改變內容寫(xiě)作領(lǐng)域,而且好處可能大于風(fēng)險。
技術(shù)文章:谷歌seo特點(diǎn)技巧(網(wǎng)站google搜索優(yōu)化)
如何優(yōu)化谷歌排名?谷歌排名優(yōu)化有哪些網(wǎng)站要求?
中國是外貿出口大國。最近有很多出口企業(yè)問(wèn)我們對谷歌排名優(yōu)化有什么要求?什么是谷歌排名優(yōu)化?哪個(gè)品牌最適合谷歌排名優(yōu)化?下面小編將為您解答這個(gè)問(wèn)題:
疫情影響下,外貿企業(yè)迎難而上,求創(chuàng )新求變,數千家傳統外貿企業(yè)伸出援手,提質(zhì)增效。在客戶(hù)開(kāi)發(fā)和營(yíng)銷(xiāo)方面,外貿企業(yè)利用大數據精準營(yíng)銷(xiāo)工具、B2B平臺、線(xiàn)上展會(huì )等方式,開(kāi)發(fā)、推廣、引流客戶(hù),加速數字化轉型。
優(yōu)易華擁有超過(guò)15年的互聯(lián)網(wǎng)營(yíng)銷(xiāo)經(jīng)驗,讓優(yōu)易華擁有豐富的海外數字營(yíng)銷(xiāo)經(jīng)驗,積累了大量的營(yíng)銷(xiāo)資源。該公司是谷歌認證的合作伙伴,谷歌搜索引擎優(yōu)化是主要項目之一。
谷歌排名優(yōu)化說(shuō)明及詳情:
1、谷歌排名優(yōu)化的最大優(yōu)勢是沒(méi)有各個(gè)引擎的獨立性。即使你只要求優(yōu)化百度,結果在百度、谷歌等各大搜索引擎中都會(huì )有不錯的排名,而SEO只能在一個(gè)搜索引擎中使用。好的排名顯示在網(wǎng)站上,比如谷歌、百度、360、搜狗、搜搜等搜索引擎都會(huì )有好的排名,從而減少投入和投入。
2. 對于每個(gè)類(lèi)別,列出相關(guān)的 文章。下面我們用問(wèn)答的方式來(lái)說(shuō)明什么是谷歌排名優(yōu)化?如何學(xué)習谷歌排名優(yōu)化?如何進(jìn)行谷歌排名優(yōu)化?將每一頁(yè)的相關(guān)問(wèn)題歸納為兩類(lèi):?jiǎn)?wèn)題大師關(guān)鍵詞的集合列表,以及類(lèi)似問(wèn)題的列表。從根本上說(shuō),它清理了所有相關(guān)的關(guān)鍵詞,讓頁(yè)面有更好的用戶(hù)體驗,讓谷歌知道它在谷歌排名中有多好。
3.博客的其他部分可以在下方顯示類(lèi)似的文章,有利于谷歌排名優(yōu)化和推廣,可以打開(kāi)。另外,文章發(fā)布后,相關(guān)的關(guān)鍵詞也可以補充評論功能。與谷歌不同,百度的排名規則以PR值作為明確的標準。但是百度也有一套算法對每個(gè)網(wǎng)站進(jìn)行加權,因為沒(méi)有標準,就沒(méi)有排名的依據。這個(gè)事實(shí)是非常真實(shí)的。因此,在SEO實(shí)踐中,網(wǎng)站獲得更高的PR值,是每個(gè)SEO人追求的目標。但是要獲得高PR值,需要一些高質(zhì)量的反向鏈接或者足夠多的反向鏈接。
4、提高網(wǎng)站的曝光度。如果一個(gè)網(wǎng)站做SEO,你在搜索引擎中的排名就會(huì )上升,更多的人會(huì )點(diǎn)擊你的網(wǎng)站。而且你會(huì )受益于不止一個(gè)搜索引擎,百度、谷歌、雅虎、搜狗等各種搜索引擎一般都有數據展示。作為一名員工,編寫(xiě)觀(guān)眾喜歡的內容并不難。加入谷歌也是考慮這些因素的時(shí)候。一開(kāi)始可能會(huì )很麻煩,但有了這些 SEO 技巧,你很快就會(huì )得到意想不到的結果。
如何優(yōu)化谷歌排名
一:隱藏文字/隱藏鏈接
一般指網(wǎng)頁(yè)專(zhuān)為搜索引擎設計,但普通訪(fǎng)問(wèn)者看不到的文字內容或鏈接。在各種隱藏技術(shù)中,最常見(jiàn)的是將文本或鏈接文本的字體顏色設置為與背景顏色相同或非常接近。
不可見(jiàn)/隱藏文本
目的是在不影響網(wǎng)站美觀(guān)的情況下,增加收錄大量關(guān)鍵詞的頁(yè)面的關(guān)鍵詞相關(guān)性分數,從而提高搜索引擎排名。

不可見(jiàn)/隱藏鏈接
它旨在通過(guò)在不影響 網(wǎng)站 的美觀(guān)性的情況下在其他頁(yè)面上添加指向目標優(yōu)化頁(yè)面的不可見(jiàn)鏈接來(lái)提高鏈接分數,從而提高搜索引擎排名。
大多數搜索引擎現在檢測到隱藏的技術(shù)并認為它們作弊。結果,收錄隱藏文本的網(wǎng)頁(yè)面臨被搜索引擎降級甚至從列表中刪除的懲罰。雖然不乏 網(wǎng)站 Google 員工利用隱形技術(shù)僥幸成功,但大多數人仍然認為不值得冒險。實(shí)際上,通過(guò)添加可視化文本內容并保證一定的關(guān)鍵詞密度,也可以達到同樣的優(yōu)化效果。
2:頁(yè)面與谷歌描述不符
通常發(fā)生在一個(gè)網(wǎng)站被提交給搜索引擎,而網(wǎng)站在網(wǎng)站為收錄之后被另一個(gè)頁(yè)面替換?!罢T餌-&-切換”就屬于這種作弊——創(chuàng )建優(yōu)化頁(yè)面和普通頁(yè)面,然后將優(yōu)化頁(yè)面提交給搜索引擎,當優(yōu)化頁(yè)面被搜索引擎收錄替換它與普通頁(yè)面。
三:誤導或重復關(guān)鍵詞
誤導關(guān)鍵詞(誤導性詞語(yǔ))
在與頁(yè)面無(wú)關(guān)的頁(yè)面中使用誤導性的 關(guān)鍵詞 來(lái)吸引訪(fǎng)問(wèn)者網(wǎng)站 訪(fǎng)問(wèn)該主題。顯然,這些所謂的 關(guān)鍵詞 與這個(gè)頁(yè)面無(wú)關(guān)。這種做法嚴重影響了搜索引擎提供的結果的相關(guān)性和客觀(guān)性,被搜索引擎所憎惡。
重復 關(guān)鍵詞(重復的單??詞)
這種作弊技術(shù)也稱(chēng)為“關(guān)鍵詞Keyword Stuffing”,利用搜索引擎對關(guān)鍵詞出現在網(wǎng)頁(yè)正文和標題中的高度關(guān)注,進(jìn)行關(guān)鍵詞不合理(過(guò)度)重復。其他類(lèi)似的做法包括在 HTML 元標記中填充關(guān)鍵字或使用多個(gè)關(guān)鍵字元標記來(lái)增加 關(guān)鍵詞 的相關(guān)性。這種技術(shù)很容易被搜索引擎檢測到并受到相應的懲罰。
四:隱形頁(yè)面
對實(shí)際訪(fǎng)問(wèn)者或搜索引擎的任何一方隱藏真實(shí)的 網(wǎng)站 內容,以便向搜索引擎提供非真實(shí)的 SEO 友好內容以提高排名。
五:欺騙性重定向
指快速將用戶(hù)訪(fǎng)問(wèn)的第一頁(yè)(著(zhù)陸頁(yè))重定向到內容完全不同的頁(yè)面。
《影子領(lǐng)域》
這是最常見(jiàn)的欺騙性重定向技術(shù),欺騙性地將用戶(hù)重定向到另一個(gè) 網(wǎng)站 或頁(yè)面。一般是通過(guò)使用HTML刷新標記(Meta Refresh)來(lái)實(shí)現的。大多數搜索引擎不會(huì )索引使用此徽標的頁(yè)面。如果您使用刷新標志來(lái)檢測瀏覽器或分辨率,則使用 Javascript 并最大化重定向時(shí)間。如果必須使用重定向功能,請確保刷新周期不少于 10 秒。

另一種情況是當用戶(hù)打開(kāi)一個(gè)網(wǎng)站時(shí),網(wǎng)站聲稱(chēng)自己的網(wǎng)站已經(jīng)移到了一個(gè)新的域名,并要求用戶(hù)點(diǎn)擊新的域名鏈接輸入 網(wǎng)站。但是當用戶(hù)進(jìn)去的時(shí)候,他發(fā)現這個(gè)鏈接是一個(gè)“附屬”鏈接。這也是一個(gè)欺騙性的重定向。
六:門(mén)口頁(yè)
也稱(chēng)為“橋接/門(mén)戶(hù)/跳轉/入口頁(yè)面”。它是針對某些關(guān)鍵字的特制頁(yè)面,專(zhuān)門(mén)為搜索引擎設計的,目的是提高特定關(guān)鍵詞在搜索引擎中的排名。目的豐富的關(guān)鍵詞域名被重定向到另一個(gè)域名的真實(shí)網(wǎng)站。搜索引擎蜘蛛傾向于忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面。
七:復制的網(wǎng)站或網(wǎng)頁(yè)
最常見(jiàn)的是鏡像站點(diǎn)(Mirror Sites)。通過(guò)復制 網(wǎng)站 或頁(yè)面的內容并分配不同的域名和服務(wù)器,它可以欺騙搜索引擎多次索引同一站點(diǎn)或同一頁(yè)面。大多數搜索引擎現在提供能夠檢測鏡像站點(diǎn)的適當過(guò)濾系統。找到鏡像站點(diǎn)后,源站點(diǎn)和鏡像站點(diǎn)都會(huì )從索引數據庫中刪除。
八:作弊鏈接技術(shù)/惡意鏈接(Link Spamming)
典型的作弊鏈接技術(shù)包括:
鏈接農場(chǎng)
批量鏈接交換程序
交叉鏈接
“鏈接工廠(chǎng)”(也稱(chēng)為“海量鏈接機制”)是指由大量交叉鏈接的網(wǎng)頁(yè)組成的網(wǎng)絡(luò )系統。這些網(wǎng)頁(yè)可能來(lái)自同一個(gè)域或多個(gè)不同的域,甚至來(lái)自不同的服務(wù)器。站點(diǎn)加入這樣的“鏈接工廠(chǎng)”后,一方面可以從系統中的所有網(wǎng)頁(yè)獲取鏈接,同時(shí)還需要“捐贈”自己的鏈接作為交換,從而提高通過(guò)這種方法進(jìn)行鏈接評分,從而達到干預鏈接評分。的目標。它們現在很容易被搜索引擎發(fā)現。一經(jīng)發(fā)現,無(wú)論有意還是無(wú)意,“鏈接工廠(chǎng)”中的所有網(wǎng)站都是千絲萬(wàn)縷的鏈接。
九:其他
日志作弊
具有較高頁(yè)面排名的網(wǎng)站通過(guò)對其進(jìn)行大量虛假點(diǎn)擊來(lái)獲取其傳入鏈接,以便在這些網(wǎng)站的頂級引薦來(lái)源日志中列出。Google 知道這種行為,并將對使用此路由獲取傳入鏈接的網(wǎng)站采取適當的措施。
門(mén)口域
目標豐富的關(guān)鍵詞 域旨在提高特定關(guān)鍵詞 在搜索引擎中的排名,然后重定向到其他域的主頁(yè)。由于搜索引擎通常會(huì )忽略自動(dòng)重定向到其他頁(yè)面的頁(yè)面檢索,因此不鼓勵使用這種技術(shù)。
解決方案:資源網(wǎng)采集api接口_cochrane library檢索
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-10-03 23:08
資源網(wǎng)采集api接口_cochrane庫檢索記錄Bintray網(wǎng)站Publishing LibraryBintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray上網(wǎng)站 開(kāi)啟。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。目前的androidstudio默認依賴(lài)jcenter庫,但是老版本的androidstudio依賴(lài)mavenC...
大家好,我是建筑師,一個(gè)會(huì )寫(xiě)代碼,會(huì )背詩(shī)的建筑師。今天講資源網(wǎng)采集api接口_cochrane庫檢索,希望能幫助大家提高?。?!
Recording Bintray網(wǎng)站發(fā)布庫
Bintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray網(wǎng)站上。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。
目前的android studio默認依賴(lài)jcenter庫,但是老版本的android studio依賴(lài)mavenCentral庫(因為上傳庫到mavenCentral對大部分開(kāi)發(fā)者來(lái)說(shuō)有點(diǎn)困難,改成jcenter了)。
我們可以在項目的 build.gradle 文件中看到
默認依賴(lài)庫.png
好了,廢話(huà)不多說(shuō),我們開(kāi)始吧。
向 Bintray 注冊一個(gè)帳戶(hù)
我這里使用github賬號直接登錄,但是需要郵箱驗證。注意這里不能使用qq郵箱。網(wǎng)易郵箱注冊可以使用谷歌郵箱。個(gè)人使用的是foxmail(qq郵箱的別稱(chēng))。
注冊成功后是這樣的:
Paste_Image.png
然后我們要創(chuàng )建我們的存儲庫,類(lèi)似于 github 的存儲庫。
創(chuàng )建倉庫.png
然后填寫(xiě)相應的信息就OK了。注意類(lèi)型要選擇maven,如果想讓不在你組織的人使用,需要選擇public。
Paste_Image.png
然后將包添加到存儲庫。用來(lái)存放我們要發(fā)布的jar包。
Paste_Image.png
然后填寫(xiě)相關(guān)信息,如圖:
Paste_Image.png
一旦完成,我們的準備工作就完成了。~
編譯并發(fā)布項目
首先,我們肯定需要一個(gè)已經(jīng)編寫(xiě)好的庫。項目結構如下:
Paste_Image.png
如果沒(méi)有,沒(méi)關(guān)系,我們可以新建一個(gè)庫,全面調試(如果你只是想知道怎么發(fā)布到bintry,在庫里寫(xiě)個(gè)測試方法就行了),把它作為要發(fā)布的jar包。
Paste_Image.png
好了,重頭戲來(lái)了,我們要在android stduio中搭建我們的上傳環(huán)境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只聽(tīng)到建筑師辦公室傳來(lái)建筑師的聲音:
此水何時(shí)止,此恨何時(shí)止?誰(shuí)將向上或向下匹配?
文件中的位置如圖: 注意這里可能存在版本問(wèn)題。如果版本錯誤,請嘗試使用最新版本。
Paste_Image.png
此代碼由Java架構師必看網(wǎng)-架構君整理
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上時(shí),只需要修改這里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 項目的主頁(yè)
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' //填寫(xiě)的一些基本信息(也可以不填)
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"//這個(gè)地方一定要填,一定要填 ?。。ㄟ@里需要修改你申請賬號是的組織id)
repo = "Maven"//發(fā)布到bintray上的倉庫名
name = "CheckEditText" //發(fā)布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8編碼否則會(huì )報“GBK的不可映射字符”錯誤
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
這里需要說(shuō)明一下:
所需的更改是:
Paste_Image.png
userOrg 填寫(xiě)你的組織ID,可以在如圖所示界面找到可信信息。
Paste_Image.png
repo 填寫(xiě)你的倉庫名稱(chēng),name 填寫(xiě)你的包名,可以找到對應的信息如圖。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我們需要在項目的local.properties中填寫(xiě)我們的身份信息。將以下兩句話(huà)添加到我們的目錄中:
此代碼由Java架構師必看網(wǎng)-架構君整理
bintray.user=用戶(hù)名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用戶(hù)名可以在這里找到
Paste_Image.png
在這里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我們離成功也不遠了。
接下來(lái)在終端輸入命令:
gradlew install
如果沒(méi)有報錯,會(huì )提示BUILD SUCCESSEUL,然后我們輸入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去網(wǎng)站看看~:
Paste_Image.png
將依賴(lài)項添加到項目中
發(fā)布后,我們可以將其引入到我們的項目中。
在要導入項目的build.gradle目錄下,添加依賴(lài):
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我們的組織地址。
Paste_Image.png
然后,在我們要依賴(lài)的模塊下,添加我們需要的依賴(lài),例如:
Paste_Image.png
這可以在這里找到:
Paste_Image.png
然后就可以使用我們之前寫(xiě)的函數了~??!.
簡(jiǎn)單的發(fā)布寫(xiě)作
將以下內容添加到 -root build.gradle 中的依賴(lài)項塊中:
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
添加到要發(fā)布的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 如果有組織就是組織名,反之用戶(hù)名
repoName = 'maven' //倉庫名
uploadName = 'GameSDK' //項目名
groupId = 'com.test' //compile引用時(shí)的第1部分groupId
artifactId = 'game-sdk' //compile引用時(shí)的第2部分項目名
publishVersion = '1.0.0' //compile引用時(shí)的第3部分版本號
desc = 'This is a game sdk extend library'
website = '網(wǎng)站網(wǎng)址或者github地址'
licences = ['Apache-2.0']
}
生成后的依賴(lài)地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:發(fā)布成功后:
* 1、在要引入項目的 build.gradle目錄下,添加依賴(lài):
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路徑{https://xxxx.bintray.com/maven},在未將library加入的jcenter中前,這是必須的
//userOrg 如果有組織就是組織名,反之用戶(hù)名
* }
*
* 2、在dependencies中添加依賴(lài):
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包發(fā)布后,仍然可以這樣寫(xiě):
gradlew clean build bintrayUpload -PbintrayUser=用戶(hù)名 -PbintrayKey=apiKey -PdryRun=false
我想你會(huì )喜歡:
解決方案:關(guān)鍵詞提取軟件下載(關(guān)鍵詞提取器)
優(yōu)采云采集器是網(wǎng)站采集大家最喜歡的工具,但是優(yōu)采云采集器在免費版中并沒(méi)有很多功能,除了支持關(guān)鍵詞采集中文文章和自動(dòng)發(fā)布功能,不能提供批量采集偽原創(chuàng )發(fā)布等完整的采集流程,不能同時(shí)一個(gè)-點(diǎn)擊批量自動(dòng)百度、神馬、360、搜狗等搜索引擎推送。
無(wú)論你有成百上千個(gè)不同的免費采集器網(wǎng)站還是其他網(wǎng)站都可以實(shí)現統一管理。一個(gè)人使用免費的采集器做網(wǎng)站優(yōu)化維護上百個(gè)網(wǎng)站文章更新不是問(wèn)題,有哪些細節需要注意。
一、域名
域名就像一個(gè)人的名字。簡(jiǎn)單好記的名字容易讓人記住,復雜的名字難記。域名也是如此,所以針對網(wǎng)站優(yōu)化了一個(gè)簡(jiǎn)單易記的域名,好在用戶(hù)想訪(fǎng)問(wèn)你的網(wǎng)站時(shí),不需要去百度搜索,他們可以通過(guò)輸入域名直接訪(fǎng)問(wèn)你的網(wǎng)站。免費采集器可以批量監控管理不同的cms網(wǎng)站數據(無(wú)論你的網(wǎng)站是Empire, Yiyou, ZBLOG, 織夢(mèng), WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同時(shí)批處理工具來(lái)管理 采集偽原創(chuàng ) 并發(fā)布推送)。
二、空間
空間是存儲網(wǎng)站 程序文件的地方??臻g打開(kāi)越快,空間越穩定,網(wǎng)站用戶(hù)瀏覽體驗自然會(huì )更好。更快的速度和更穩定的空間對于網(wǎng)站來(lái)說(shuō)很重要,優(yōu)化排名極其重要。免費采集器可以設置批量發(fā)布次數(可以設置發(fā)布間隔/單日發(fā)布總數)。
三、網(wǎng)頁(yè)上的三大標簽
1)標題標簽
網(wǎng)頁(yè)有標題標簽。搜索蜘蛛在抓取網(wǎng)頁(yè)內容時(shí),首先抓取的是網(wǎng)頁(yè)標題標簽的內容,而網(wǎng)頁(yè)標題標簽的內容可以參與搜索結果的排名。我們通常所說(shuō)的關(guān)鍵詞排名指的是標題標簽排名,而不是關(guān)鍵詞標簽排名,所以頁(yè)面標題標簽的內容很重要。免費 采集器 使內容與標題一致(使內容與標題相關(guān)性一致)。根據關(guān)鍵詞采集文章,通過(guò)免費的采集器采集填充內容。(免費的 采集器采集 插件還配置了 關(guān)鍵詞采集 功能和無(wú)關(guān)的詞塊功能)。注意不要出錯,否則會(huì )被搜索引擎懲罰。
2)關(guān)鍵詞標簽
免費采集器可以提高關(guān)鍵詞密度和頁(yè)面原創(chuàng )度,增加用戶(hù)體驗,實(shí)現優(yōu)質(zhì)內容。
關(guān)鍵詞標簽的內容不參與排名,部分站長(cháng)朋友認為不需要寫(xiě)。免費采集器插入內容的能力關(guān)鍵詞(合理增加關(guān)鍵詞密度)。雖然這個(gè)標簽不涉及排名,但我們仍然需要維護這個(gè)標簽內容的完整性。百度搜索在相關(guān)算法中也有提及。建議你寫(xiě)下這個(gè)標簽的內容,以免被百度搜索命中。
3)描述標簽
描述標簽寫(xiě)入當前網(wǎng)頁(yè)的一般內容。簡(jiǎn)而言之,就是對當前網(wǎng)頁(yè)內容的介紹。一個(gè)好的網(wǎng)頁(yè)描述也可以吸引用戶(hù)點(diǎn)擊該網(wǎng)頁(yè)的網(wǎng)頁(yè),描述標簽的內容也可以參與排名。
4)alt 標簽
alt標簽是圖片的專(zhuān)屬標簽,因為搜索蜘蛛不能直接識別圖片,所以只能通過(guò)alt標簽的內容來(lái)識別圖片。alt標簽的內容只需要簡(jiǎn)單的告訴搜索蜘蛛圖片的內容,不要在alt標簽>里面堆關(guān)鍵詞,否則會(huì )影響搜索蜘蛛對網(wǎng)頁(yè)的評分。
5)機器人,txt 文件
網(wǎng)站機器人,txt文件是網(wǎng)站和搜索引擎之間的協(xié)議文件,用來(lái)告訴搜索蜘蛛網(wǎng)站可以抓取哪些頁(yè)面。免費采集器隨機圖片插入(文章如果沒(méi)有圖片可以隨機插入相關(guān)圖片)。哪些頁(yè)面不能被爬取,可以有效保護網(wǎng)站隱私頁(yè)面,提高網(wǎng)站的安全性。
6)nofollow 標簽
免費采集器可以支持多個(gè)采集來(lái)源采集(涵蓋所有行業(yè)新聞來(lái)源,內容庫海量每天都有新內容,采集新內容)。nofollow 標簽通常應用于出站鏈接。站內鏈接很少用于告訴蜘蛛該鏈接是非信任鏈接并且不傳遞權重。
7)網(wǎng)站網(wǎng)站地圖
免費的采集器可以推送到搜索引擎(文章發(fā)布成功后主動(dòng)推送文章到搜索引擎,保證新鏈接及時(shí)被搜索引擎搜索到收錄 )。網(wǎng)站sitemap地圖有利于提高搜索蜘蛛的網(wǎng)站頁(yè)面的爬取率,所有網(wǎng)站頁(yè)面的鏈接都集中在這個(gè)文件中,可以幫助搜索蜘蛛快速爬取整個(gè)網(wǎng)站頁(yè)面。免費的采集器可以定時(shí)發(fā)布(定時(shí)發(fā)布網(wǎng)站內容可以讓搜索引擎養成定時(shí)抓取網(wǎng)頁(yè)的習慣,從而提高網(wǎng)站的收錄)。
搜索蜘蛛爬行網(wǎng)站,第一個(gè)訪(fǎng)問(wèn)的文件是robots文件,我們可以在robots文件中寫(xiě)網(wǎng)站站點(diǎn)地圖地圖,搜索蜘蛛會(huì )沿著(zhù)網(wǎng)站地圖文件爬行網(wǎng)站 頁(yè)面。每日蜘蛛、收錄、網(wǎng)站權重可以通過(guò)免費的采集器直接查看。
8)鏈接
免費的采集器可以發(fā)布也可以配置很多SEO功能,不僅可以通過(guò)免費的采集器發(fā)布實(shí)現采集偽原創(chuàng )的發(fā)布和主動(dòng)推送到搜索引擎,還可以有很多搜索引擎優(yōu)化功能。與相關(guān)行業(yè)的高權重網(wǎng)站交換友情鏈接,可以增加網(wǎng)站的PR值,給網(wǎng)站帶來(lái)一定的流量,提高搜索引擎對你的興趣網(wǎng)站頁(yè)面的收錄速率。免費采集器自動(dòng)批量掛機采集偽原創(chuàng )自動(dòng)發(fā)布推送到搜索引擎。
9)外部鏈接
免費采集器可以直接監控已發(fā)布、待發(fā)布、偽原創(chuàng )、發(fā)布狀態(tài)、URL、程序、發(fā)布時(shí)間等。外部鏈接是給別人留下自己的網(wǎng)站鏈接網(wǎng)站。外鏈對于新站優(yōu)化初期非常重要,外鏈的好壞直接影響搜索引擎中的網(wǎng)站。的評分。免費的采集器可以自動(dòng)內鏈(在執行發(fā)布任務(wù)時(shí)自動(dòng)在文章內容中生成內鏈,有利于引導頁(yè)面蜘蛛抓取,提高頁(yè)面權限)。
10)404 錯誤頁(yè)面
免費的采集器提供偽原創(chuàng )保留字(文章原創(chuàng )時(shí)偽原創(chuàng )不設置核心字)。網(wǎng)站修改、破解代碼或其他原因導致網(wǎng)站中出現大量死鏈接。這時(shí)候,404錯誤頁(yè)面就派上用場(chǎng)了。404錯誤頁(yè)面向搜索引擎返回一個(gè)404狀態(tài)碼,可以幫助搜索引擎快速去除死鏈接頁(yè)面。
今天關(guān)于免費采集器的解釋就到這里了。下期我會(huì )分享更多的SEO相關(guān)知識。希望你能通過(guò)我的文章得到你想要的,下期再見(jiàn)。 查看全部
解決方案:資源網(wǎng)采集api接口_cochrane library檢索
資源網(wǎng)采集api接口_cochrane庫檢索記錄Bintray網(wǎng)站Publishing LibraryBintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray上網(wǎng)站 開(kāi)啟。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。目前的androidstudio默認依賴(lài)jcenter庫,但是老版本的androidstudio依賴(lài)mavenC...
大家好,我是建筑師,一個(gè)會(huì )寫(xiě)代碼,會(huì )背詩(shī)的建筑師。今天講資源網(wǎng)采集api接口_cochrane庫檢索,希望能幫助大家提高?。?!
Recording Bintray網(wǎng)站發(fā)布庫
Bintray其實(shí)只是一個(gè)網(wǎng)站,他們負責維護JCenter庫,也就是說(shuō)JCenter庫托管在BIntray網(wǎng)站上。但 Bintray 不僅僅是 JCenter 庫。我們還可以在上面創(chuàng )建自己的帳戶(hù)并生成我們自己的 Maven 存儲庫。
目前的android studio默認依賴(lài)jcenter庫,但是老版本的android studio依賴(lài)mavenCentral庫(因為上傳庫到mavenCentral對大部分開(kāi)發(fā)者來(lái)說(shuō)有點(diǎn)困難,改成jcenter了)。
我們可以在項目的 build.gradle 文件中看到
默認依賴(lài)庫.png
好了,廢話(huà)不多說(shuō),我們開(kāi)始吧。
向 Bintray 注冊一個(gè)帳戶(hù)
我這里使用github賬號直接登錄,但是需要郵箱驗證。注意這里不能使用qq郵箱。網(wǎng)易郵箱注冊可以使用谷歌郵箱。個(gè)人使用的是foxmail(qq郵箱的別稱(chēng))。
注冊成功后是這樣的:
Paste_Image.png
然后我們要創(chuàng )建我們的存儲庫,類(lèi)似于 github 的存儲庫。
創(chuàng )建倉庫.png
然后填寫(xiě)相應的信息就OK了。注意類(lèi)型要選擇maven,如果想讓不在你組織的人使用,需要選擇public。
Paste_Image.png
然后將包添加到存儲庫。用來(lái)存放我們要發(fā)布的jar包。
Paste_Image.png
然后填寫(xiě)相關(guān)信息,如圖:
Paste_Image.png
一旦完成,我們的準備工作就完成了。~
編譯并發(fā)布項目
首先,我們肯定需要一個(gè)已經(jīng)編寫(xiě)好的庫。項目結構如下:
Paste_Image.png
如果沒(méi)有,沒(méi)關(guān)系,我們可以新建一個(gè)庫,全面調試(如果你只是想知道怎么發(fā)布到bintry,在庫里寫(xiě)個(gè)測試方法就行了),把它作為要發(fā)布的jar包。
Paste_Image.png
好了,重頭戲來(lái)了,我們要在android stduio中搭建我們的上傳環(huán)境。
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
只聽(tīng)到建筑師辦公室傳來(lái)建筑師的聲音:
此水何時(shí)止,此恨何時(shí)止?誰(shuí)將向上或向下匹配?
文件中的位置如圖: 注意這里可能存在版本問(wèn)題。如果版本錯誤,請嘗試使用最新版本。
Paste_Image.png
此代碼由Java架構師必看網(wǎng)-架構君整理
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上時(shí),只需要修改這里的版本即可
def siteUrl = 'https://git.oschina.net/crazycodeboy/ScanProj' // 項目的主頁(yè)
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' //填寫(xiě)的一些基本信息(也可以不填)
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"//這個(gè)地方一定要填,一定要填 ?。。ㄟ@里需要修改你申請賬號是的組織id)
repo = "Maven"//發(fā)布到bintray上的倉庫名
name = "CheckEditText" //發(fā)布到bintray上的包名
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc { //jav doc采用utf-8編碼否則會(huì )報“GBK的不可映射字符”錯誤
options{
encoding "UTF-8"
charSet 'UTF-8'
}
</p>
這里需要說(shuō)明一下:
所需的更改是:
Paste_Image.png
userOrg 填寫(xiě)你的組織ID,可以在如圖所示界面找到可信信息。
Paste_Image.png
repo 填寫(xiě)你的倉庫名稱(chēng),name 填寫(xiě)你的包名,可以找到對應的信息如圖。
Paste_Image.png
apply from: "bintrayUpload.gradle"
最后,我們需要在項目的local.properties中填寫(xiě)我們的身份信息。將以下兩句話(huà)添加到我們的目錄中:
此代碼由Java架構師必看網(wǎng)-架構君整理
bintray.user=用戶(hù)名
bintray.apikey=xxxxxxxxxxxxxxxxxx
用戶(hù)名可以在這里找到
Paste_Image.png
在這里找到 apiKey:
Paste_Image.png
Paste_Image.png
好了,以上的工作完成之后,我們離成功也不遠了。
接下來(lái)在終端輸入命令:
gradlew install
如果沒(méi)有報錯,會(huì )提示BUILD SUCCESSEUL,然后我們輸入:
gradlew bintrayUpload
Paste_Image.png
成功!~
去網(wǎng)站看看~:
Paste_Image.png

將依賴(lài)項添加到項目中
發(fā)布后,我們可以將其引入到我們的項目中。
在要導入項目的build.gradle目錄下,添加依賴(lài):
maven { url 'https://hut.bintray.com/Maven' }
Paste_Image.png
url 是我們的組織地址。
Paste_Image.png
然后,在我們要依賴(lài)的模塊下,添加我們需要的依賴(lài),例如:
Paste_Image.png
這可以在這里找到:
Paste_Image.png
然后就可以使用我們之前寫(xiě)的函數了~??!.
簡(jiǎn)單的發(fā)布寫(xiě)作
將以下內容添加到 -root build.gradle 中的依賴(lài)項塊中:
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
添加到要發(fā)布的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 如果有組織就是組織名,反之用戶(hù)名
repoName = 'maven' //倉庫名
uploadName = 'GameSDK' //項目名
groupId = 'com.test' //compile引用時(shí)的第1部分groupId
artifactId = 'game-sdk' //compile引用時(shí)的第2部分項目名
publishVersion = '1.0.0' //compile引用時(shí)的第3部分版本號
desc = 'This is a game sdk extend library'
website = '網(wǎng)站網(wǎng)址或者github地址'
licences = ['Apache-2.0']
}
生成后的依賴(lài)地址:compile 'com.test:game-sdk:1.0.0'
/**
*注:發(fā)布成功后:
* 1、在要引入項目的 build.gradle目錄下,添加依賴(lài):
* repositories {
* maven {
* url 'https://userOrg.bintray.com/maven'
* }//指定自己的maven路徑{https://xxxx.bintray.com/maven},在未將library加入的jcenter中前,這是必須的
//userOrg 如果有組織就是組織名,反之用戶(hù)名
* }
*
* 2、在dependencies中添加依賴(lài):
* compile 'com.test:game-sdk:1.0.0'
*/
- 打包發(fā)布后,仍然可以這樣寫(xiě):
gradlew clean build bintrayUpload -PbintrayUser=用戶(hù)名 -PbintrayKey=apiKey -PdryRun=false
我想你會(huì )喜歡:
解決方案:關(guān)鍵詞提取軟件下載(關(guān)鍵詞提取器)
優(yōu)采云采集器是網(wǎng)站采集大家最喜歡的工具,但是優(yōu)采云采集器在免費版中并沒(méi)有很多功能,除了支持關(guān)鍵詞采集中文文章和自動(dòng)發(fā)布功能,不能提供批量采集偽原創(chuàng )發(fā)布等完整的采集流程,不能同時(shí)一個(gè)-點(diǎn)擊批量自動(dòng)百度、神馬、360、搜狗等搜索引擎推送。
無(wú)論你有成百上千個(gè)不同的免費采集器網(wǎng)站還是其他網(wǎng)站都可以實(shí)現統一管理。一個(gè)人使用免費的采集器做網(wǎng)站優(yōu)化維護上百個(gè)網(wǎng)站文章更新不是問(wèn)題,有哪些細節需要注意。
一、域名
域名就像一個(gè)人的名字。簡(jiǎn)單好記的名字容易讓人記住,復雜的名字難記。域名也是如此,所以針對網(wǎng)站優(yōu)化了一個(gè)簡(jiǎn)單易記的域名,好在用戶(hù)想訪(fǎng)問(wèn)你的網(wǎng)站時(shí),不需要去百度搜索,他們可以通過(guò)輸入域名直接訪(fǎng)問(wèn)你的網(wǎng)站。免費采集器可以批量監控管理不同的cms網(wǎng)站數據(無(wú)論你的網(wǎng)站是Empire, Yiyou, ZBLOG, 織夢(mèng), WP, Yunyou cms、人人展cms、discuz、Whirlwind、站群、PBoot、Apple、Mito、搜外等各大cms,都可以同時(shí)批處理工具來(lái)管理 采集偽原創(chuàng ) 并發(fā)布推送)。
二、空間
空間是存儲網(wǎng)站 程序文件的地方??臻g打開(kāi)越快,空間越穩定,網(wǎng)站用戶(hù)瀏覽體驗自然會(huì )更好。更快的速度和更穩定的空間對于網(wǎng)站來(lái)說(shuō)很重要,優(yōu)化排名極其重要。免費采集器可以設置批量發(fā)布次數(可以設置發(fā)布間隔/單日發(fā)布總數)。
三、網(wǎng)頁(yè)上的三大標簽
1)標題標簽
網(wǎng)頁(yè)有標題標簽。搜索蜘蛛在抓取網(wǎng)頁(yè)內容時(shí),首先抓取的是網(wǎng)頁(yè)標題標簽的內容,而網(wǎng)頁(yè)標題標簽的內容可以參與搜索結果的排名。我們通常所說(shuō)的關(guān)鍵詞排名指的是標題標簽排名,而不是關(guān)鍵詞標簽排名,所以頁(yè)面標題標簽的內容很重要。免費 采集器 使內容與標題一致(使內容與標題相關(guān)性一致)。根據關(guān)鍵詞采集文章,通過(guò)免費的采集器采集填充內容。(免費的 采集器采集 插件還配置了 關(guān)鍵詞采集 功能和無(wú)關(guān)的詞塊功能)。注意不要出錯,否則會(huì )被搜索引擎懲罰。

2)關(guān)鍵詞標簽
免費采集器可以提高關(guān)鍵詞密度和頁(yè)面原創(chuàng )度,增加用戶(hù)體驗,實(shí)現優(yōu)質(zhì)內容。
關(guān)鍵詞標簽的內容不參與排名,部分站長(cháng)朋友認為不需要寫(xiě)。免費采集器插入內容的能力關(guān)鍵詞(合理增加關(guān)鍵詞密度)。雖然這個(gè)標簽不涉及排名,但我們仍然需要維護這個(gè)標簽內容的完整性。百度搜索在相關(guān)算法中也有提及。建議你寫(xiě)下這個(gè)標簽的內容,以免被百度搜索命中。
3)描述標簽
描述標簽寫(xiě)入當前網(wǎng)頁(yè)的一般內容。簡(jiǎn)而言之,就是對當前網(wǎng)頁(yè)內容的介紹。一個(gè)好的網(wǎng)頁(yè)描述也可以吸引用戶(hù)點(diǎn)擊該網(wǎng)頁(yè)的網(wǎng)頁(yè),描述標簽的內容也可以參與排名。
4)alt 標簽
alt標簽是圖片的專(zhuān)屬標簽,因為搜索蜘蛛不能直接識別圖片,所以只能通過(guò)alt標簽的內容來(lái)識別圖片。alt標簽的內容只需要簡(jiǎn)單的告訴搜索蜘蛛圖片的內容,不要在alt標簽>里面堆關(guān)鍵詞,否則會(huì )影響搜索蜘蛛對網(wǎng)頁(yè)的評分。
5)機器人,txt 文件
網(wǎng)站機器人,txt文件是網(wǎng)站和搜索引擎之間的協(xié)議文件,用來(lái)告訴搜索蜘蛛網(wǎng)站可以抓取哪些頁(yè)面。免費采集器隨機圖片插入(文章如果沒(méi)有圖片可以隨機插入相關(guān)圖片)。哪些頁(yè)面不能被爬取,可以有效保護網(wǎng)站隱私頁(yè)面,提高網(wǎng)站的安全性。
6)nofollow 標簽
免費采集器可以支持多個(gè)采集來(lái)源采集(涵蓋所有行業(yè)新聞來(lái)源,內容庫海量每天都有新內容,采集新內容)。nofollow 標簽通常應用于出站鏈接。站內鏈接很少用于告訴蜘蛛該鏈接是非信任鏈接并且不傳遞權重。
7)網(wǎng)站網(wǎng)站地圖

免費的采集器可以推送到搜索引擎(文章發(fā)布成功后主動(dòng)推送文章到搜索引擎,保證新鏈接及時(shí)被搜索引擎搜索到收錄 )。網(wǎng)站sitemap地圖有利于提高搜索蜘蛛的網(wǎng)站頁(yè)面的爬取率,所有網(wǎng)站頁(yè)面的鏈接都集中在這個(gè)文件中,可以幫助搜索蜘蛛快速爬取整個(gè)網(wǎng)站頁(yè)面。免費的采集器可以定時(shí)發(fā)布(定時(shí)發(fā)布網(wǎng)站內容可以讓搜索引擎養成定時(shí)抓取網(wǎng)頁(yè)的習慣,從而提高網(wǎng)站的收錄)。
搜索蜘蛛爬行網(wǎng)站,第一個(gè)訪(fǎng)問(wèn)的文件是robots文件,我們可以在robots文件中寫(xiě)網(wǎng)站站點(diǎn)地圖地圖,搜索蜘蛛會(huì )沿著(zhù)網(wǎng)站地圖文件爬行網(wǎng)站 頁(yè)面。每日蜘蛛、收錄、網(wǎng)站權重可以通過(guò)免費的采集器直接查看。
8)鏈接
免費的采集器可以發(fā)布也可以配置很多SEO功能,不僅可以通過(guò)免費的采集器發(fā)布實(shí)現采集偽原創(chuàng )的發(fā)布和主動(dòng)推送到搜索引擎,還可以有很多搜索引擎優(yōu)化功能。與相關(guān)行業(yè)的高權重網(wǎng)站交換友情鏈接,可以增加網(wǎng)站的PR值,給網(wǎng)站帶來(lái)一定的流量,提高搜索引擎對你的興趣網(wǎng)站頁(yè)面的收錄速率。免費采集器自動(dòng)批量掛機采集偽原創(chuàng )自動(dòng)發(fā)布推送到搜索引擎。
9)外部鏈接
免費采集器可以直接監控已發(fā)布、待發(fā)布、偽原創(chuàng )、發(fā)布狀態(tài)、URL、程序、發(fā)布時(shí)間等。外部鏈接是給別人留下自己的網(wǎng)站鏈接網(wǎng)站。外鏈對于新站優(yōu)化初期非常重要,外鏈的好壞直接影響搜索引擎中的網(wǎng)站。的評分。免費的采集器可以自動(dòng)內鏈(在執行發(fā)布任務(wù)時(shí)自動(dòng)在文章內容中生成內鏈,有利于引導頁(yè)面蜘蛛抓取,提高頁(yè)面權限)。
10)404 錯誤頁(yè)面
免費的采集器提供偽原創(chuàng )保留字(文章原創(chuàng )時(shí)偽原創(chuàng )不設置核心字)。網(wǎng)站修改、破解代碼或其他原因導致網(wǎng)站中出現大量死鏈接。這時(shí)候,404錯誤頁(yè)面就派上用場(chǎng)了。404錯誤頁(yè)面向搜索引擎返回一個(gè)404狀態(tài)碼,可以幫助搜索引擎快速去除死鏈接頁(yè)面。
今天關(guān)于免費采集器的解釋就到這里了。下期我會(huì )分享更多的SEO相關(guān)知識。希望你能通過(guò)我的文章得到你想要的,下期再見(jiàn)。
完整解決方案:支持推薦應用的PaaS平臺4A能力組件
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 170 次瀏覽 ? 2022-10-03 04:46
平臺即服務(wù)(PaaS,platform as a service)作為云計算的一種應用形式,為應用開(kāi)發(fā)者提供高效、安全的應用托管能力[]。隨著(zhù)PaaS云平臺的不斷發(fā)展,平臺能力的豐富性和多樣化已經(jīng)成為PaaS平臺的核心競爭點(diǎn)和關(guān)鍵指標[]。所謂平臺的“能力組件”,主要是指PaaS平臺提供的、可供平臺上其他應用調用的軟件能力。4A是Authentication(認證)。)、Authorization(認證)、Accounting(計費)和Audit(審計)的縮寫(xiě),4A為用戶(hù)提供統一的用戶(hù)身份認證管理,應用訪(fǎng)問(wèn)(access)權限控制,記賬和賬戶(hù)管理,以及基于操作的日志審計等功能。通過(guò)分析PaaS平臺上的應用[-]可以發(fā)現,很多應用都需要基本的4A能力,比如用戶(hù)信息管理、賬戶(hù)管理等。因此,4A能力組件正是在PaaS云平臺中??芍赜玫闹匾M件之一,可有效減少應用程序開(kāi)發(fā)量,增加軟件資產(chǎn)的重用性。同時(shí),豐富強大的平臺能力也可以讓平臺上的應用擁有更豐富、更強大的功能,提高應用競爭力。. 4A能力組件在提供4A能力的同時(shí),還為用戶(hù)提供單點(diǎn)登錄(SSO,single sign on)功能,方便用戶(hù)在各種應用之間無(wú)縫切換,一站式滿(mǎn)足用戶(hù)和應用的需求。提供統一認證、認證管理、賬號管理、審計管理、SSO等功能需求。
1 4A能力組件需求分析
4A能力組件為用戶(hù)提供用戶(hù)注冊、密碼找回、信息管理、計費管理等賬戶(hù)管理相關(guān)功能,提供統一的認證服務(wù),為不同的應用提供認證管理,提供用戶(hù)行為信息的審計管理,支持單點(diǎn)登錄和其他功能。
4A能力組件的應用對象是PaaS云中的應用開(kāi)發(fā)者、應用用戶(hù)和管理員。4A能力組件為應用開(kāi)發(fā)者提供了一個(gè)簡(jiǎn)單、安全、高效的接口,方便開(kāi)發(fā)者使用。為保證一站式服務(wù)用戶(hù)體驗,4A能力組件為應用用戶(hù)和管理員提供用戶(hù)入口和管理員入口,完成對用戶(hù)信息和應用信息的管理。
4A組件的功能主要包括賬戶(hù)管理、認證管理、認證管理、審計管理和SSO。
1) 賬戶(hù)管理:賬戶(hù)管理分為三個(gè)部分。一是基本賬戶(hù)管理,包括用戶(hù)注冊、找回密碼、修改密碼等;二是用戶(hù)信息管理,包括基本用戶(hù)信息(基本用戶(hù)信息、用戶(hù)分機信息和用戶(hù)權限信息)和好友信息(好友信息、朋友關(guān)系和朋友組)。最后是賬單信息,包括用戶(hù)余額和交易詳情。
2) 統一認證:統一認證用于判斷用戶(hù)是否合法。認證過(guò)程通過(guò) OAuth2.0 協(xié)議實(shí)現。應用開(kāi)發(fā)者在使用能力組件提供的開(kāi)放接口之前,需要獲取用戶(hù)的授權憑證access_token。. access_token 是第三方訪(fǎng)問(wèn)用戶(hù)資源的憑證。只有通過(guò)這個(gè)憑證,第三方應用程序才能訪(fǎng)問(wèn) 4A 能力組件中的數據。
3) 應用認證:只有經(jīng)過(guò)系統授權的應用才能獲取用戶(hù)信息。當應用通過(guò)4A能力組件獲取用戶(hù)信息時(shí),會(huì )對第三方應用進(jìn)行授權檢查,未經(jīng)授權的應用不會(huì )獲取任何用戶(hù)信息。
4)系統審計:4A能力組件通過(guò)日志系統記錄用戶(hù)行為和系統操作信息,完成相關(guān)日志的采集、存儲和分析。
5) SSO:SSO 是一種流行的系統集成解決方案。SSO可以保證在多個(gè)應用系統中,用戶(hù)只需要登錄一次就可以訪(fǎng)問(wèn)所有相互信任的應用系統。
2 4A 能力組件設計2.1 系統架構
系統架構圖如圖所示。該系統分為三個(gè)部分。最上層是Web服務(wù)層,即接口服務(wù)器(API Server)和與開(kāi)發(fā)者、用戶(hù)和管理員交互的Web接口。Web服務(wù)層主要負責管理員門(mén)戶(hù),特別是4A能力組件將用戶(hù)門(mén)戶(hù)作為能力組件的第三方應用,不與管理員門(mén)戶(hù)在同一層。. 這是因為管理員門(mén)戶(hù)需要更高的權限,開(kāi)放API不提供相關(guān)功能,調用開(kāi)放API也會(huì )造成效率下降。中間是邏輯功能層,主要完成系統中所有邏輯功能的實(shí)現,包括賬戶(hù)管理、統一認證[]、應用認證、系統審計和SSO[]等。系統的底層是基礎組件層,包括基礎組件和支撐組件?;A組件是系統運行的必備組件,主要包括MySQL、NFS和郵件服務(wù)等。支持組件是支持系統運行的可選組件,主要包括日志系統等。下面將重點(diǎn)介紹日志系統和接口服務(wù)器。
圖1
圖1
圖1 4A能力組件系統架構圖
2.2 日志系統
日志系統是4A能力組件的支撐組件,負責在4A能力組件中記錄用戶(hù)的行為信息,并與4A能力組件中的審計模塊相關(guān)聯(lián)。其系統架構如下圖所示。
圖 2
圖 2
圖2 日志系統架構圖
日志系統支持采集,海量日志數據的存儲和分析。系統提供高性能的日志讀寫(xiě),包括實(shí)時(shí)讀取最新日志和批量讀取歷史數據。日志系統由Kafka分布式消息隊列、HBase分布式數據庫、生產(chǎn)者程序和消費者程序[]組成。生產(chǎn)者程序是4A能力組件中的一個(gè)審計模塊,可以為用戶(hù)提供用戶(hù)行為數據。消費者程序是一個(gè)基于HTTP協(xié)議的API服務(wù)器,日志系統通過(guò)API向4A能力組件提供各種日志信息。
2.3 API 服務(wù)器
4A能力組件提供的開(kāi)放API由4A能力組件中Web服務(wù)層的API Server提供。
2.3.1 API 設計
根據4A能力組件的開(kāi)發(fā)者需求,開(kāi)放API定義為兩類(lèi):
1)用戶(hù)級API:OAuth2.0登錄的用戶(hù),必須攜帶access_token參數。用戶(hù)級 API 主要用于訪(fǎng)問(wèn)個(gè)人用戶(hù)信息。
2)應用級API:用于不使用OAuth2.0登錄并已授權的第三方應用。應用程序級 API 將具有參數 source 而不是參數 access_token。參數 source 是 4A 能力的一個(gè)組成部分 管理員分配給應用的唯一 ID。
根據系統功能,API分為以下7類(lèi):
1) 身份驗證 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用戶(hù)關(guān)系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 組 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用戶(hù)信息 API:/api/users/" target="_blank">/api/users/。
5) 帳戶(hù) 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安全解決方案
為了保證用戶(hù)信息的安全可靠,用戶(hù)級API和應用級API采用不同的安全方案。
1) 用戶(hù)級 API
用戶(hù)級 API 使用 access_token 是否過(guò)期或有效來(lái)判斷用戶(hù)的真實(shí)性,并返回相應的數據。用戶(hù)的access_token僅在用戶(hù)登錄期間有效,有效期為24小時(shí)。
對于OAuth2.0相關(guān)的API,還增加了以下安全措施:
?、?OAuth2.0 獲取參數代碼時(shí),可以添加參數狀態(tài),維護請求和回調的狀態(tài)。當4A能力組件重定向到應用程序時(shí),將返回該參數。開(kāi)發(fā)者可以通過(guò)該參數驗證請求的有效性,從而防止跨站請求偽造攻擊。
?、?OAuth2.0通過(guò)參數code獲取參數access_token時(shí),盡量選擇HTTP協(xié)議的POST方式傳輸請求。
2) 應用程序級 API
應用級API只傳遞參數源作為應用身份的認證是不安全的,所以4A能力組件使用參數簽名來(lái)保護用戶(hù)信息。構造參數簽名的過(guò)程如下:
?、俜诸?lèi)參數:API中攜帶的參數分為系統參數和非系統參數。系統參數包括應用ID(參數來(lái)源)和應用密鑰(與參數來(lái)源唯一匹配)。非系統參數是除系統參數外的所有參數。范圍。
?、?構造源字符串:將所有非系統參數和參數源按名稱(chēng)值升序排列,并用“&”連接,如k1=v1 & k2=v2 & ...,然后執行第一個(gè)MD5加密。
?、?構造密鑰:在應用密鑰末尾添加字符“&”。
?、?生成簽名值簽名:將源字符串和密鑰以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一個(gè)新的字符串,再用MD5加密該值。注意連接的順序會(huì )影響最終的簽名值。
4A能力組件的API Server獲取API中的各種參數,按照上述算法進(jìn)行相同的加密過(guò)程。如果得到的簽名值與參數簽名一致,則證明API是安全的。
3 基于4A能力組件的推薦應用3.1 4A能力組件與推薦應用的關(guān)系
傳統的4A組件只提供4A功能,如用戶(hù)信息、好友信息等,而4A數據的特性讓這些數據可以在更廣泛的應用中使用?;?A能力組件的推薦應用是PaaS云平臺4A能力組件的一個(gè)應用示例。本應用分析4A能力組件中采集的用戶(hù)行為信息,為用戶(hù)推薦PaaS云平臺現有的第三方應用。用戶(hù)可以通過(guò)個(gè)性化服務(wù)快速定位到自己的采集夾。應用程序來(lái)解決人們在訪(fǎng)問(wèn)互聯(lián)網(wǎng)時(shí)面臨的“信息過(guò)載”問(wèn)題。
4A能力組件記錄用戶(hù)使用4A能力組件時(shí)的所有用戶(hù)行為,并提供日志API。根據4A能力組件的特點(diǎn),用戶(hù)行為包括用戶(hù)注冊、用戶(hù)登錄、首次登錄、登錄時(shí)長(cháng)等。此外,在4A能力組件的用戶(hù)門(mén)戶(hù)中,用戶(hù)還可以填寫(xiě)個(gè)人興趣信息以進(jìn)行為個(gè)性化推薦提供直接的數據支持。
推薦的應用程序首先需要連接到 4A 能力組件。訪(fǎng)問(wèn)工作主要由 4A 能力組件的管理員執行,對應用進(jìn)行審核,并為應用分配唯一的應用 ID 和應用密鑰對。然后,被推薦的應用程序可以通過(guò)日志API采集4A組件提供的用戶(hù)行為數據,并基于這些數據進(jìn)行數據處理、用戶(hù)興趣建模和算法推薦。
3.2 推薦應用系統架構
用戶(hù)訪(fǎng)問(wèn)應用程序,通常具有某些偏好。推薦應用根據用戶(hù)注冊的個(gè)人信息定制用戶(hù)描述文件。該文件可以由用戶(hù)主動(dòng)修改或由應用程序自動(dòng)修改。當文件被應用修改時(shí),應用需要采集用戶(hù)行為數據,學(xué)習用戶(hù)興趣,從而調整用戶(hù)興趣模型,完成推薦算法。推薦應用的系統架構如圖所示。推薦過(guò)程分三個(gè)階段完成:數據采集、用戶(hù)建模和個(gè)性化推薦。
圖 3
圖 3
圖3 推薦應用系統架構圖
1) 數據采集階段:該階段根據4A能力組件提供的用戶(hù)信息和用戶(hù)行為信息,完成用戶(hù)行為采集和數據處理。用戶(hù)數據的采集方法包括顯式反饋和隱式反饋。類(lèi)型。明確的反饋需要用戶(hù)主動(dòng)給出反饋和評價(jià)。隱式反饋由應用程序自動(dòng)完成,不會(huì )給用戶(hù)增加額外的負擔。應用程序使用顯式反饋和隱式反饋共同實(shí)現數據采集的過(guò)程。顯式反饋使用填寫(xiě)用戶(hù)信息的方法,隱式反饋調用4A能力組件的日志接口獲取用戶(hù)行為數據。4A能力組件的審計模塊詳細記錄用戶(hù)訪(fǎng)問(wèn)站點(diǎn)的數據,站點(diǎn)上的頁(yè)面每被訪(fǎng)問(wèn)一次,web服務(wù)器在日志中添加一條日志記錄,包括用戶(hù)IP、請求頁(yè)面的用戶(hù)名、應用程序名稱(chēng)、請求時(shí)間和 URL。此外,審計模塊還將完成基本的數據處理。
2) 用戶(hù)興趣建模階段:該階段根據用戶(hù)興趣建立評價(jià)矩陣模型。user-item評估矩陣使用一個(gè)Rm×n矩陣來(lái)表示用戶(hù)模型,其中m是用戶(hù)數,n是項目數。矩陣 R=[rij] 中的每個(gè)元素 rij 代表用戶(hù) i 對項目 j 的評價(jià)結果??,一般為一定實(shí)數范圍內的整數值(如 1~10)。通常越高價(jià)值越高,用戶(hù)對項目的興趣程度越高。這種表示簡(jiǎn)單、直觀(guān),可以直接從顯式反饋采集的信息中生成。
(1)
在本應用中,rij 是用戶(hù) i 在一段時(shí)間內對應用 j 的興趣程度。興趣度的值由用戶(hù)i對應用j的訪(fǎng)問(wèn)次數、訪(fǎng)問(wèn)時(shí)長(cháng)、SSO流程中第一次登錄是否進(jìn)入應用以及是否在此注冊等方面加權應用。
3) 個(gè)性化推薦階段:在這個(gè)階段,根據用戶(hù)相似度得到一組用戶(hù)鄰居。然后根據鄰居用戶(hù),對目標用戶(hù)沒(méi)有評分的物品進(jìn)行預測和評分,返回評分最高的N(Top-N)個(gè)物品。
4。結論
針對現有PaaS平臺開(kāi)放能力的局限性,以及現有應用功能列表4A體系不規范,提出了PaaS云中的4A能力組件。該組件分為賬戶(hù)管理、統一認證、應用授權。、系統審計和 SSO 5 模塊,并通過(guò)開(kāi)放的 API、用戶(hù)門(mén)戶(hù)和管理員門(mén)戶(hù)為開(kāi)發(fā)人員、用戶(hù)和管理員提供豐富和安全的 Web 服務(wù)。根據4A數據的特點(diǎn)和4A能力組件提供的能力,創(chuàng )新設計并實(shí)現了基于4A能力組件的推薦應用。該應用使用用戶(hù)興趣模型和協(xié)同過(guò)濾算法來(lái)實(shí)現對PaaS云平臺現有應用的推薦,同時(shí)也驗證了4A能力組件的可用性及其應用范圍的廣泛性。.
設計并實(shí)現的4A能力組件已應用于北京郵電大學(xué)“云?!盤(pán)aaS平臺,并被平臺上多個(gè)第三方應用使用,如:面向群體的在線(xiàn)知識管理應用及其管理員門(mén)戶(hù)(、)等。第三方應用開(kāi)??發(fā)者通過(guò)使用4A能力組件,簡(jiǎn)化應用開(kāi)發(fā)流程,節省應用開(kāi)發(fā)時(shí)間。PaaS云中的4A能力組件增加了軟件資產(chǎn)的復用,更好地規范了用戶(hù)信息的管理流程,開(kāi)創(chuàng )了用戶(hù)信息管理服務(wù)的新模式。
經(jīng)驗:數據采集技術(shù)包括哪幾方面(優(yōu)缺點(diǎn)分別是什么)
很多人不知道data采集技術(shù)包括哪些,優(yōu)缺點(diǎn),一起來(lái)看看吧!
1、通過(guò)各軟件廠(chǎng)商開(kāi)放的數據接口,可以實(shí)現不同軟件數據的互聯(lián)互通。這是目前最常見(jiàn)的數據連接方式。
2、優(yōu)點(diǎn):接口連接方式數據可靠性和價(jià)值高,一般不會(huì )出現數據重復;通過(guò)該接口可以實(shí)時(shí)傳輸數據,滿(mǎn)足實(shí)時(shí)數據應用的要求。
3、缺點(diǎn):接口開(kāi)發(fā)成本高;(2)需要與多個(gè)軟件廠(chǎng)商協(xié)調,工作量大,容易破解;擴展性低。比如由于新業(yè)務(wù)需要開(kāi)發(fā)每個(gè)軟件系統對于一個(gè)新的業(yè)務(wù)模塊,它和它之間的數據接口大數據平臺也需要做相應的修改和改變,甚至之前的數據接口代碼都要全部翻過(guò)來(lái),工作量大,時(shí)間長(cháng)。
4、機器人是目前比較前沿的軟件數據對接技術(shù),即可以采集客戶(hù)端軟件數據和網(wǎng)站軟件數據。
5、俗稱(chēng)博是小幫手軟件機器人,產(chǎn)品設計原則是“所見(jiàn)即所得”,即無(wú)需軟件廠(chǎng)商合作,采集上的數據軟件界面將被輸出。結果是結構化的數據庫或 Excel 表。
6、如果只需要界面上的業(yè)務(wù)數據,或者軟件廠(chǎng)商不配合/崩潰,數據庫分析困難,最好使用軟件機器人采集數據,尤其是詳情頁(yè)的data采集功能比較有特色。
7、技術(shù)特點(diǎn)是:無(wú)需原軟件廠(chǎng)商的配合;兼容性強,可以采集和匯總Windows平臺上各種軟件系統的數據;輸出結構化數據;即用型,實(shí)現周期短,簡(jiǎn)單高效;配置簡(jiǎn)單,無(wú)需編程,人人都可以DIY一個(gè)軟件機器人;價(jià)格遠低于手動(dòng)和界面。
8、缺點(diǎn):采集軟件數據的實(shí)時(shí)性有限。
9、網(wǎng)絡(luò )爬蟲(chóng)是模擬客戶(hù)端的網(wǎng)絡(luò )請求并接收請求響應,并按照一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。
10、爬蟲(chóng)數據采集缺點(diǎn):輸出數據多為非結構化數據;只能采集網(wǎng)站數據,易受網(wǎng)站反爬機制影響;用戶(hù)臉窄,需要專(zhuān)業(yè)的編程知識才能玩。
11、開(kāi)放式數據庫是采集和整合數據最直接的方式。
12、優(yōu)點(diǎn):開(kāi)放數據庫方式可以直接從目標數據庫中獲取需要的數據,準確率高,實(shí)時(shí)性有保證。這是最直接、最方便的方法。
13、缺點(diǎn):開(kāi)放數據庫模式還需要協(xié)調各個(gè)軟件廠(chǎng)商的數據庫開(kāi)放,這取決于對方的意愿。一般出于安全原因不會(huì )開(kāi)放;如果一個(gè)平臺同時(shí)連接多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)獲取數據,對平臺的性能也是一個(gè)很大的挑戰。 查看全部
完整解決方案:支持推薦應用的PaaS平臺4A能力組件
平臺即服務(wù)(PaaS,platform as a service)作為云計算的一種應用形式,為應用開(kāi)發(fā)者提供高效、安全的應用托管能力[]。隨著(zhù)PaaS云平臺的不斷發(fā)展,平臺能力的豐富性和多樣化已經(jīng)成為PaaS平臺的核心競爭點(diǎn)和關(guān)鍵指標[]。所謂平臺的“能力組件”,主要是指PaaS平臺提供的、可供平臺上其他應用調用的軟件能力。4A是Authentication(認證)。)、Authorization(認證)、Accounting(計費)和Audit(審計)的縮寫(xiě),4A為用戶(hù)提供統一的用戶(hù)身份認證管理,應用訪(fǎng)問(wèn)(access)權限控制,記賬和賬戶(hù)管理,以及基于操作的日志審計等功能。通過(guò)分析PaaS平臺上的應用[-]可以發(fā)現,很多應用都需要基本的4A能力,比如用戶(hù)信息管理、賬戶(hù)管理等。因此,4A能力組件正是在PaaS云平臺中??芍赜玫闹匾M件之一,可有效減少應用程序開(kāi)發(fā)量,增加軟件資產(chǎn)的重用性。同時(shí),豐富強大的平臺能力也可以讓平臺上的應用擁有更豐富、更強大的功能,提高應用競爭力。. 4A能力組件在提供4A能力的同時(shí),還為用戶(hù)提供單點(diǎn)登錄(SSO,single sign on)功能,方便用戶(hù)在各種應用之間無(wú)縫切換,一站式滿(mǎn)足用戶(hù)和應用的需求。提供統一認證、認證管理、賬號管理、審計管理、SSO等功能需求。
1 4A能力組件需求分析
4A能力組件為用戶(hù)提供用戶(hù)注冊、密碼找回、信息管理、計費管理等賬戶(hù)管理相關(guān)功能,提供統一的認證服務(wù),為不同的應用提供認證管理,提供用戶(hù)行為信息的審計管理,支持單點(diǎn)登錄和其他功能。
4A能力組件的應用對象是PaaS云中的應用開(kāi)發(fā)者、應用用戶(hù)和管理員。4A能力組件為應用開(kāi)發(fā)者提供了一個(gè)簡(jiǎn)單、安全、高效的接口,方便開(kāi)發(fā)者使用。為保證一站式服務(wù)用戶(hù)體驗,4A能力組件為應用用戶(hù)和管理員提供用戶(hù)入口和管理員入口,完成對用戶(hù)信息和應用信息的管理。
4A組件的功能主要包括賬戶(hù)管理、認證管理、認證管理、審計管理和SSO。
1) 賬戶(hù)管理:賬戶(hù)管理分為三個(gè)部分。一是基本賬戶(hù)管理,包括用戶(hù)注冊、找回密碼、修改密碼等;二是用戶(hù)信息管理,包括基本用戶(hù)信息(基本用戶(hù)信息、用戶(hù)分機信息和用戶(hù)權限信息)和好友信息(好友信息、朋友關(guān)系和朋友組)。最后是賬單信息,包括用戶(hù)余額和交易詳情。
2) 統一認證:統一認證用于判斷用戶(hù)是否合法。認證過(guò)程通過(guò) OAuth2.0 協(xié)議實(shí)現。應用開(kāi)發(fā)者在使用能力組件提供的開(kāi)放接口之前,需要獲取用戶(hù)的授權憑證access_token。. access_token 是第三方訪(fǎng)問(wèn)用戶(hù)資源的憑證。只有通過(guò)這個(gè)憑證,第三方應用程序才能訪(fǎng)問(wèn) 4A 能力組件中的數據。
3) 應用認證:只有經(jīng)過(guò)系統授權的應用才能獲取用戶(hù)信息。當應用通過(guò)4A能力組件獲取用戶(hù)信息時(shí),會(huì )對第三方應用進(jìn)行授權檢查,未經(jīng)授權的應用不會(huì )獲取任何用戶(hù)信息。
4)系統審計:4A能力組件通過(guò)日志系統記錄用戶(hù)行為和系統操作信息,完成相關(guān)日志的采集、存儲和分析。
5) SSO:SSO 是一種流行的系統集成解決方案。SSO可以保證在多個(gè)應用系統中,用戶(hù)只需要登錄一次就可以訪(fǎng)問(wèn)所有相互信任的應用系統。
2 4A 能力組件設計2.1 系統架構
系統架構圖如圖所示。該系統分為三個(gè)部分。最上層是Web服務(wù)層,即接口服務(wù)器(API Server)和與開(kāi)發(fā)者、用戶(hù)和管理員交互的Web接口。Web服務(wù)層主要負責管理員門(mén)戶(hù),特別是4A能力組件將用戶(hù)門(mén)戶(hù)作為能力組件的第三方應用,不與管理員門(mén)戶(hù)在同一層。. 這是因為管理員門(mén)戶(hù)需要更高的權限,開(kāi)放API不提供相關(guān)功能,調用開(kāi)放API也會(huì )造成效率下降。中間是邏輯功能層,主要完成系統中所有邏輯功能的實(shí)現,包括賬戶(hù)管理、統一認證[]、應用認證、系統審計和SSO[]等。系統的底層是基礎組件層,包括基礎組件和支撐組件?;A組件是系統運行的必備組件,主要包括MySQL、NFS和郵件服務(wù)等。支持組件是支持系統運行的可選組件,主要包括日志系統等。下面將重點(diǎn)介紹日志系統和接口服務(wù)器。
圖1
圖1
圖1 4A能力組件系統架構圖
2.2 日志系統
日志系統是4A能力組件的支撐組件,負責在4A能力組件中記錄用戶(hù)的行為信息,并與4A能力組件中的審計模塊相關(guān)聯(lián)。其系統架構如下圖所示。
圖 2
圖 2
圖2 日志系統架構圖
日志系統支持采集,海量日志數據的存儲和分析。系統提供高性能的日志讀寫(xiě),包括實(shí)時(shí)讀取最新日志和批量讀取歷史數據。日志系統由Kafka分布式消息隊列、HBase分布式數據庫、生產(chǎn)者程序和消費者程序[]組成。生產(chǎn)者程序是4A能力組件中的一個(gè)審計模塊,可以為用戶(hù)提供用戶(hù)行為數據。消費者程序是一個(gè)基于HTTP協(xié)議的API服務(wù)器,日志系統通過(guò)API向4A能力組件提供各種日志信息。

2.3 API 服務(wù)器
4A能力組件提供的開(kāi)放API由4A能力組件中Web服務(wù)層的API Server提供。
2.3.1 API 設計
根據4A能力組件的開(kāi)發(fā)者需求,開(kāi)放API定義為兩類(lèi):
1)用戶(hù)級API:OAuth2.0登錄的用戶(hù),必須攜帶access_token參數。用戶(hù)級 API 主要用于訪(fǎng)問(wèn)個(gè)人用戶(hù)信息。
2)應用級API:用于不使用OAuth2.0登錄并已授權的第三方應用。應用程序級 API 將具有參數 source 而不是參數 access_token。參數 source 是 4A 能力的一個(gè)組成部分 管理員分配給應用的唯一 ID。
根據系統功能,API分為以下7類(lèi):
1) 身份驗證 API:/api/oauth2/" target="_blank">/api/oauth2/。
2) 用戶(hù)關(guān)系 API:/api/friendships/" target="_blank">/api/friendships/。
3) 組 API:/api/friendships/groups/。" target="_blank">/api/friendships/groups/。
4) 用戶(hù)信息 API:/api/users/" target="_blank">/api/users/。
5) 帳戶(hù) 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安全解決方案
為了保證用戶(hù)信息的安全可靠,用戶(hù)級API和應用級API采用不同的安全方案。
1) 用戶(hù)級 API
用戶(hù)級 API 使用 access_token 是否過(guò)期或有效來(lái)判斷用戶(hù)的真實(shí)性,并返回相應的數據。用戶(hù)的access_token僅在用戶(hù)登錄期間有效,有效期為24小時(shí)。
對于OAuth2.0相關(guān)的API,還增加了以下安全措施:
?、?OAuth2.0 獲取參數代碼時(shí),可以添加參數狀態(tài),維護請求和回調的狀態(tài)。當4A能力組件重定向到應用程序時(shí),將返回該參數。開(kāi)發(fā)者可以通過(guò)該參數驗證請求的有效性,從而防止跨站請求偽造攻擊。
?、?OAuth2.0通過(guò)參數code獲取參數access_token時(shí),盡量選擇HTTP協(xié)議的POST方式傳輸請求。
2) 應用程序級 API
應用級API只傳遞參數源作為應用身份的認證是不安全的,所以4A能力組件使用參數簽名來(lái)保護用戶(hù)信息。構造參數簽名的過(guò)程如下:
?、俜诸?lèi)參數:API中攜帶的參數分為系統參數和非系統參數。系統參數包括應用ID(參數來(lái)源)和應用密鑰(與參數來(lái)源唯一匹配)。非系統參數是除系統參數外的所有參數。范圍。

?、?構造源字符串:將所有非系統參數和參數源按名稱(chēng)值升序排列,并用“&”連接,如k1=v1 & k2=v2 & ...,然后執行第一個(gè)MD5加密。
?、?構造密鑰:在應用密鑰末尾添加字符“&”。
?、?生成簽名值簽名:將源字符串和密鑰以“k1=v1 & k2=v2 & ... & secret &”的形式拼接生成一個(gè)新的字符串,再用MD5加密該值。注意連接的順序會(huì )影響最終的簽名值。
4A能力組件的API Server獲取API中的各種參數,按照上述算法進(jìn)行相同的加密過(guò)程。如果得到的簽名值與參數簽名一致,則證明API是安全的。
3 基于4A能力組件的推薦應用3.1 4A能力組件與推薦應用的關(guān)系
傳統的4A組件只提供4A功能,如用戶(hù)信息、好友信息等,而4A數據的特性讓這些數據可以在更廣泛的應用中使用?;?A能力組件的推薦應用是PaaS云平臺4A能力組件的一個(gè)應用示例。本應用分析4A能力組件中采集的用戶(hù)行為信息,為用戶(hù)推薦PaaS云平臺現有的第三方應用。用戶(hù)可以通過(guò)個(gè)性化服務(wù)快速定位到自己的采集夾。應用程序來(lái)解決人們在訪(fǎng)問(wèn)互聯(lián)網(wǎng)時(shí)面臨的“信息過(guò)載”問(wèn)題。
4A能力組件記錄用戶(hù)使用4A能力組件時(shí)的所有用戶(hù)行為,并提供日志API。根據4A能力組件的特點(diǎn),用戶(hù)行為包括用戶(hù)注冊、用戶(hù)登錄、首次登錄、登錄時(shí)長(cháng)等。此外,在4A能力組件的用戶(hù)門(mén)戶(hù)中,用戶(hù)還可以填寫(xiě)個(gè)人興趣信息以進(jìn)行為個(gè)性化推薦提供直接的數據支持。
推薦的應用程序首先需要連接到 4A 能力組件。訪(fǎng)問(wèn)工作主要由 4A 能力組件的管理員執行,對應用進(jìn)行審核,并為應用分配唯一的應用 ID 和應用密鑰對。然后,被推薦的應用程序可以通過(guò)日志API采集4A組件提供的用戶(hù)行為數據,并基于這些數據進(jìn)行數據處理、用戶(hù)興趣建模和算法推薦。
3.2 推薦應用系統架構
用戶(hù)訪(fǎng)問(wèn)應用程序,通常具有某些偏好。推薦應用根據用戶(hù)注冊的個(gè)人信息定制用戶(hù)描述文件。該文件可以由用戶(hù)主動(dòng)修改或由應用程序自動(dòng)修改。當文件被應用修改時(shí),應用需要采集用戶(hù)行為數據,學(xué)習用戶(hù)興趣,從而調整用戶(hù)興趣模型,完成推薦算法。推薦應用的系統架構如圖所示。推薦過(guò)程分三個(gè)階段完成:數據采集、用戶(hù)建模和個(gè)性化推薦。
圖 3
圖 3
圖3 推薦應用系統架構圖
1) 數據采集階段:該階段根據4A能力組件提供的用戶(hù)信息和用戶(hù)行為信息,完成用戶(hù)行為采集和數據處理。用戶(hù)數據的采集方法包括顯式反饋和隱式反饋。類(lèi)型。明確的反饋需要用戶(hù)主動(dòng)給出反饋和評價(jià)。隱式反饋由應用程序自動(dòng)完成,不會(huì )給用戶(hù)增加額外的負擔。應用程序使用顯式反饋和隱式反饋共同實(shí)現數據采集的過(guò)程。顯式反饋使用填寫(xiě)用戶(hù)信息的方法,隱式反饋調用4A能力組件的日志接口獲取用戶(hù)行為數據。4A能力組件的審計模塊詳細記錄用戶(hù)訪(fǎng)問(wèn)站點(diǎn)的數據,站點(diǎn)上的頁(yè)面每被訪(fǎng)問(wèn)一次,web服務(wù)器在日志中添加一條日志記錄,包括用戶(hù)IP、請求頁(yè)面的用戶(hù)名、應用程序名稱(chēng)、請求時(shí)間和 URL。此外,審計模塊還將完成基本的數據處理。
2) 用戶(hù)興趣建模階段:該階段根據用戶(hù)興趣建立評價(jià)矩陣模型。user-item評估矩陣使用一個(gè)Rm×n矩陣來(lái)表示用戶(hù)模型,其中m是用戶(hù)數,n是項目數。矩陣 R=[rij] 中的每個(gè)元素 rij 代表用戶(hù) i 對項目 j 的評價(jià)結果??,一般為一定實(shí)數范圍內的整數值(如 1~10)。通常越高價(jià)值越高,用戶(hù)對項目的興趣程度越高。這種表示簡(jiǎn)單、直觀(guān),可以直接從顯式反饋采集的信息中生成。
(1)
在本應用中,rij 是用戶(hù) i 在一段時(shí)間內對應用 j 的興趣程度。興趣度的值由用戶(hù)i對應用j的訪(fǎng)問(wèn)次數、訪(fǎng)問(wèn)時(shí)長(cháng)、SSO流程中第一次登錄是否進(jìn)入應用以及是否在此注冊等方面加權應用。
3) 個(gè)性化推薦階段:在這個(gè)階段,根據用戶(hù)相似度得到一組用戶(hù)鄰居。然后根據鄰居用戶(hù),對目標用戶(hù)沒(méi)有評分的物品進(jìn)行預測和評分,返回評分最高的N(Top-N)個(gè)物品。
4。結論
針對現有PaaS平臺開(kāi)放能力的局限性,以及現有應用功能列表4A體系不規范,提出了PaaS云中的4A能力組件。該組件分為賬戶(hù)管理、統一認證、應用授權。、系統審計和 SSO 5 模塊,并通過(guò)開(kāi)放的 API、用戶(hù)門(mén)戶(hù)和管理員門(mén)戶(hù)為開(kāi)發(fā)人員、用戶(hù)和管理員提供豐富和安全的 Web 服務(wù)。根據4A數據的特點(diǎn)和4A能力組件提供的能力,創(chuàng )新設計并實(shí)現了基于4A能力組件的推薦應用。該應用使用用戶(hù)興趣模型和協(xié)同過(guò)濾算法來(lái)實(shí)現對PaaS云平臺現有應用的推薦,同時(shí)也驗證了4A能力組件的可用性及其應用范圍的廣泛性。.
設計并實(shí)現的4A能力組件已應用于北京郵電大學(xué)“云?!盤(pán)aaS平臺,并被平臺上多個(gè)第三方應用使用,如:面向群體的在線(xiàn)知識管理應用及其管理員門(mén)戶(hù)(、)等。第三方應用開(kāi)??發(fā)者通過(guò)使用4A能力組件,簡(jiǎn)化應用開(kāi)發(fā)流程,節省應用開(kāi)發(fā)時(shí)間。PaaS云中的4A能力組件增加了軟件資產(chǎn)的復用,更好地規范了用戶(hù)信息的管理流程,開(kāi)創(chuàng )了用戶(hù)信息管理服務(wù)的新模式。
經(jīng)驗:數據采集技術(shù)包括哪幾方面(優(yōu)缺點(diǎn)分別是什么)
很多人不知道data采集技術(shù)包括哪些,優(yōu)缺點(diǎn),一起來(lái)看看吧!
1、通過(guò)各軟件廠(chǎng)商開(kāi)放的數據接口,可以實(shí)現不同軟件數據的互聯(lián)互通。這是目前最常見(jiàn)的數據連接方式。
2、優(yōu)點(diǎn):接口連接方式數據可靠性和價(jià)值高,一般不會(huì )出現數據重復;通過(guò)該接口可以實(shí)時(shí)傳輸數據,滿(mǎn)足實(shí)時(shí)數據應用的要求。
3、缺點(diǎn):接口開(kāi)發(fā)成本高;(2)需要與多個(gè)軟件廠(chǎng)商協(xié)調,工作量大,容易破解;擴展性低。比如由于新業(yè)務(wù)需要開(kāi)發(fā)每個(gè)軟件系統對于一個(gè)新的業(yè)務(wù)模塊,它和它之間的數據接口大數據平臺也需要做相應的修改和改變,甚至之前的數據接口代碼都要全部翻過(guò)來(lái),工作量大,時(shí)間長(cháng)。

4、機器人是目前比較前沿的軟件數據對接技術(shù),即可以采集客戶(hù)端軟件數據和網(wǎng)站軟件數據。
5、俗稱(chēng)博是小幫手軟件機器人,產(chǎn)品設計原則是“所見(jiàn)即所得”,即無(wú)需軟件廠(chǎng)商合作,采集上的數據軟件界面將被輸出。結果是結構化的數據庫或 Excel 表。
6、如果只需要界面上的業(yè)務(wù)數據,或者軟件廠(chǎng)商不配合/崩潰,數據庫分析困難,最好使用軟件機器人采集數據,尤其是詳情頁(yè)的data采集功能比較有特色。
7、技術(shù)特點(diǎn)是:無(wú)需原軟件廠(chǎng)商的配合;兼容性強,可以采集和匯總Windows平臺上各種軟件系統的數據;輸出結構化數據;即用型,實(shí)現周期短,簡(jiǎn)單高效;配置簡(jiǎn)單,無(wú)需編程,人人都可以DIY一個(gè)軟件機器人;價(jià)格遠低于手動(dòng)和界面。
8、缺點(diǎn):采集軟件數據的實(shí)時(shí)性有限。

9、網(wǎng)絡(luò )爬蟲(chóng)是模擬客戶(hù)端的網(wǎng)絡(luò )請求并接收請求響應,并按照一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。
10、爬蟲(chóng)數據采集缺點(diǎn):輸出數據多為非結構化數據;只能采集網(wǎng)站數據,易受網(wǎng)站反爬機制影響;用戶(hù)臉窄,需要專(zhuān)業(yè)的編程知識才能玩。
11、開(kāi)放式數據庫是采集和整合數據最直接的方式。
12、優(yōu)點(diǎn):開(kāi)放數據庫方式可以直接從目標數據庫中獲取需要的數據,準確率高,實(shí)時(shí)性有保證。這是最直接、最方便的方法。
13、缺點(diǎn):開(kāi)放數據庫模式還需要協(xié)調各個(gè)軟件廠(chǎng)商的數據庫開(kāi)放,這取決于對方的意愿。一般出于安全原因不會(huì )開(kāi)放;如果一個(gè)平臺同時(shí)連接多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)獲取數據,對平臺的性能也是一個(gè)很大的挑戰。
總結:連載|淺談紅隊中的外網(wǎng)信息收集(一)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 138 次瀏覽 ? 2022-09-28 00:06
文章首次發(fā)表于:
火線(xiàn)區社區()
前言
最近一直在整理總結以往學(xué)過(guò)的關(guān)于紅隊的知識點(diǎn)。這里我主要指的是ATT&CK矩陣模型,不過(guò)做了簡(jiǎn)化,增加了一些國內獨有的情況。
一般會(huì )按照外網(wǎng)信息采集、管理、權限維護、權限升級、內網(wǎng)信息采集、橫向移動(dòng)、痕跡清理的順序進(jìn)行。
因為是總結文章,所以文章的重點(diǎn)是在“面”上而不是在具體的“點(diǎn)”上,所以文中的具體技術(shù)細節不再贅述,否則內容會(huì )有很多。
想了解具體細節的讀者可以去我個(gè)人公眾號TeamsSix的歷史文章,里面會(huì )有一些點(diǎn)的描述文章。
限于個(gè)人水平,文中難免有錯誤或不恰當的描述,希望在評論中指出,希望理解。
確定目標
在開(kāi)始信息采集之前,您必須首先確定目標。在紅隊項目或HW項目中,一般目標是公司名稱(chēng),然后通過(guò)公司名稱(chēng)獲取各種信息,進(jìn)而進(jìn)行外網(wǎng)管理、內網(wǎng)穿透等。
知道了目標公司的名稱(chēng)后,我們就可以開(kāi)始采集信息的工作了。
外網(wǎng)信息采集
在這里我整理了以下信息采集的方法。當然,它肯定是不完整的。歡迎大家在評論區一起補充討論:
1、組織所有權結構
拿到公司名稱(chēng)后,先別急著(zhù)查記錄找域名,而是先看公司的股權結構,因為一般一家公司的子公司也可以瞄準,但有時(shí)需要50%的股份。股份或100%持股,視實(shí)際情況而定。
比較常見(jiàn)的網(wǎng)站查詢(xún)公司組織股權結構的有天眼查、七叉叉、愛(ài)七叉、小藍本、釘釘七點(diǎn)等。
如果標的控股公司不多,可以直接看股權滲透圖,比較直觀(guān);如果控股公司多,看股權滲透圖就比較費勁了。
除了股權滲透,還可以看到它的外資信息
在這兩個(gè)地方都可以找到目標持股的公司。
目標少一點(diǎn)沒(méi)關(guān)系,一個(gè)一個(gè)的,但是目標太多了,效率就會(huì )很低。幸運的是,現在有現成的工具。
ENScanGo
ENScanGo 是現有開(kāi)源項目 ENScan 的升級版。工具地址為:
這是沃爾夫集團安全團隊Keac先生為解決企業(yè)信息采集難的問(wèn)題而編寫(xiě)的工具。一鍵采集標的及其控股公司的ICP備案、APP、小程序、微信公眾號等信息。然后聚合導出。
比如這里我采集的信息是“北京百度網(wǎng)通科技有限公司”。以及他持有50%股份的公司。
enscan -n 北京百度網(wǎng)訊科技有限公司 -invest-num 50
采集到的結果如下:
這樣就直接省略了采集ICP備案的步驟,可以一鍵獲取目標公司及其子公司的公司名稱(chēng)、APP、微信公眾號、ICP備案等信息。
2、主域名查詢(xún)
主域名查詢(xún)可分為注冊域名查詢(xún)和未注冊域名查詢(xún)。
記錄域名查詢(xún)
除了上述企業(yè)信息查詢(xún)網(wǎng)站獲得的備案信息外,最完整、最準確的方法是去國家備案信息查詢(xún)網(wǎng)站查詢(xún),地址為:。
除了官方渠道,還有一些第三方注冊域名查詢(xún)網(wǎng)站,比如站長(cháng)之家等。
未注冊域名查詢(xún)
一些公司會(huì )將他們的其他業(yè)務(wù)站點(diǎn)放在 網(wǎng)站 的末尾,其中可能收錄未記錄的站點(diǎn)。
3、子域獲取
比較常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目標,也可以提前采集一波子域,然后在項目即將啟動(dòng)的時(shí)候再采集一波子域,比較兩次采集的結果,優(yōu)先新的子域。
4、端口掃描
一般來(lái)說(shuō),最常見(jiàn)的是nmap和masscan。這是一個(gè) 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
不過(guò)除了這些方法,fscan其實(shí)還可以用于外網(wǎng)的端口掃描,而且速度更快。
例如,使用 fscan 只掃描端口,而不是掃描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默認線(xiàn)程是600,因為外網(wǎng)掃描600的線(xiàn)程比較大,所以這里設置為100。如果掃描結果不理想,可以將線(xiàn)程設置得更小。
端口掃描可以與空間搜索引擎的結果相結合。如果空間搜索引擎發(fā)現目標中有很多高級端口,那么在進(jìn)行端口掃描時(shí)記得添加這些高級端口。
5、指紋識別
指紋識別對我來(lái)說(shuō)是很重要的一點(diǎn),因為指紋識別的結果對管理很有幫助,可以讓管理更有針對性,同時(shí)也可以節省很多時(shí)間。
比較常見(jiàn)的在線(xiàn)指紋查詢(xún)網(wǎng)站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空間搜索引擎
通過(guò)使用空間搜索引擎,您有時(shí)可以在首次識別目標時(shí)發(fā)現目標弱點(diǎn)。
目前比較常見(jiàn)的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鷹、智創(chuàng )宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer為圖形界面,使用友好。
下載鏈接:
FofaX 是一個(gè)命令行界面。FofaX 可以與其他工具結合使用。除了這兩個(gè)工具調用Fofa接口外,上面提到的Ehole還可以調用Fofa查詢(xún)。
坤宇調用ZoomEye的接口,工具下載地址:
7、api接口
獲取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果發(fā)現一些未經(jīng)授權的接口,可能會(huì )獲得一些高價(jià)值的信息,例如大量敏感信息泄露。
另外,在翻轉js文件的時(shí)候,可以注意是否有以runtime命名的js文件,因為這個(gè)js文件會(huì )收錄其他js文件的名字(包括當前頁(yè)面沒(méi)有加載的js文件),所以使用運行時(shí)js文件我發(fā)現了更多的js文件,這使得找到api接口的概率更高。
8、目錄訪(fǎng)問(wèn)
比較常用的目錄掃描工具有dirsearch、ffuf
ffuf 更側重于 FFUZ,但無(wú)論是目錄掃描還是 FFUZ,掃描的結果都是字典,Github 上超過(guò) 4k 個(gè)star 的字典:
9、郵箱地址獲取
郵件地址比較常用的方法是通過(guò)搜索引擎直接找到網(wǎng)上公開(kāi)的郵件信息,往往指向目標的網(wǎng)站,例如目標的某個(gè)網(wǎng)頁(yè)的附件中收錄email和其他信息。
此外,您還可以使用Github在代碼中搜索目標公司的開(kāi)發(fā)人員評論的郵箱信息。其實(shí)我不明白為什么開(kāi)發(fā)者喜歡在代碼中評論自己的郵箱。
也可以通過(guò)LinkedIn找到目標公司的員工姓名,通過(guò)“拼音+@公司域名”的方式構建員工郵箱。
還有一些網(wǎng)站可以查詢(xún)郵箱,比較方便,比如下面的網(wǎng)站:
另外,如果采集到目標Outlook站點(diǎn),也可以嘗試爆破郵箱用戶(hù)名。
10、網(wǎng)盤(pán)信息
有時(shí)候可以在網(wǎng)盤(pán)資料中找到很多好東西,這樣的網(wǎng)站還有很多。在愛(ài)達雜貨店導航站可以找到很多網(wǎng)盤(pán)搜索網(wǎng)站。
11、附加信息
其他信息,如app、小程序、供應商、外包合作伙伴、公眾號等,都可以從上面的組織股權結構類(lèi)網(wǎng)站中或多或少的查詢(xún)到,也可以使用ENScan。
其中,供應商和外包合作伙伴值得注意。如果拿下供應商,或許可以直接進(jìn)入目標內網(wǎng)。如果贏(yíng)得外包合作伙伴,可以利用這一層關(guān)系進(jìn)行社會(huì )工作或嘗試進(jìn)入目標內網(wǎng)。
后記
當然,紅隊中采集的信息遠不止上面所說(shuō)的。其他常用的還有資產(chǎn)監控平臺、社會(huì )工程庫、自動(dòng)化信息采集工具(如水澤)、各種內部紅隊平臺等,篇幅有限。再次展開(kāi)。
美好的過(guò)去文章
技巧:下載自媒體內容素材,幫你快速創(chuàng )造內容
下載自媒體內容材料,幫助您快速創(chuàng )建內容。在這個(gè)自媒體飛速發(fā)展的時(shí)代,大家都在這方面發(fā)展,但是對于一些新手來(lái)說(shuō),如何進(jìn)行內容創(chuàng )作就成了一個(gè)難題,因為大家的知識儲備都不是很豐富,經(jīng)常會(huì )遇到?jīng)]有靈感的情況。
對于這種情況,我們有一個(gè)很好的解決辦法,就是找內容素材。內容素材的采集可以參考以下方法,一起來(lái)看看吧。
第一個(gè):使用工具采集材料
當大家想到工具采集材質(zhì)的時(shí)候,首先想到的就是一轉,因為一轉已經(jīng)是家喻戶(hù)曉的材質(zhì)采集工具,它可以用于采集視頻和文章素材,沒(méi)有靈感的時(shí)候可以去一轉搜索相關(guān)關(guān)鍵詞,可以找到相關(guān)素材,還可以選擇時(shí)間和平臺材料發(fā)布。
二:搜索引擎找素材
這種找素材的方法也是比較常用的方法,很多人習慣直接去百度找素材。對于需要少量素材的自媒體的人來(lái)說(shuō)也比較方便。選擇您自己的主題。
第三:微博熱搜榜
一般來(lái)說(shuō),關(guān)注微博熱搜榜自媒體的人往往更多地在娛樂(lè )和社交領(lǐng)域。微博有實(shí)時(shí)列表。如果根據熱點(diǎn)進(jìn)行創(chuàng )作,你的流量肯定會(huì )增加。會(huì )很大,其他領(lǐng)域的作者也可以試試。
第四:知乎
知乎也是不錯的素材采集,知乎素材很多,是一個(gè)問(wèn)答平臺,里面的答案也很精彩,你可以直接搜索相關(guān)知識,相信你會(huì )有所收獲。大家素材采集完成后,可以直接使用易小兒一鍵發(fā)視頻或者文章,省心省力。 查看全部
總結:連載|淺談紅隊中的外網(wǎng)信息收集(一)
文章首次發(fā)表于:
火線(xiàn)區社區()
前言
最近一直在整理總結以往學(xué)過(guò)的關(guān)于紅隊的知識點(diǎn)。這里我主要指的是ATT&CK矩陣模型,不過(guò)做了簡(jiǎn)化,增加了一些國內獨有的情況。
一般會(huì )按照外網(wǎng)信息采集、管理、權限維護、權限升級、內網(wǎng)信息采集、橫向移動(dòng)、痕跡清理的順序進(jìn)行。
因為是總結文章,所以文章的重點(diǎn)是在“面”上而不是在具體的“點(diǎn)”上,所以文中的具體技術(shù)細節不再贅述,否則內容會(huì )有很多。
想了解具體細節的讀者可以去我個(gè)人公眾號TeamsSix的歷史文章,里面會(huì )有一些點(diǎn)的描述文章。
限于個(gè)人水平,文中難免有錯誤或不恰當的描述,希望在評論中指出,希望理解。
確定目標
在開(kāi)始信息采集之前,您必須首先確定目標。在紅隊項目或HW項目中,一般目標是公司名稱(chēng),然后通過(guò)公司名稱(chēng)獲取各種信息,進(jìn)而進(jìn)行外網(wǎng)管理、內網(wǎng)穿透等。
知道了目標公司的名稱(chēng)后,我們就可以開(kāi)始采集信息的工作了。
外網(wǎng)信息采集
在這里我整理了以下信息采集的方法。當然,它肯定是不完整的。歡迎大家在評論區一起補充討論:
1、組織所有權結構
拿到公司名稱(chēng)后,先別急著(zhù)查記錄找域名,而是先看公司的股權結構,因為一般一家公司的子公司也可以瞄準,但有時(shí)需要50%的股份。股份或100%持股,視實(shí)際情況而定。
比較常見(jiàn)的網(wǎng)站查詢(xún)公司組織股權結構的有天眼查、七叉叉、愛(ài)七叉、小藍本、釘釘七點(diǎn)等。
如果標的控股公司不多,可以直接看股權滲透圖,比較直觀(guān);如果控股公司多,看股權滲透圖就比較費勁了。
除了股權滲透,還可以看到它的外資信息
在這兩個(gè)地方都可以找到目標持股的公司。
目標少一點(diǎn)沒(méi)關(guān)系,一個(gè)一個(gè)的,但是目標太多了,效率就會(huì )很低。幸運的是,現在有現成的工具。
ENScanGo
ENScanGo 是現有開(kāi)源項目 ENScan 的升級版。工具地址為:
這是沃爾夫集團安全團隊Keac先生為解決企業(yè)信息采集難的問(wèn)題而編寫(xiě)的工具。一鍵采集標的及其控股公司的ICP備案、APP、小程序、微信公眾號等信息。然后聚合導出。
比如這里我采集的信息是“北京百度網(wǎng)通科技有限公司”。以及他持有50%股份的公司。

enscan -n 北京百度網(wǎng)訊科技有限公司 -invest-num 50
采集到的結果如下:
這樣就直接省略了采集ICP備案的步驟,可以一鍵獲取目標公司及其子公司的公司名稱(chēng)、APP、微信公眾號、ICP備案等信息。
2、主域名查詢(xún)
主域名查詢(xún)可分為注冊域名查詢(xún)和未注冊域名查詢(xún)。
記錄域名查詢(xún)
除了上述企業(yè)信息查詢(xún)網(wǎng)站獲得的備案信息外,最完整、最準確的方法是去國家備案信息查詢(xún)網(wǎng)站查詢(xún),地址為:。
除了官方渠道,還有一些第三方注冊域名查詢(xún)網(wǎng)站,比如站長(cháng)之家等。
未注冊域名查詢(xún)
一些公司會(huì )將他們的其他業(yè)務(wù)站點(diǎn)放在 網(wǎng)站 的末尾,其中可能收錄未記錄的站點(diǎn)。
3、子域獲取
比較常用的工具是 OneForAll,除了 amass、subfinder、xray、ksubdomain 等。
如果提前知道目標,也可以提前采集一波子域,然后在項目即將啟動(dòng)的時(shí)候再采集一波子域,比較兩次采集的結果,優(yōu)先新的子域。
4、端口掃描
一般來(lái)說(shuō),最常見(jiàn)的是nmap和masscan。這是一個(gè) 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
不過(guò)除了這些方法,fscan其實(shí)還可以用于外網(wǎng)的端口掃描,而且速度更快。
例如,使用 fscan 只掃描端口,而不是掃描漏洞
fscan -hf hosts.txt --nopoc -t 100
fscan的默認線(xiàn)程是600,因為外網(wǎng)掃描600的線(xiàn)程比較大,所以這里設置為100。如果掃描結果不理想,可以將線(xiàn)程設置得更小。
端口掃描可以與空間搜索引擎的結果相結合。如果空間搜索引擎發(fā)現目標中有很多高級端口,那么在進(jìn)行端口掃描時(shí)記得添加這些高級端口。
5、指紋識別
指紋識別對我來(lái)說(shuō)是很重要的一點(diǎn),因為指紋識別的結果對管理很有幫助,可以讓管理更有針對性,同時(shí)也可以節省很多時(shí)間。
比較常見(jiàn)的在線(xiàn)指紋查詢(xún)網(wǎng)站包括godeye、云曦,以及observer_ward、Ehole等工具。
6、空間搜索引擎
通過(guò)使用空間搜索引擎,您有時(shí)可以在首次識別目標時(shí)發(fā)現目標弱點(diǎn)。

目前比較常見(jiàn)的太空搜索引擎有Fofa、Shodan、360夸克、奇安信全球鷹、智創(chuàng )宇ZoomEye等。
常用工具有Fofa_Viewer、FofaX、Kunyu,其中Fofa_Viewer為圖形界面,使用友好。
下載鏈接:
FofaX 是一個(gè)命令行界面。FofaX 可以與其他工具結合使用。除了這兩個(gè)工具調用Fofa接口外,上面提到的Ehole還可以調用Fofa查詢(xún)。
坤宇調用ZoomEye的接口,工具下載地址:
7、api接口
獲取api接口常用的工具有jsinfo、findsomething、jsfinder、BurpJSLinkFinder等。
如果發(fā)現一些未經(jīng)授權的接口,可能會(huì )獲得一些高價(jià)值的信息,例如大量敏感信息泄露。
另外,在翻轉js文件的時(shí)候,可以注意是否有以runtime命名的js文件,因為這個(gè)js文件會(huì )收錄其他js文件的名字(包括當前頁(yè)面沒(méi)有加載的js文件),所以使用運行時(shí)js文件我發(fā)現了更多的js文件,這使得找到api接口的概率更高。
8、目錄訪(fǎng)問(wèn)
比較常用的目錄掃描工具有dirsearch、ffuf
ffuf 更側重于 FFUZ,但無(wú)論是目錄掃描還是 FFUZ,掃描的結果都是字典,Github 上超過(guò) 4k 個(gè)star 的字典:
9、郵箱地址獲取
郵件地址比較常用的方法是通過(guò)搜索引擎直接找到網(wǎng)上公開(kāi)的郵件信息,往往指向目標的網(wǎng)站,例如目標的某個(gè)網(wǎng)頁(yè)的附件中收錄email和其他信息。
此外,您還可以使用Github在代碼中搜索目標公司的開(kāi)發(fā)人員評論的郵箱信息。其實(shí)我不明白為什么開(kāi)發(fā)者喜歡在代碼中評論自己的郵箱。
也可以通過(guò)LinkedIn找到目標公司的員工姓名,通過(guò)“拼音+@公司域名”的方式構建員工郵箱。
還有一些網(wǎng)站可以查詢(xún)郵箱,比較方便,比如下面的網(wǎng)站:
另外,如果采集到目標Outlook站點(diǎn),也可以嘗試爆破郵箱用戶(hù)名。
10、網(wǎng)盤(pán)信息
有時(shí)候可以在網(wǎng)盤(pán)資料中找到很多好東西,這樣的網(wǎng)站還有很多。在愛(ài)達雜貨店導航站可以找到很多網(wǎng)盤(pán)搜索網(wǎng)站。
11、附加信息
其他信息,如app、小程序、供應商、外包合作伙伴、公眾號等,都可以從上面的組織股權結構類(lèi)網(wǎng)站中或多或少的查詢(xún)到,也可以使用ENScan。
其中,供應商和外包合作伙伴值得注意。如果拿下供應商,或許可以直接進(jìn)入目標內網(wǎng)。如果贏(yíng)得外包合作伙伴,可以利用這一層關(guān)系進(jìn)行社會(huì )工作或嘗試進(jìn)入目標內網(wǎng)。
后記
當然,紅隊中采集的信息遠不止上面所說(shuō)的。其他常用的還有資產(chǎn)監控平臺、社會(huì )工程庫、自動(dòng)化信息采集工具(如水澤)、各種內部紅隊平臺等,篇幅有限。再次展開(kāi)。
美好的過(guò)去文章
技巧:下載自媒體內容素材,幫你快速創(chuàng )造內容
下載自媒體內容材料,幫助您快速創(chuàng )建內容。在這個(gè)自媒體飛速發(fā)展的時(shí)代,大家都在這方面發(fā)展,但是對于一些新手來(lái)說(shuō),如何進(jìn)行內容創(chuàng )作就成了一個(gè)難題,因為大家的知識儲備都不是很豐富,經(jīng)常會(huì )遇到?jīng)]有靈感的情況。
對于這種情況,我們有一個(gè)很好的解決辦法,就是找內容素材。內容素材的采集可以參考以下方法,一起來(lái)看看吧。
第一個(gè):使用工具采集材料

當大家想到工具采集材質(zhì)的時(shí)候,首先想到的就是一轉,因為一轉已經(jīng)是家喻戶(hù)曉的材質(zhì)采集工具,它可以用于采集視頻和文章素材,沒(méi)有靈感的時(shí)候可以去一轉搜索相關(guān)關(guān)鍵詞,可以找到相關(guān)素材,還可以選擇時(shí)間和平臺材料發(fā)布。
二:搜索引擎找素材
這種找素材的方法也是比較常用的方法,很多人習慣直接去百度找素材。對于需要少量素材的自媒體的人來(lái)說(shuō)也比較方便。選擇您自己的主題。
第三:微博熱搜榜

一般來(lái)說(shuō),關(guān)注微博熱搜榜自媒體的人往往更多地在娛樂(lè )和社交領(lǐng)域。微博有實(shí)時(shí)列表。如果根據熱點(diǎn)進(jìn)行創(chuàng )作,你的流量肯定會(huì )增加。會(huì )很大,其他領(lǐng)域的作者也可以試試。
第四:知乎
知乎也是不錯的素材采集,知乎素材很多,是一個(gè)問(wèn)答平臺,里面的答案也很精彩,你可以直接搜索相關(guān)知識,相信你會(huì )有所收獲。大家素材采集完成后,可以直接使用易小兒一鍵發(fā)視頻或者文章,省心省力。
秘密:如何對專(zhuān)屬SRC進(jìn)行信息收集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2022-09-27 23:15
前言
一直覺(jué)得自己的資料采集不太好,最近才在挖獨家。順便總結一下公司的信息采集方式
以xxx公司為例
根域名:
涉及本公司的部分已經(jīng)編碼,補充部分使用一定的安心和一定的度數
一、子域集合1.Oneforall
盡量把API湊齊,如果fofa可以請大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
運行后會(huì )生成兩個(gè)txt文本,JSurl.txt是URL,里面會(huì )有一些接口,
JSdomain.txt 是一個(gè)子域
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 環(huán)境中
卡利:
<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
非常好用的域名搜索網(wǎng)站,還會(huì )自動(dòng)匯總同一個(gè)IP的多個(gè)域名
7.在線(xiàn)域名爆炸
8. 小藍圖
9.谷歌語(yǔ)法
谷歌/必應:網(wǎng)站:
<p style="outline: 0px;">site:xxx.cn</p>
如果你發(fā)現很多檢索到的結果都是www,那是眾所周知的,主站點(diǎn)一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
結果會(huì )自動(dòng)刪除www
然后一一減去網(wǎng)站
二、公眾號采集1.搜狗搜索引擎
2.企業(yè)叉叉
三、微信小程序七叉戟
愛(ài)奇茶之類(lèi)的都可以用,但是我發(fā)現愛(ài)奇茶找到的奇茶并不多,不過(guò)大家都可以試試
四、 應用程序1.小藍圖
2.企業(yè)叉叉
3.浸
4.七麥
七麥也可以在這里切換蘋(píng)果和安卓
然后獲取下載鏈接下載apk并扔進(jìn)模擬器
五、 指紋識別1. BugScaner
主站不識別,其他分站可以扔進(jìn)去看看
2.潮汐指紋
3.Kscan
此工具需要go環(huán)境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github
github敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區。安全意識薄弱的同事經(jīng)常將公司代碼、各種服務(wù)賬號等極其敏感的信息“開(kāi)源”到github。
這里可以使用github找到帶有這個(gè)關(guān)鍵字的代碼,這樣可以采集到更廣泛的方面
2.網(wǎng)盤(pán)搜索
很多磁盤(pán):
磁盤(pán)搜搜:
磁盤(pán)搜索:
凌云峰搜索:
直接輸入廠(chǎng)家名稱(chēng),然后搜索看看源代碼是否泄露,或者什么賬號密碼之類(lèi)的
3.路徑掃描
404,403頁(yè),并不是真的什么都沒(méi)有,需要一層一層的fuzz,一層一層的往下掃
工具:
1.目錄搜索
2.劍
3.7kbscan
當每個(gè)工具掃描同一個(gè)站點(diǎn)時(shí),會(huì )顯示不同的路徑。建議掃描所有三個(gè)工具。
找到一些其他的東西,比如背景、登錄系統等。你可以使用 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.基于證書(shū)
5. 查找 網(wǎng)站
這個(gè)圖標基于 shodan
Shodan搜索中有一個(gè)網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以用這個(gè)語(yǔ)法搜索網(wǎng)站
使用相同圖標的圖標
因為哈希是一個(gè)未知的隨機數
所以通過(guò)輸入某個(gè)hash值來(lái)搜索指定圖標的網(wǎng)站是不可能的
只有查看一個(gè)已經(jīng)被Shodan收錄使用過(guò)的網(wǎng)站的hash值,才能進(jìn)一步得到所有帶有某個(gè)圖標的網(wǎng)站。
那么這里的用法就很有限了,你只能?chē)L試找到你需要找到的網(wǎng)站,因為Shodan不一定收錄你要搜索的網(wǎng)站。
那么如果Shodan收錄有某個(gè)ip,并且這個(gè)服務(wù)器有某個(gè)圖標,我可以搜索所有有這個(gè)圖標的服務(wù)器ip嗎?答案是肯定的。
以百度為例,這里是一個(gè)ip為180.97.34.35的服務(wù)器,截圖如下
如果我想搜索所有帶有這個(gè)圖標的ip地址,我可以先在Shodan中搜索這個(gè)ip
在此之前我沒(méi)有注意到的一件事是 Shodan 的原創(chuàng )數據(Raw Data)函數
點(diǎn)擊詳情中的查看原創(chuàng )數據,打開(kāi)原創(chuàng )數據,可以看到Shodan存儲的這個(gè)ip的所有信息。因為東西太多,就不一一截圖了
這里我們需要用到這個(gè)關(guān)于圖標hash的字段,data。0.http.favicon.hash,
如圖
可以看到結果是-1507567067,
知識和經(jīng)驗:信息采集
這個(gè)功能是第一個(gè)數據采集功能,我也做了一個(gè)用于第二個(gè)整理:存檔
如果你有更好的想法和使用方法,歡迎交流
---
以obsidian作為數據處理中心,支持日常工作采集和一鍵生成tick list to-do
支持的采集方式:
1、選擇文字快速采集
2、OCR識別與采集
3、截圖集
4、快速文件采集
操作方法:復制文件或文件夾,可以快速將文件分類(lèi)成黑曜石。如果是文件夾,會(huì )自動(dòng)刪除文件夾,按文件采集
5、數學(xué)公式快速采集(使用默認界面,每次識別花費Q豆)
6、生成待辦事項并設置提醒時(shí)間
一鍵生成文本待辦,并在tick list中回寫(xiě)黑曜石鏈接
一鍵生成文件待辦,在tick列表中回寫(xiě)黑曜石鏈接
7、結合手機日歷功能,可實(shí)現手機自動(dòng)提醒,華為手機可一次性播放日歷內容,使用更方便!
使用前需要下載tick list、obsidian、需要設置的日歷文件夾、附件存放文件夾 查看全部
秘密:如何對專(zhuān)屬SRC進(jìn)行信息收集
前言
一直覺(jué)得自己的資料采集不太好,最近才在挖獨家。順便總結一下公司的信息采集方式
以xxx公司為例
根域名:
涉及本公司的部分已經(jīng)編碼,補充部分使用一定的安心和一定的度數
一、子域集合1.Oneforall
盡量把API湊齊,如果fofa可以請大佬借用API,越多越好
<p style="outline: 0px;visibility: visible;">python3 oneforall.py --target xxx.cn run</p>
2.JSFinder
JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中查找URL和子域的工具
<p style="outline: 0px;">python3 JSFinder.py -u http://www.xxx.cn -d -ou JSurl.txt -os JSdomain.txt</p>
運行后會(huì )生成兩個(gè)txt文本,JSurl.txt是URL,里面會(huì )有一些接口,
JSdomain.txt 是一個(gè)子域
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 環(huán)境中
卡利:
<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
非常好用的域名搜索網(wǎng)站,還會(huì )自動(dòng)匯總同一個(gè)IP的多個(gè)域名
7.在線(xiàn)域名爆炸
8. 小藍圖
9.谷歌語(yǔ)法
谷歌/必應:網(wǎng)站:

<p style="outline: 0px;">site:xxx.cn</p>
如果你發(fā)現很多檢索到的結果都是www,那是眾所周知的,主站點(diǎn)一般都是非常防御性的。如果不想看主站,可以直接-www
<p style="outline: 0px;">site:xxx.cn -www</p>
結果會(huì )自動(dòng)刪除www
然后一一減去網(wǎng)站
二、公眾號采集1.搜狗搜索引擎
2.企業(yè)叉叉
三、微信小程序七叉戟
愛(ài)奇茶之類(lèi)的都可以用,但是我發(fā)現愛(ài)奇茶找到的奇茶并不多,不過(guò)大家都可以試試
四、 應用程序1.小藍圖
2.企業(yè)叉叉
3.浸
4.七麥
七麥也可以在這里切換蘋(píng)果和安卓
然后獲取下載鏈接下載apk并扔進(jìn)模擬器
五、 指紋識別1. BugScaner
主站不識別,其他分站可以扔進(jìn)去看看
2.潮汐指紋
3.Kscan
此工具需要go環(huán)境
<p style="outline: 0px;">kscan -t www.baidu.com</p>
六、敏感信息采集1.github

github敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區。安全意識薄弱的同事經(jīng)常將公司代碼、各種服務(wù)賬號等極其敏感的信息“開(kāi)源”到github。
這里可以使用github找到帶有這個(gè)關(guān)鍵字的代碼,這樣可以采集到更廣泛的方面
2.網(wǎng)盤(pán)搜索
很多磁盤(pán):
磁盤(pán)搜搜:
磁盤(pán)搜索:
凌云峰搜索:
直接輸入廠(chǎng)家名稱(chēng),然后搜索看看源代碼是否泄露,或者什么賬號密碼之類(lèi)的
3.路徑掃描
404,403頁(yè),并不是真的什么都沒(méi)有,需要一層一層的fuzz,一層一層的往下掃
工具:
1.目錄搜索
2.劍
3.7kbscan
當每個(gè)工具掃描同一個(gè)站點(diǎn)時(shí),會(huì )顯示不同的路徑。建議掃描所有三個(gè)工具。
找到一些其他的東西,比如背景、登錄系統等。你可以使用 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.基于證書(shū)
5. 查找 網(wǎng)站
這個(gè)圖標基于 shodan
Shodan搜索中有一個(gè)網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以用這個(gè)語(yǔ)法搜索網(wǎng)站
使用相同圖標的圖標
因為哈希是一個(gè)未知的隨機數
所以通過(guò)輸入某個(gè)hash值來(lái)搜索指定圖標的網(wǎng)站是不可能的
只有查看一個(gè)已經(jīng)被Shodan收錄使用過(guò)的網(wǎng)站的hash值,才能進(jìn)一步得到所有帶有某個(gè)圖標的網(wǎng)站。
那么這里的用法就很有限了,你只能?chē)L試找到你需要找到的網(wǎng)站,因為Shodan不一定收錄你要搜索的網(wǎng)站。
那么如果Shodan收錄有某個(gè)ip,并且這個(gè)服務(wù)器有某個(gè)圖標,我可以搜索所有有這個(gè)圖標的服務(wù)器ip嗎?答案是肯定的。
以百度為例,這里是一個(gè)ip為180.97.34.35的服務(wù)器,截圖如下
如果我想搜索所有帶有這個(gè)圖標的ip地址,我可以先在Shodan中搜索這個(gè)ip
在此之前我沒(méi)有注意到的一件事是 Shodan 的原創(chuàng )數據(Raw Data)函數
點(diǎn)擊詳情中的查看原創(chuàng )數據,打開(kāi)原創(chuàng )數據,可以看到Shodan存儲的這個(gè)ip的所有信息。因為東西太多,就不一一截圖了
這里我們需要用到這個(gè)關(guān)于圖標hash的字段,data。0.http.favicon.hash,
如圖
可以看到結果是-1507567067,
知識和經(jīng)驗:信息采集
這個(gè)功能是第一個(gè)數據采集功能,我也做了一個(gè)用于第二個(gè)整理:存檔
如果你有更好的想法和使用方法,歡迎交流
---
以obsidian作為數據處理中心,支持日常工作采集和一鍵生成tick list to-do
支持的采集方式:
1、選擇文字快速采集

2、OCR識別與采集
3、截圖集
4、快速文件采集
操作方法:復制文件或文件夾,可以快速將文件分類(lèi)成黑曜石。如果是文件夾,會(huì )自動(dòng)刪除文件夾,按文件采集
5、數學(xué)公式快速采集(使用默認界面,每次識別花費Q豆)
6、生成待辦事項并設置提醒時(shí)間
一鍵生成文本待辦,并在tick list中回寫(xiě)黑曜石鏈接

一鍵生成文件待辦,在tick列表中回寫(xiě)黑曜石鏈接
7、結合手機日歷功能,可實(shí)現手機自動(dòng)提醒,華為手機可一次性播放日歷內容,使用更方便!
使用前需要下載tick list、obsidian、需要設置的日歷文件夾、附件存放文件夾
官方數據:爬蟲(chóng)數據采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-09-26 07:16
經(jīng)常有小伙伴需要將互聯(lián)網(wǎng)上的數據保存在本地,但又不想一一復制。我們首先想到的就是爬蟲(chóng),可以說(shuō)是組成了我們精彩的互聯(lián)網(wǎng)世界。
網(wǎng)絡(luò )搜索引擎和其他一些網(wǎng)站使用網(wǎng)絡(luò )爬蟲(chóng)或蜘蛛軟件來(lái)更新他們的網(wǎng)絡(luò )內容或其他網(wǎng)站網(wǎng)絡(luò )內容索引。網(wǎng)絡(luò )爬蟲(chóng)復制頁(yè)面以供搜索引擎處理,搜索引擎將下載的頁(yè)面編入索引,以便用戶(hù)更有效地搜索。
這一切都歸功于爬蟲(chóng)數據采集。在這篇文章我總結了爬蟲(chóng)數據采集的過(guò)程,從最簡(jiǎn)單的基礎爬蟲(chóng)開(kāi)始,到爬蟲(chóng)獲取到的數據采集如何存儲,我們如何規避它。采取一些反爬措施,獲取我們需要的數據,進(jìn)行爬蟲(chóng)的數據采集:
通過(guò)以上18篇文章,詳細介紹了整個(gè)爬蟲(chóng)采集流程,幾乎涉及到爬蟲(chóng)的方方面面采集。
解決方案:任意網(wǎng)頁(yè)文章內容提取(采集)算法
任意網(wǎng)頁(yè)文章內容提?。ú杉┧惴?br /> 標簽:采集程序開(kāi)發(fā) 2014-04-09 19:10 星期三
做過(guò)采集的人都知道,要采集一個(gè)網(wǎng)站,需要按照網(wǎng)站的結構寫(xiě)一個(gè)正則模式。這是最傳統的方法。這種方法的好處是采集精度可以很精細,采集任意結構網(wǎng)站,但是這種方法也很有限,一套規則只能用于一個(gè)網(wǎng)站 ,如果結構發(fā)生變化,需要重新分析和調整規則,非常被動(dòng)。
我一直在想,如果程序能達到人類(lèi)的識別水平,那么它就可以采集any網(wǎng)站文本的內容。網(wǎng)上搜索了一下,已經(jīng)有很多類(lèi)似的算法了。有以下幾種:
1、基于Dom樹(shù)
1),使用開(kāi)源包HTML Tidy處理HTML,糾正錯誤或不規范;
2),按照更標準的HTML構建Dom樹(shù),然后遞歸遍歷Dom樹(shù),比較識別各種非文本信息,包括廣告、鏈接組和非重要節點(diǎn)信息;廣告信息清除:需要建立廣告服務(wù)器頻繁更新列表;鏈接組去除:計算網(wǎng)頁(yè)中收錄的鏈接數與非鏈接詞數的比值;
3),去掉非文本信息后,Dom樹(shù)中剩下的內容就是文本信息,直接從剩余的樹(shù)節
從點(diǎn)中提取。
有一個(gè)問(wèn)題:Dom樹(shù)的建立對HTML是否良構有很高的要求,樹(shù)的建立和遍歷是時(shí)空的
復雜度高,遍歷樹(shù)的方式會(huì )因HTML標簽的不同而有所差異。
2、根據網(wǎng)頁(yè)切分查找文本塊
1),網(wǎng)頁(yè)正確切分后,文本提取工作簡(jiǎn)化為對文本塊的判斷;
2),分割是在HTML標簽和一些視覺(jué)信息(如文本顏色、字體大小、文本信息等)中使用分隔線(xiàn)。
存在問(wèn)題:不同網(wǎng)站的HTML樣式差異很大,沒(méi)有統一的切分方法,通用性難以保證。
3、基于標記窗口
1),先取出文章標題;
2),這兩個(gè)標簽和它們一起收錄的文本稱(chēng)為標簽窗口(例如text in text就是標簽窗口中的文本),將標簽窗口中的文本全部取出;
3),每個(gè)標記窗口內的文章標題和文本的分詞;
4),計算標題序列與每個(gè)標簽窗口文本序列之間的單詞距離L,如果L小于某個(gè)閾值,則認為該標簽窗口中的文本為正文。
有一個(gè)問(wèn)題:標注窗口的制定很好,但是每個(gè)標注窗口的文本都要先切分,還要計算詞序距離,效率?
4、基于數據挖掘或機器學(xué)習
使用了文本分類(lèi)、聚類(lèi)、隱馬模型、數據挖掘等。
有問(wèn)題:簡(jiǎn)單的問(wèn)題復雜化。
5、基于邏輯行數和最大接受距離的網(wǎng)頁(yè)文本提取
1),在人們寫(xiě)網(wǎng)頁(yè)的時(shí)候考慮一??些啟發(fā)式規則,考慮到文字的物理位置會(huì )很接近;
2),做出以下推論:
HTML的每一行代表一個(gè)完整的語(yǔ)義;
身體代碼將在物理上靠近;
一行正文代碼主要是文本;
一行正文代碼中的非HTML標簽數量較多;
一行正文代碼中超鏈接長(cháng)度的比例不會(huì )很大;
3),任何符合上述推論的代碼行都被認為是正文行;
有一個(gè)問(wèn)題:文字確實(shí)會(huì )在物理上接近,但是長(cháng)標題和長(cháng)文章評論的鏈接組也滿(mǎn)足上述條件。還是靠html標簽來(lái)做判斷的。
6、基于行塊分布函數的通用網(wǎng)頁(yè)文本提?。壕€(xiàn)性時(shí)間,不建DOM樹(shù),獨立于HTML標簽
首次將網(wǎng)頁(yè)文本提取問(wèn)題轉化為頁(yè)面的行塊分布函數。這種方法不需要構建Dom樹(shù),也沒(méi)有病態(tài)HTML的包袱(其實(shí)和HTML標簽無(wú)關(guān))。通過(guò)線(xiàn)性時(shí)間建立的線(xiàn)塊分布函數圖,可以直接準確定位網(wǎng)頁(yè)正文。同時(shí)采用統計與規則相結合的方法來(lái)處理一般性問(wèn)題。作者認為,簡(jiǎn)單的事情總是應該用最簡(jiǎn)單的方法來(lái)解決。整個(gè)算法實(shí)現代碼不到一百行。但數額并不多,這是在法律規定的。
項目網(wǎng)址:,/p/cx-extractor/
以上算法均來(lái)自第六種算法的分析論文。
第 6 種算法在我看來(lái)是最好的算法,它快速且易于實(shí)現。但也有缺點(diǎn)。該算法主要針對采集文章,即文本內容較多的網(wǎng)頁(yè),因為原理是對網(wǎng)頁(yè)進(jìn)行去標簽,然后分塊,哪個(gè)塊有更多的文字。認為是文字,在使用過(guò)程中發(fā)現如下問(wèn)題:
1、不能采集圖像;
2、誤區采集鏈接聚合塊作為正文,如:相關(guān)文章、文章導讀,這些地方的標題文字有時(shí)可能會(huì )超出正文文本;
3、沒(méi)有標題識別。
對代碼的簡(jiǎn)單修復解決了上述問(wèn)題:
1、保存圖片標簽,改用[img=x];
2、保存鏈接文本,使用[a=x]代替鏈接塊;
3、標題識別比較容易,可以從標題中獲取,然后做簡(jiǎn)單的過(guò)濾。
修改后的程序匹配結果比原算法準確很多,還有很大的調整空間。作者也在論文中解釋了這一點(diǎn)。
目前方案還沒(méi)有完全準確,個(gè)別類(lèi)型網(wǎng)站還是不適用的,比如相冊(純圖片)、電影(線(xiàn)路鏈接)。
應用:,/
網(wǎng)站內容有點(diǎn)亂,基本不能用,還是垃圾網(wǎng)站。相信有的朋友會(huì )在百度找到類(lèi)似的網(wǎng)站,但那些網(wǎng)站可能不是這樣的,也可能是簡(jiǎn)單的關(guān)鍵詞積累。
相信經(jīng)過(guò)重新設計,我們可以實(shí)現更精準的匹配,效果會(huì )越來(lái)越好!
修復完美,到時(shí)候分享代碼。請關(guān)注我的博客Slipper Station(,/),希望和大家一起學(xué)習。 查看全部
官方數據:爬蟲(chóng)數據采集
經(jīng)常有小伙伴需要將互聯(lián)網(wǎng)上的數據保存在本地,但又不想一一復制。我們首先想到的就是爬蟲(chóng),可以說(shuō)是組成了我們精彩的互聯(lián)網(wǎng)世界。

網(wǎng)絡(luò )搜索引擎和其他一些網(wǎng)站使用網(wǎng)絡(luò )爬蟲(chóng)或蜘蛛軟件來(lái)更新他們的網(wǎng)絡(luò )內容或其他網(wǎng)站網(wǎng)絡(luò )內容索引。網(wǎng)絡(luò )爬蟲(chóng)復制頁(yè)面以供搜索引擎處理,搜索引擎將下載的頁(yè)面編入索引,以便用戶(hù)更有效地搜索。
這一切都歸功于爬蟲(chóng)數據采集。在這篇文章我總結了爬蟲(chóng)數據采集的過(guò)程,從最簡(jiǎn)單的基礎爬蟲(chóng)開(kāi)始,到爬蟲(chóng)獲取到的數據采集如何存儲,我們如何規避它。采取一些反爬措施,獲取我們需要的數據,進(jìn)行爬蟲(chóng)的數據采集:

通過(guò)以上18篇文章,詳細介紹了整個(gè)爬蟲(chóng)采集流程,幾乎涉及到爬蟲(chóng)的方方面面采集。
解決方案:任意網(wǎng)頁(yè)文章內容提取(采集)算法
任意網(wǎng)頁(yè)文章內容提?。ú杉┧惴?br /> 標簽:采集程序開(kāi)發(fā) 2014-04-09 19:10 星期三
做過(guò)采集的人都知道,要采集一個(gè)網(wǎng)站,需要按照網(wǎng)站的結構寫(xiě)一個(gè)正則模式。這是最傳統的方法。這種方法的好處是采集精度可以很精細,采集任意結構網(wǎng)站,但是這種方法也很有限,一套規則只能用于一個(gè)網(wǎng)站 ,如果結構發(fā)生變化,需要重新分析和調整規則,非常被動(dòng)。
我一直在想,如果程序能達到人類(lèi)的識別水平,那么它就可以采集any網(wǎng)站文本的內容。網(wǎng)上搜索了一下,已經(jīng)有很多類(lèi)似的算法了。有以下幾種:
1、基于Dom樹(shù)
1),使用開(kāi)源包HTML Tidy處理HTML,糾正錯誤或不規范;
2),按照更標準的HTML構建Dom樹(shù),然后遞歸遍歷Dom樹(shù),比較識別各種非文本信息,包括廣告、鏈接組和非重要節點(diǎn)信息;廣告信息清除:需要建立廣告服務(wù)器頻繁更新列表;鏈接組去除:計算網(wǎng)頁(yè)中收錄的鏈接數與非鏈接詞數的比值;
3),去掉非文本信息后,Dom樹(shù)中剩下的內容就是文本信息,直接從剩余的樹(shù)節
從點(diǎn)中提取。
有一個(gè)問(wèn)題:Dom樹(shù)的建立對HTML是否良構有很高的要求,樹(shù)的建立和遍歷是時(shí)空的
復雜度高,遍歷樹(shù)的方式會(huì )因HTML標簽的不同而有所差異。
2、根據網(wǎng)頁(yè)切分查找文本塊
1),網(wǎng)頁(yè)正確切分后,文本提取工作簡(jiǎn)化為對文本塊的判斷;
2),分割是在HTML標簽和一些視覺(jué)信息(如文本顏色、字體大小、文本信息等)中使用分隔線(xiàn)。
存在問(wèn)題:不同網(wǎng)站的HTML樣式差異很大,沒(méi)有統一的切分方法,通用性難以保證。
3、基于標記窗口
1),先取出文章標題;

2),這兩個(gè)標簽和它們一起收錄的文本稱(chēng)為標簽窗口(例如text in text就是標簽窗口中的文本),將標簽窗口中的文本全部取出;
3),每個(gè)標記窗口內的文章標題和文本的分詞;
4),計算標題序列與每個(gè)標簽窗口文本序列之間的單詞距離L,如果L小于某個(gè)閾值,則認為該標簽窗口中的文本為正文。
有一個(gè)問(wèn)題:標注窗口的制定很好,但是每個(gè)標注窗口的文本都要先切分,還要計算詞序距離,效率?
4、基于數據挖掘或機器學(xué)習
使用了文本分類(lèi)、聚類(lèi)、隱馬模型、數據挖掘等。
有問(wèn)題:簡(jiǎn)單的問(wèn)題復雜化。
5、基于邏輯行數和最大接受距離的網(wǎng)頁(yè)文本提取
1),在人們寫(xiě)網(wǎng)頁(yè)的時(shí)候考慮一??些啟發(fā)式規則,考慮到文字的物理位置會(huì )很接近;
2),做出以下推論:
HTML的每一行代表一個(gè)完整的語(yǔ)義;
身體代碼將在物理上靠近;
一行正文代碼主要是文本;
一行正文代碼中的非HTML標簽數量較多;
一行正文代碼中超鏈接長(cháng)度的比例不會(huì )很大;
3),任何符合上述推論的代碼行都被認為是正文行;
有一個(gè)問(wèn)題:文字確實(shí)會(huì )在物理上接近,但是長(cháng)標題和長(cháng)文章評論的鏈接組也滿(mǎn)足上述條件。還是靠html標簽來(lái)做判斷的。
6、基于行塊分布函數的通用網(wǎng)頁(yè)文本提?。壕€(xiàn)性時(shí)間,不建DOM樹(shù),獨立于HTML標簽

首次將網(wǎng)頁(yè)文本提取問(wèn)題轉化為頁(yè)面的行塊分布函數。這種方法不需要構建Dom樹(shù),也沒(méi)有病態(tài)HTML的包袱(其實(shí)和HTML標簽無(wú)關(guān))。通過(guò)線(xiàn)性時(shí)間建立的線(xiàn)塊分布函數圖,可以直接準確定位網(wǎng)頁(yè)正文。同時(shí)采用統計與規則相結合的方法來(lái)處理一般性問(wèn)題。作者認為,簡(jiǎn)單的事情總是應該用最簡(jiǎn)單的方法來(lái)解決。整個(gè)算法實(shí)現代碼不到一百行。但數額并不多,這是在法律規定的。
項目網(wǎng)址:,/p/cx-extractor/
以上算法均來(lái)自第六種算法的分析論文。
第 6 種算法在我看來(lái)是最好的算法,它快速且易于實(shí)現。但也有缺點(diǎn)。該算法主要針對采集文章,即文本內容較多的網(wǎng)頁(yè),因為原理是對網(wǎng)頁(yè)進(jìn)行去標簽,然后分塊,哪個(gè)塊有更多的文字。認為是文字,在使用過(guò)程中發(fā)現如下問(wèn)題:
1、不能采集圖像;
2、誤區采集鏈接聚合塊作為正文,如:相關(guān)文章、文章導讀,這些地方的標題文字有時(shí)可能會(huì )超出正文文本;
3、沒(méi)有標題識別。
對代碼的簡(jiǎn)單修復解決了上述問(wèn)題:
1、保存圖片標簽,改用[img=x];
2、保存鏈接文本,使用[a=x]代替鏈接塊;
3、標題識別比較容易,可以從標題中獲取,然后做簡(jiǎn)單的過(guò)濾。
修改后的程序匹配結果比原算法準確很多,還有很大的調整空間。作者也在論文中解釋了這一點(diǎn)。
目前方案還沒(méi)有完全準確,個(gè)別類(lèi)型網(wǎng)站還是不適用的,比如相冊(純圖片)、電影(線(xiàn)路鏈接)。
應用:,/
網(wǎng)站內容有點(diǎn)亂,基本不能用,還是垃圾網(wǎng)站。相信有的朋友會(huì )在百度找到類(lèi)似的網(wǎng)站,但那些網(wǎng)站可能不是這樣的,也可能是簡(jiǎn)單的關(guān)鍵詞積累。
相信經(jīng)過(guò)重新設計,我們可以實(shí)現更精準的匹配,效果會(huì )越來(lái)越好!
修復完美,到時(shí)候分享代碼。請關(guān)注我的博客Slipper Station(,/),希望和大家一起學(xué)習。
測評:前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 92 次瀏覽 ? 2022-09-21 13:16
注意干貨,不要迷路
1. 背景
你知道有多少用戶(hù)沒(méi)有等待第一個(gè)屏幕出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。例如,BBC 發(fā)現,他們的 網(wǎng)站 加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高績(jì)效網(wǎng)站比低績(jì)效網(wǎng)站更能吸引和留住用戶(hù),而用戶(hù)留存對于提高用戶(hù)轉化率至關(guān)重要。
本篇文章就是以此為背景,介紹Byte如何內部衡量網(wǎng)站性能,以及如何依靠性能監控來(lái)定位在線(xiàn)網(wǎng)站性能問(wèn)題。
2. 如何衡量網(wǎng)站性能
網(wǎng)站性能有多種表現形式。并不是簡(jiǎn)單的以頁(yè)面加載速度和頁(yè)面渲染速度來(lái)衡量,而是需要關(guān)注用戶(hù)從頁(yè)面加載開(kāi)始到關(guān)閉過(guò)程的性能感知。一個(gè)頁(yè)面,即使渲染得很快,如果對用戶(hù)交互反應慢,那么網(wǎng)站在用戶(hù)心目中的表現還是很差的。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,一類(lèi)是運行時(shí)性能。前者衡量頁(yè)面從加載到穩定交互的性能,后者衡量頁(yè)面穩定后直到頁(yè)面關(guān)閉的性能。
3. 首屏表現
早在 2012 年,Web 性能工作組 [1] 就針對頁(yè)面加載場(chǎng)景開(kāi)發(fā)了一個(gè)加載過(guò)程模型,用于衡量頁(yè)面加載各個(gè)階段的耗時(shí),從而衡量頁(yè)面加載的性能。具體加載過(guò)程模型如圖:
該模型定義了從開(kāi)始頁(yè)面加載到完成整個(gè)頁(yè)面加載過(guò)程的時(shí)間點(diǎn)。除了正常的初始化和拉到主文檔之外,還包括解析和渲染的詳細時(shí)間點(diǎn)。例如:
雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載的性能,但在線(xiàn)用戶(hù)卻無(wú)法真正感知到這些時(shí)間點(diǎn)之間的差異。對于用戶(hù)來(lái)說(shuō),只有頁(yè)面什么時(shí)候開(kāi)始渲染,主要內容什么時(shí)候渲染,什么時(shí)候可以交互,交互是否有延遲。
那么有沒(méi)有什么指標可以用來(lái)衡量用戶(hù)感知的四個(gè)階段呢?
3.1 何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標來(lái)源于Paint Timing [2]標準,主要記錄頁(yè)面加載過(guò)程中的一些關(guān)鍵時(shí)間點(diǎn)。使用這兩個(gè)指標,您可以衡量頁(yè)面何時(shí)開(kāi)始呈現內容。
3.2 主要內容什么時(shí)候渲染:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)呈現其主要內容。但是,業(yè)內一些測試表明,LCP與FMP的時(shí)間點(diǎn)非常相似。同時(shí),FMP對性能的消耗很大,會(huì )因為一些微小的變化而造成數值的巨大波動(dòng)。因此,建議使用 LCP。但由于計算復雜、指標解讀困難,SI一般只用于實(shí)驗室環(huán)境。
3.3 我們什么時(shí)候可以互動(dòng):TTI && TBT
雖然 TTI 可以測量頁(yè)面可以交互的時(shí)間點(diǎn),但它無(wú)法感知此期間瀏覽器的繁忙狀態(tài)。結合 TBT,它有助于了解頁(yè)面在加載期間無(wú)法響應用戶(hù)輸入的時(shí)間。
3.4 交互時(shí)是否有延遲:FID && MPFID
MPFID是虛擬可能的延遲時(shí)間,FID是用戶(hù)真正的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)對整個(gè)應用建立良好的印象。同時(shí),在頁(yè)面加載階段,資源處理任務(wù)最重,最容易出現輸入延遲。
至此,通過(guò)以上各階段的指標,基本可以全面衡量首屏的表現。那么如何衡量運行時(shí)性能呢?
4. 運行時(shí)性能
運行時(shí)性能通??梢酝ㄟ^(guò) Long 任務(wù)來(lái)感知。長(cháng)任務(wù)主要衡量主線(xiàn)程的繁忙程度。
4.1 長(cháng)任務(wù)
如果一個(gè)任務(wù)在主線(xiàn)程上運行的時(shí)間超過(guò) 50 毫秒,它就是一個(gè) Long 任務(wù)。如果你能在運行時(shí)采集所有的 Long 任務(wù),你就可以知道運行時(shí)的性能。在具體實(shí)踐中,可以將注意力集中在耗時(shí)較長(cháng)的長(cháng)任務(wù)上,并將其與用戶(hù)行為相關(guān)聯(lián),可以有效幫助定位網(wǎng)卡原因。
5. 績(jì)效指標的計算原理
有與頁(yè)面性能相關(guān)的指標,那么如何采集這些數據呢?
5.1 采集頁(yè)面加載過(guò)程的耗時(shí)階段
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要取決于 Navigation Timing [4] 標準。該標準后來(lái)升級為 2.0 版本,對應于 Navigation Timing 2 [5] 標準。兩者雖然不同,但可以計算出來(lái)。指標基本一致。在瀏覽器中,可以通過(guò)以下方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
根據這些數據,不僅可以計算出 DNS/TCP/Request 的耗時(shí),還可以計算出 DOMReady/DOMParse/Load 的耗時(shí)。
5.2 采集 FP && FCP
FP和FCP可以直接通過(guò)瀏覽器提供的API獲取,所以采集的原理并不復雜。如果頁(yè)面已經(jīng)完成了第一次繪制和第一次內容繪制,可以使用下面的方法直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有第一次開(kāi)始繪制,則需要通過(guò)監聽(tīng)來(lái)獲取。
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主要依賴(lài)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});
瀏覽器會(huì )多次上報 LCP,一般來(lái)說(shuō)真正的 LCP 是用戶(hù)交互前最近一次上報的 LCP。因為交互往往會(huì )改變用戶(hù)所看到的,所以用戶(hù)交互后新上報的 LCP 不再符合 LCP 指標定義。
5.4 采集 與FP/FCP/LCP相比,FMP的采集比較復雜,需要通過(guò)算法計算,業(yè)界沒(méi)有統一的算法。但是,比較公認的計算FMP的方法是“確定在加載和渲染過(guò)程中頁(yè)面最大布局變化后的繪制時(shí)間為當前頁(yè)面的FMP”。
由于在頁(yè)面渲染過(guò)程中,“DOM結構變化的時(shí)間點(diǎn)”和對應的“渲染時(shí)間點(diǎn)”大致相同,所以?xún)炔恳宰止潪閱挝挥嬎鉌MP的方式是計算DOM結構發(fā)生變化的時(shí)間點(diǎn)大多數,那就是FMP。
具體步驟如下:
通過(guò) MutationObserver 監控整個(gè)頁(yè)面的每一個(gè) DOM 變化,并觸發(fā) MutationObserver 的回調。當回調計算當前DOM樹(shù)的score并結算時(shí),score對比變化最大的時(shí)刻是FMP5.5 采集 TTI && TBT
與FMP類(lèi)似,瀏覽器并沒(méi)有提供直接獲取TTI的API,但是有詳細的說(shuō)明如何計算TTI,通過(guò)實(shí)現相應的說(shuō)明就可以得到TTI的時(shí)間點(diǎn)。
具體描述是:先找到FCP的時(shí)間點(diǎn),然后再找一個(gè)安靜的窗口向前。一個(gè)安靜的窗口需要滿(mǎn)足三個(gè)條件: 1) No Long 任務(wù)。2)窗口中處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗口讀取至少應為 5 秒。
窗口前最后一個(gè)長(cháng)任務(wù)的結束時(shí)間是 TTI。
TBT 可以通過(guò)將 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間相加得到。
阻塞時(shí)間是Long任務(wù)中超過(guò)50ms后的任務(wù)時(shí)間。
5.6 采集 FID && MPFID
FID也依賴(lài)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 之后最長(cháng)的長(cháng)任務(wù)時(shí)間??梢员O控 FCP 后的 Long 任務(wù),比較最長(cháng)的 long 任務(wù)是 MPFID。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集單個(gè)性能指標,但在 JS 中計算特定指標更加復雜。原因有二:一是API上報的內容與指標本身的定義存在一些差異,所以在計算時(shí)需要處理這些差異;二是在某些場(chǎng)景下,瀏覽器不會(huì )上報相應的內容,需要在這些場(chǎng)景下進(jìn)行仿真測量。
6. 如何評估網(wǎng)站的整體性能
盡管有許多績(jì)效指標,但每個(gè)績(jì)效指標評估一個(gè)方面。如何看網(wǎng)站的整體表現是好是壞?對于每一個(gè)單獨的指標,是否有一個(gè)標準來(lái)定義指標值被認為是好的特定范圍?在線(xiàn)網(wǎng)站性能應考慮哪些性能指標?每個(gè)績(jì)效指標的適當權重是多少?
6.1 績(jì)效指標基線(xiàn)
谷歌提供了各種性能指標的基準,具有一定的參考意義。
為什么僅供參考?首先,基線(xiàn)本身正在發(fā)生變化。隨著(zhù)指標計算的逐步更新和軟硬件的更新,基線(xiàn)也會(huì )有一定程度的調整。其次,用戶(hù)的使用場(chǎng)景也會(huì )對性能指標產(chǎn)生很大影響。例如,iOS 用戶(hù)報告的性能指標普遍優(yōu)于 Android 用戶(hù)報告的性能指標。
下面是字節目前內部使用的一些性能指標的基準,基本與谷歌推薦的基準一致。通過(guò)這些數據,可以分析網(wǎng)站的績(jì)效達標率。
指標名稱(chēng)Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500
超過(guò) 2500
FCP
0-1800
1800-3000
超過(guò) 3000
液晶面板
0-2500
2500-4000
超過(guò) 4000
TTI
0-3800
3800-7300
超過(guò) 7300
FID
0-100
100-300
超過(guò) 300
6.2 測量網(wǎng)站滿(mǎn)意度
除了常規的性能指標外,網(wǎng)站滿(mǎn)意度的衡量還應考慮基于體驗的指標,例如專(zhuān)門(mén)衡量視覺(jué)穩定性的 CLS。
在線(xiàn)站點(diǎn)滿(mǎn)意度測量一般會(huì )根據燈塔的滿(mǎn)意度計算規則,去除一些推薦在實(shí)驗室環(huán)境中測量的指標的權重。
以下是Bytes目前使用的在線(xiàn)站點(diǎn)性能滿(mǎn)意度權重計算公式,去掉了SI和TBT這兩個(gè)不推薦用于在線(xiàn)環(huán)境測量的指標。
然后有了一個(gè)站點(diǎn)的滿(mǎn)意度,我們終于可以知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該如何優(yōu)化呢?
7. 如何優(yōu)化網(wǎng)站性能
通常,我們可以從性能指標入手,進(jìn)行有針對性的優(yōu)化。雖然指標不同,但優(yōu)化思路是一樣的。了解指標的依賴(lài)關(guān)系后,可以通過(guò)優(yōu)化指標的相關(guān)依賴(lài)關(guān)系,快速優(yōu)化性能指標,從而提升站點(diǎn)性能。
聽(tīng)起來(lái)很抽象,舉個(gè)例子:比如我們要優(yōu)化TTI的時(shí)候,根據剛才提到的TTI的計算方法,可以得出TTI的依賴(lài)主要有FCP、request和Long任務(wù),然后盡快渲染盡可能快的請求,盡快結束請求,避免長(cháng)時(shí)間的任務(wù)是優(yōu)化的關(guān)鍵。指標的具體優(yōu)化措施有很多,后續文章會(huì )介紹。
了解全面的優(yōu)化措施很重要,但每一項都不一定能有效解決您網(wǎng)站面臨的關(guān)鍵性能問(wèn)題。如何做到立即有針對性的去優(yōu)化?通過(guò)恢復用戶(hù)加載時(shí)的外觀(guān)來(lái)幫助定位性能問(wèn)題是一個(gè)想法。
8. 使用在線(xiàn)監控定位性能問(wèn)題
一般來(lái)說(shuō),前端監控除了監控性能指標外,還會(huì )監控請求、資源加載、Long任務(wù)等數據。這些數據可以幫助還原用戶(hù)的加載場(chǎng)景,幫助尋找線(xiàn)索。
例如,在下面的例子中,很多性能指標都很差。通過(guò)監控平臺還原的資源加載瀑布圖可以看出,大部分時(shí)間都花在了拉取資源上。然后就可以得到一個(gè)初步的性能優(yōu)化方案,把優(yōu)化措施集中在資源優(yōu)化上,比如減小JS文件大小,延遲加載未使用的JS代碼等等。
在線(xiàn)監控的例子很多,可以幫助定位性能問(wèn)題,這里就不一一介紹了。截圖中使用了Byte內部的前端監控平臺。目前該方案已經(jīng)在火山引擎上同步,可以實(shí)時(shí)監控web端的真實(shí)數據,接入即可解決告警歸屬、聚類(lèi)分析、詳細定位等問(wèn)題。白屏、性能瓶頸、查詢(xún)慢等關(guān)鍵問(wèn)題歡迎體驗。
掃描下方二維碼,立即申請免費使用??
最近發(fā)布:WordPress自動(dòng)采集發(fā)布插件專(zhuān)業(yè)版WP AutoPost Pro [更新至
目錄
親測完美運行于的 WordPress 各個(gè)版本,請放心使用。WP-AutoPost-Pro 是一款優(yōu)秀的 WordPress 文章采集器,是您操作站群,讓網(wǎng)站自動(dòng)更新內容的利器!采集插件適用對象1、剛建的wordpress站點(diǎn)內容比較少,希望盡快有比較豐富的內容;2、熱點(diǎn)內容自動(dòng)采集并自動(dòng)發(fā)布;3、定時(shí)采集,手動(dòng)采集發(fā)布或保存到草稿;4、css樣式規則,能更精確的采集需要的內容。5、偽原創(chuàng )與翻譯、代理IP進(jìn)行采集、保存Cookie記錄;6、可采集內容到自定義欄目
WP-AutoPost 插件可以采集來(lái)自于任何網(wǎng)站的內容并全自動(dòng)更新你的WordPress站點(diǎn)。它使用非常簡(jiǎn)單,無(wú)需復雜設置,并且足夠強大和穩定,支持wordpress所有特性??刹杉魏尉W(wǎng)站的內容全自動(dòng)任務(wù)采集定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容基本設置功能齊全,完美支持Wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章可下載遠程圖片及其他任意格式附件到本地服務(wù)器,并支持給圖片自動(dòng)添加水印
如果是新手,請查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自動(dòng)采集發(fā)布插件,最大的特點(diǎn)是可以采集來(lái)自于任何網(wǎng)站的內容并自動(dòng)發(fā)布到你的wordpress站點(diǎn)。不像其他大部分wordpress采集插件,只能根據Feed進(jìn)行采集,使用Feed采集有很大的弊端,首先必須找到全文Feed,而現在網(wǎng)上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要點(diǎn)擊鏈接才能查看原文,相當于給別的網(wǎng)站做外鏈。做英文垃圾站用的比較多的WP-Robot也只有20幾個(gè)采集來(lái)源,文章來(lái)源比較單一有限。而WP-AutoPost就沒(méi)有上面這些劣勢,真正做到可以采集任何網(wǎng)站的內容并自動(dòng)發(fā)布,采集過(guò)程完全自動(dòng)進(jìn)行無(wú)需人工干預,并提供內容過(guò)濾、HTML標簽過(guò)濾、關(guān)鍵詞替換、自動(dòng)鏈接、自動(dòng)標簽、自動(dòng)下載遠程圖片到本地服務(wù)器、自動(dòng)添加文章前綴后綴、并且可以使用微軟翻譯引擎將采集的文章自動(dòng)翻譯為各種語(yǔ)言進(jìn)行發(fā)布。
1.可采集任何網(wǎng)站的內容,采集信息一目了然。
通過(guò)簡(jiǎn)單設置可采集來(lái)自于任何網(wǎng)站的內容,并可設置多個(gè)采集任務(wù)同時(shí)進(jìn)行,可設置任務(wù)為自動(dòng)運行或手動(dòng)運行,主任務(wù)列表顯示每個(gè)采集任務(wù)的狀況:上次檢測采集時(shí)間,預計下次檢測采集時(shí)間,最近采集文章,已采集更新的文章數等信息,方便查看管理。
文章管理功能方便查詢(xún)、搜索、刪除已采集文章,改進(jìn)算法已從根本上杜絕了重復采集相同文章,日志功能記錄采集過(guò)程中出現的異常和抓取錯誤,方便檢查設置錯誤以便進(jìn)行修復。
2.啟用任務(wù)后,全自動(dòng)采集更新,無(wú)需人工干預。
啟用任務(wù)后,定時(shí)檢測是否有新文章可更新,檢測文章是否重復,導入更新文章,這一切操作程序都是全自動(dòng)完成,無(wú)需人工干預。
有兩種觸發(fā)采集更新方式,一種是在頁(yè)面內添加代碼由用戶(hù)訪(fǎng)問(wèn)觸發(fā)采集更新(后臺異步進(jìn)行,不影響用戶(hù)體驗,也不影響網(wǎng)站效率),另外可以用Cron計劃任務(wù)定時(shí)觸發(fā)采集更新任務(wù)
3.定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容。
定向采集只需要提供文章列表URL即可智能采集來(lái)自于任何網(wǎng)站或欄目?jì)热荨?br /> 不僅支持“通配符匹配”來(lái)采集網(wǎng)頁(yè)內容,更完美支持各種CSS選擇器,只需填寫(xiě)簡(jiǎn)單的形如#title h1的CSS選擇器,便可精確采集網(wǎng)頁(yè)任何內容。(如何設置CSS選擇器)
支持設置關(guān)鍵詞,如果標題中包含關(guān)鍵詞才允許采集(或過(guò)濾掉不允許采集)。
支持設置多個(gè)匹配規則采集網(wǎng)頁(yè)上的不同內容,甚至支持采集任何內容添加到“wordpress自定義欄目”,方便擴展。
4.基本設置功能齊全,完美支持wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息
每個(gè)采集任務(wù)均可選擇發(fā)布到的分類(lèi)目錄,發(fā)布作者,發(fā)布狀態(tài),檢測更新時(shí)間間隔,采集目標網(wǎng)站的字符集,選擇是否下載圖片或附件。
支持自定義文章類(lèi)型,自定義文章分類(lèi)、文章形式。
完美支持wordpress各種特色功能,自動(dòng)添加標簽,自動(dòng)生成摘要,自動(dòng)設置特色圖片,支持自定義欄目等。
5.可采集微信公眾號、頭條號等自媒體內容,因百度不收錄公眾號,頭條文章等,可輕松獲取優(yōu)質(zhì)“原創(chuàng )”文章,增加百度收錄量及網(wǎng)站權重
支持采集微信公眾號(訂閱號)文章,無(wú)需復雜配置,只需填入“公眾號名稱(chēng)”和“微信號”后即可開(kāi)始采集。
支持采集今日頭條文章,也無(wú)需復雜配置
微信公眾號及今日頭條由于目標限制,為半自動(dòng)方式采集
6.支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章
支持Google神經(jīng)網(wǎng)絡(luò )翻譯,翻譯質(zhì)量顯著(zhù)提高,已接近人工翻譯效果,將文章標題和內容翻譯成其他語(yǔ)言,共支持多種語(yǔ)言之間相互翻譯,輕松獲取原創(chuàng )文章。使用Google翻譯API無(wú)需翻墻,只需翻墻獲取API相關(guān)設置信息設置好后即可正常使用,后續調用API翻譯無(wú)需翻墻
支持有道神經(jīng)網(wǎng)絡(luò )翻譯,接近人工翻譯效果,有道翻譯更懂中文,采集英文文章翻譯成中文文章,輕松獲取原創(chuàng )文章。
同時(shí)支持百度翻譯,百度翻譯每月翻譯字符數低于200萬(wàn),享免費服務(wù)
7.支持中英文各種偽原創(chuàng )方式
支持使用翻譯引擎獲取偽原創(chuàng )文章,不僅僅只是替換了同義詞,更是語(yǔ)義的重新表述,唯一性、偽原創(chuàng )效果更好,支持各種語(yǔ)言。同時(shí)集成國外最優(yōu)秀偽原創(chuàng )工具WordAi等,制作英文站可以獲取可讀性、唯一性都更好的偽原創(chuàng )文章。
8.支持市面上所有主流對象存儲服務(wù),包括七牛云、阿里云OSS、騰訊云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可將文章中圖片及附件自動(dòng)上傳到云對象存儲服務(wù),節省帶寬及空間,提高網(wǎng)站訪(fǎng)問(wèn)速度
七牛云存儲,每月享10GB的免費存儲空間,10GB免費帶寬流量
只需簡(jiǎn)單配置好相關(guān)信息,即可自動(dòng)上傳,通過(guò)wordpress后臺也能直接查看或管理已上傳到云對象存儲的圖片及文件。
9.支持seo優(yōu)化,內容過(guò)濾,HTML標簽過(guò)濾,關(guān)鍵詞替換,自動(dòng)添加鏈接,添加自定義內容,自定義采集后樣式、自定義模板等常用功能
自動(dòng)刪除采集內容中的HTML注釋?zhuān)稍O置刪除標簽中的id,class,style屬性?xún)热?,消除采集的痕跡;自動(dòng)給圖片添加上alt屬性,過(guò)濾鏈接,關(guān)鍵詞替換,自動(dòng)添加自定義鏈接,這些都有利于SEO。
支持內容過(guò)濾,過(guò)濾采集內容中不希望發(fā)布的內容(如廣告代碼,文章來(lái)源,版權等信息),甚至可以在文章任意位置添加上自定義內容,增強文章獨特性;也可是設置采集后添加自定義樣式功能
也支持HTML標簽過(guò)濾功能,可過(guò)濾掉采集文章中的超鏈接,script和style標簽下的不必要的代碼。
付費高速下載:
資源下載此資源下載價(jià)格為10元,請先登錄
服務(wù)條款:
購買(mǎi)即代表你對本站的無(wú)償捐助,非購買(mǎi)本站資源。部分資源禁止在中國大陸下載使用,違者后果自負。同意本條款你方可購買(mǎi)下載本站資源,不同意請離開(kāi)。
所有資源均需登陸后下載,即使是免費的。 查看全部
測評:前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
注意干貨,不要迷路
1. 背景
你知道有多少用戶(hù)沒(méi)有等待第一個(gè)屏幕出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。例如,BBC 發(fā)現,他們的 網(wǎng)站 加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高績(jì)效網(wǎng)站比低績(jì)效網(wǎng)站更能吸引和留住用戶(hù),而用戶(hù)留存對于提高用戶(hù)轉化率至關(guān)重要。
本篇文章就是以此為背景,介紹Byte如何內部衡量網(wǎng)站性能,以及如何依靠性能監控來(lái)定位在線(xiàn)網(wǎng)站性能問(wèn)題。
2. 如何衡量網(wǎng)站性能
網(wǎng)站性能有多種表現形式。并不是簡(jiǎn)單的以頁(yè)面加載速度和頁(yè)面渲染速度來(lái)衡量,而是需要關(guān)注用戶(hù)從頁(yè)面加載開(kāi)始到關(guān)閉過(guò)程的性能感知。一個(gè)頁(yè)面,即使渲染得很快,如果對用戶(hù)交互反應慢,那么網(wǎng)站在用戶(hù)心目中的表現還是很差的。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,一類(lèi)是運行時(shí)性能。前者衡量頁(yè)面從加載到穩定交互的性能,后者衡量頁(yè)面穩定后直到頁(yè)面關(guān)閉的性能。
3. 首屏表現
早在 2012 年,Web 性能工作組 [1] 就針對頁(yè)面加載場(chǎng)景開(kāi)發(fā)了一個(gè)加載過(guò)程模型,用于衡量頁(yè)面加載各個(gè)階段的耗時(shí),從而衡量頁(yè)面加載的性能。具體加載過(guò)程模型如圖:
該模型定義了從開(kāi)始頁(yè)面加載到完成整個(gè)頁(yè)面加載過(guò)程的時(shí)間點(diǎn)。除了正常的初始化和拉到主文檔之外,還包括解析和渲染的詳細時(shí)間點(diǎn)。例如:
雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載的性能,但在線(xiàn)用戶(hù)卻無(wú)法真正感知到這些時(shí)間點(diǎn)之間的差異。對于用戶(hù)來(lái)說(shuō),只有頁(yè)面什么時(shí)候開(kāi)始渲染,主要內容什么時(shí)候渲染,什么時(shí)候可以交互,交互是否有延遲。
那么有沒(méi)有什么指標可以用來(lái)衡量用戶(hù)感知的四個(gè)階段呢?
3.1 何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標來(lái)源于Paint Timing [2]標準,主要記錄頁(yè)面加載過(guò)程中的一些關(guān)鍵時(shí)間點(diǎn)。使用這兩個(gè)指標,您可以衡量頁(yè)面何時(shí)開(kāi)始呈現內容。
3.2 主要內容什么時(shí)候渲染:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)呈現其主要內容。但是,業(yè)內一些測試表明,LCP與FMP的時(shí)間點(diǎn)非常相似。同時(shí),FMP對性能的消耗很大,會(huì )因為一些微小的變化而造成數值的巨大波動(dòng)。因此,建議使用 LCP。但由于計算復雜、指標解讀困難,SI一般只用于實(shí)驗室環(huán)境。
3.3 我們什么時(shí)候可以互動(dòng):TTI && TBT
雖然 TTI 可以測量頁(yè)面可以交互的時(shí)間點(diǎn),但它無(wú)法感知此期間瀏覽器的繁忙狀態(tài)。結合 TBT,它有助于了解頁(yè)面在加載期間無(wú)法響應用戶(hù)輸入的時(shí)間。
3.4 交互時(shí)是否有延遲:FID && MPFID
MPFID是虛擬可能的延遲時(shí)間,FID是用戶(hù)真正的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)對整個(gè)應用建立良好的印象。同時(shí),在頁(yè)面加載階段,資源處理任務(wù)最重,最容易出現輸入延遲。
至此,通過(guò)以上各階段的指標,基本可以全面衡量首屏的表現。那么如何衡量運行時(shí)性能呢?
4. 運行時(shí)性能
運行時(shí)性能通??梢酝ㄟ^(guò) Long 任務(wù)來(lái)感知。長(cháng)任務(wù)主要衡量主線(xiàn)程的繁忙程度。
4.1 長(cháng)任務(wù)
如果一個(gè)任務(wù)在主線(xiàn)程上運行的時(shí)間超過(guò) 50 毫秒,它就是一個(gè) Long 任務(wù)。如果你能在運行時(shí)采集所有的 Long 任務(wù),你就可以知道運行時(shí)的性能。在具體實(shí)踐中,可以將注意力集中在耗時(shí)較長(cháng)的長(cháng)任務(wù)上,并將其與用戶(hù)行為相關(guān)聯(lián),可以有效幫助定位網(wǎng)卡原因。
5. 績(jì)效指標的計算原理
有與頁(yè)面性能相關(guān)的指標,那么如何采集這些數據呢?
5.1 采集頁(yè)面加載過(guò)程的耗時(shí)階段
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要取決于 Navigation Timing [4] 標準。該標準后來(lái)升級為 2.0 版本,對應于 Navigation Timing 2 [5] 標準。兩者雖然不同,但可以計算出來(lái)。指標基本一致。在瀏覽器中,可以通過(guò)以下方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
根據這些數據,不僅可以計算出 DNS/TCP/Request 的耗時(shí),還可以計算出 DOMReady/DOMParse/Load 的耗時(shí)。

5.2 采集 FP && FCP
FP和FCP可以直接通過(guò)瀏覽器提供的API獲取,所以采集的原理并不復雜。如果頁(yè)面已經(jīng)完成了第一次繪制和第一次內容繪制,可以使用下面的方法直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有第一次開(kāi)始繪制,則需要通過(guò)監聽(tīng)來(lái)獲取。
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主要依賴(lài)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});
瀏覽器會(huì )多次上報 LCP,一般來(lái)說(shuō)真正的 LCP 是用戶(hù)交互前最近一次上報的 LCP。因為交互往往會(huì )改變用戶(hù)所看到的,所以用戶(hù)交互后新上報的 LCP 不再符合 LCP 指標定義。
5.4 采集 與FP/FCP/LCP相比,FMP的采集比較復雜,需要通過(guò)算法計算,業(yè)界沒(méi)有統一的算法。但是,比較公認的計算FMP的方法是“確定在加載和渲染過(guò)程中頁(yè)面最大布局變化后的繪制時(shí)間為當前頁(yè)面的FMP”。
由于在頁(yè)面渲染過(guò)程中,“DOM結構變化的時(shí)間點(diǎn)”和對應的“渲染時(shí)間點(diǎn)”大致相同,所以?xún)炔恳宰止潪閱挝挥嬎鉌MP的方式是計算DOM結構發(fā)生變化的時(shí)間點(diǎn)大多數,那就是FMP。
具體步驟如下:
通過(guò) MutationObserver 監控整個(gè)頁(yè)面的每一個(gè) DOM 變化,并觸發(fā) MutationObserver 的回調。當回調計算當前DOM樹(shù)的score并結算時(shí),score對比變化最大的時(shí)刻是FMP5.5 采集 TTI && TBT
與FMP類(lèi)似,瀏覽器并沒(méi)有提供直接獲取TTI的API,但是有詳細的說(shuō)明如何計算TTI,通過(guò)實(shí)現相應的說(shuō)明就可以得到TTI的時(shí)間點(diǎn)。
具體描述是:先找到FCP的時(shí)間點(diǎn),然后再找一個(gè)安靜的窗口向前。一個(gè)安靜的窗口需要滿(mǎn)足三個(gè)條件: 1) No Long 任務(wù)。2)窗口中處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗口讀取至少應為 5 秒。
窗口前最后一個(gè)長(cháng)任務(wù)的結束時(shí)間是 TTI。
TBT 可以通過(guò)將 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間相加得到。
阻塞時(shí)間是Long任務(wù)中超過(guò)50ms后的任務(wù)時(shí)間。
5.6 采集 FID && MPFID
FID也依賴(lài)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 之后最長(cháng)的長(cháng)任務(wù)時(shí)間??梢员O控 FCP 后的 Long 任務(wù),比較最長(cháng)的 long 任務(wù)是 MPFID。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集單個(gè)性能指標,但在 JS 中計算特定指標更加復雜。原因有二:一是API上報的內容與指標本身的定義存在一些差異,所以在計算時(shí)需要處理這些差異;二是在某些場(chǎng)景下,瀏覽器不會(huì )上報相應的內容,需要在這些場(chǎng)景下進(jìn)行仿真測量。
6. 如何評估網(wǎng)站的整體性能
盡管有許多績(jì)效指標,但每個(gè)績(jì)效指標評估一個(gè)方面。如何看網(wǎng)站的整體表現是好是壞?對于每一個(gè)單獨的指標,是否有一個(gè)標準來(lái)定義指標值被認為是好的特定范圍?在線(xiàn)網(wǎng)站性能應考慮哪些性能指標?每個(gè)績(jì)效指標的適當權重是多少?
6.1 績(jì)效指標基線(xiàn)
谷歌提供了各種性能指標的基準,具有一定的參考意義。
為什么僅供參考?首先,基線(xiàn)本身正在發(fā)生變化。隨著(zhù)指標計算的逐步更新和軟硬件的更新,基線(xiàn)也會(huì )有一定程度的調整。其次,用戶(hù)的使用場(chǎng)景也會(huì )對性能指標產(chǎn)生很大影響。例如,iOS 用戶(hù)報告的性能指標普遍優(yōu)于 Android 用戶(hù)報告的性能指標。
下面是字節目前內部使用的一些性能指標的基準,基本與谷歌推薦的基準一致。通過(guò)這些數據,可以分析網(wǎng)站的績(jì)效達標率。
指標名稱(chēng)Good(ms)Needs Improvement(ms)Poor(ms)
FP
0-1000
1000-2500

超過(guò) 2500
FCP
0-1800
1800-3000
超過(guò) 3000
液晶面板
0-2500
2500-4000
超過(guò) 4000
TTI
0-3800
3800-7300
超過(guò) 7300
FID
0-100
100-300
超過(guò) 300
6.2 測量網(wǎng)站滿(mǎn)意度
除了常規的性能指標外,網(wǎng)站滿(mǎn)意度的衡量還應考慮基于體驗的指標,例如專(zhuān)門(mén)衡量視覺(jué)穩定性的 CLS。
在線(xiàn)站點(diǎn)滿(mǎn)意度測量一般會(huì )根據燈塔的滿(mǎn)意度計算規則,去除一些推薦在實(shí)驗室環(huán)境中測量的指標的權重。
以下是Bytes目前使用的在線(xiàn)站點(diǎn)性能滿(mǎn)意度權重計算公式,去掉了SI和TBT這兩個(gè)不推薦用于在線(xiàn)環(huán)境測量的指標。
然后有了一個(gè)站點(diǎn)的滿(mǎn)意度,我們終于可以知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該如何優(yōu)化呢?
7. 如何優(yōu)化網(wǎng)站性能
通常,我們可以從性能指標入手,進(jìn)行有針對性的優(yōu)化。雖然指標不同,但優(yōu)化思路是一樣的。了解指標的依賴(lài)關(guān)系后,可以通過(guò)優(yōu)化指標的相關(guān)依賴(lài)關(guān)系,快速優(yōu)化性能指標,從而提升站點(diǎn)性能。
聽(tīng)起來(lái)很抽象,舉個(gè)例子:比如我們要優(yōu)化TTI的時(shí)候,根據剛才提到的TTI的計算方法,可以得出TTI的依賴(lài)主要有FCP、request和Long任務(wù),然后盡快渲染盡可能快的請求,盡快結束請求,避免長(cháng)時(shí)間的任務(wù)是優(yōu)化的關(guān)鍵。指標的具體優(yōu)化措施有很多,后續文章會(huì )介紹。
了解全面的優(yōu)化措施很重要,但每一項都不一定能有效解決您網(wǎng)站面臨的關(guān)鍵性能問(wèn)題。如何做到立即有針對性的去優(yōu)化?通過(guò)恢復用戶(hù)加載時(shí)的外觀(guān)來(lái)幫助定位性能問(wèn)題是一個(gè)想法。
8. 使用在線(xiàn)監控定位性能問(wèn)題
一般來(lái)說(shuō),前端監控除了監控性能指標外,還會(huì )監控請求、資源加載、Long任務(wù)等數據。這些數據可以幫助還原用戶(hù)的加載場(chǎng)景,幫助尋找線(xiàn)索。
例如,在下面的例子中,很多性能指標都很差。通過(guò)監控平臺還原的資源加載瀑布圖可以看出,大部分時(shí)間都花在了拉取資源上。然后就可以得到一個(gè)初步的性能優(yōu)化方案,把優(yōu)化措施集中在資源優(yōu)化上,比如減小JS文件大小,延遲加載未使用的JS代碼等等。
在線(xiàn)監控的例子很多,可以幫助定位性能問(wèn)題,這里就不一一介紹了。截圖中使用了Byte內部的前端監控平臺。目前該方案已經(jīng)在火山引擎上同步,可以實(shí)時(shí)監控web端的真實(shí)數據,接入即可解決告警歸屬、聚類(lèi)分析、詳細定位等問(wèn)題。白屏、性能瓶頸、查詢(xún)慢等關(guān)鍵問(wèn)題歡迎體驗。
掃描下方二維碼,立即申請免費使用??
最近發(fā)布:WordPress自動(dòng)采集發(fā)布插件專(zhuān)業(yè)版WP AutoPost Pro [更新至
目錄
親測完美運行于的 WordPress 各個(gè)版本,請放心使用。WP-AutoPost-Pro 是一款優(yōu)秀的 WordPress 文章采集器,是您操作站群,讓網(wǎng)站自動(dòng)更新內容的利器!采集插件適用對象1、剛建的wordpress站點(diǎn)內容比較少,希望盡快有比較豐富的內容;2、熱點(diǎn)內容自動(dòng)采集并自動(dòng)發(fā)布;3、定時(shí)采集,手動(dòng)采集發(fā)布或保存到草稿;4、css樣式規則,能更精確的采集需要的內容。5、偽原創(chuàng )與翻譯、代理IP進(jìn)行采集、保存Cookie記錄;6、可采集內容到自定義欄目
WP-AutoPost 插件可以采集來(lái)自于任何網(wǎng)站的內容并全自動(dòng)更新你的WordPress站點(diǎn)。它使用非常簡(jiǎn)單,無(wú)需復雜設置,并且足夠強大和穩定,支持wordpress所有特性??刹杉魏尉W(wǎng)站的內容全自動(dòng)任務(wù)采集定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容基本設置功能齊全,完美支持Wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章可下載遠程圖片及其他任意格式附件到本地服務(wù)器,并支持給圖片自動(dòng)添加水印
如果是新手,請查看采集教程:
WP AutoPost Pro是目前最好用的wordpress自動(dòng)采集發(fā)布插件,最大的特點(diǎn)是可以采集來(lái)自于任何網(wǎng)站的內容并自動(dòng)發(fā)布到你的wordpress站點(diǎn)。不像其他大部分wordpress采集插件,只能根據Feed進(jìn)行采集,使用Feed采集有很大的弊端,首先必須找到全文Feed,而現在網(wǎng)上全文Feed很少,大部分只能采集到文章摘要,就算使用Feed采集到文章摘要也需要點(diǎn)擊鏈接才能查看原文,相當于給別的網(wǎng)站做外鏈。做英文垃圾站用的比較多的WP-Robot也只有20幾個(gè)采集來(lái)源,文章來(lái)源比較單一有限。而WP-AutoPost就沒(méi)有上面這些劣勢,真正做到可以采集任何網(wǎng)站的內容并自動(dòng)發(fā)布,采集過(guò)程完全自動(dòng)進(jìn)行無(wú)需人工干預,并提供內容過(guò)濾、HTML標簽過(guò)濾、關(guān)鍵詞替換、自動(dòng)鏈接、自動(dòng)標簽、自動(dòng)下載遠程圖片到本地服務(wù)器、自動(dòng)添加文章前綴后綴、并且可以使用微軟翻譯引擎將采集的文章自動(dòng)翻譯為各種語(yǔ)言進(jìn)行發(fā)布。
1.可采集任何網(wǎng)站的內容,采集信息一目了然。
通過(guò)簡(jiǎn)單設置可采集來(lái)自于任何網(wǎng)站的內容,并可設置多個(gè)采集任務(wù)同時(shí)進(jìn)行,可設置任務(wù)為自動(dòng)運行或手動(dòng)運行,主任務(wù)列表顯示每個(gè)采集任務(wù)的狀況:上次檢測采集時(shí)間,預計下次檢測采集時(shí)間,最近采集文章,已采集更新的文章數等信息,方便查看管理。
文章管理功能方便查詢(xún)、搜索、刪除已采集文章,改進(jìn)算法已從根本上杜絕了重復采集相同文章,日志功能記錄采集過(guò)程中出現的異常和抓取錯誤,方便檢查設置錯誤以便進(jìn)行修復。
2.啟用任務(wù)后,全自動(dòng)采集更新,無(wú)需人工干預。
啟用任務(wù)后,定時(shí)檢測是否有新文章可更新,檢測文章是否重復,導入更新文章,這一切操作程序都是全自動(dòng)完成,無(wú)需人工干預。
有兩種觸發(fā)采集更新方式,一種是在頁(yè)面內添加代碼由用戶(hù)訪(fǎng)問(wèn)觸發(fā)采集更新(后臺異步進(jìn)行,不影響用戶(hù)體驗,也不影響網(wǎng)站效率),另外可以用Cron計劃任務(wù)定時(shí)觸發(fā)采集更新任務(wù)
3.定向采集,支持通配符匹配、或CSS選擇器精確采集任何內容,支持采集多層級文章列表、支持采集正文分頁(yè)內容、支持采集多層級正文內容。
定向采集只需要提供文章列表URL即可智能采集來(lái)自于任何網(wǎng)站或欄目?jì)热荨?br /> 不僅支持“通配符匹配”來(lái)采集網(wǎng)頁(yè)內容,更完美支持各種CSS選擇器,只需填寫(xiě)簡(jiǎn)單的形如#title h1的CSS選擇器,便可精確采集網(wǎng)頁(yè)任何內容。(如何設置CSS選擇器)

支持設置關(guān)鍵詞,如果標題中包含關(guān)鍵詞才允許采集(或過(guò)濾掉不允許采集)。
支持設置多個(gè)匹配規則采集網(wǎng)頁(yè)上的不同內容,甚至支持采集任何內容添加到“wordpress自定義欄目”,方便擴展。
4.基本設置功能齊全,完美支持wordpress各種功能,可自動(dòng)設置分類(lèi)目錄、標簽、摘要、特色圖片、自定義欄目等;也可采集目標網(wǎng)站的分類(lèi)目錄、標簽等信息后,可自動(dòng)生成并添加相應分類(lèi)目錄、標簽等信息
每個(gè)采集任務(wù)均可選擇發(fā)布到的分類(lèi)目錄,發(fā)布作者,發(fā)布狀態(tài),檢測更新時(shí)間間隔,采集目標網(wǎng)站的字符集,選擇是否下載圖片或附件。
支持自定義文章類(lèi)型,自定義文章分類(lèi)、文章形式。
完美支持wordpress各種特色功能,自動(dòng)添加標簽,自動(dòng)生成摘要,自動(dòng)設置特色圖片,支持自定義欄目等。
5.可采集微信公眾號、頭條號等自媒體內容,因百度不收錄公眾號,頭條文章等,可輕松獲取優(yōu)質(zhì)“原創(chuàng )”文章,增加百度收錄量及網(wǎng)站權重
支持采集微信公眾號(訂閱號)文章,無(wú)需復雜配置,只需填入“公眾號名稱(chēng)”和“微信號”后即可開(kāi)始采集。
支持采集今日頭條文章,也無(wú)需復雜配置
微信公眾號及今日頭條由于目標限制,為半自動(dòng)方式采集
6.支持Google神經(jīng)網(wǎng)絡(luò )翻譯、有道神經(jīng)網(wǎng)絡(luò )翻譯、百度翻譯,將文章翻譯成其他語(yǔ)言,輕松獲取原創(chuàng )文章
支持Google神經(jīng)網(wǎng)絡(luò )翻譯,翻譯質(zhì)量顯著(zhù)提高,已接近人工翻譯效果,將文章標題和內容翻譯成其他語(yǔ)言,共支持多種語(yǔ)言之間相互翻譯,輕松獲取原創(chuàng )文章。使用Google翻譯API無(wú)需翻墻,只需翻墻獲取API相關(guān)設置信息設置好后即可正常使用,后續調用API翻譯無(wú)需翻墻
支持有道神經(jīng)網(wǎng)絡(luò )翻譯,接近人工翻譯效果,有道翻譯更懂中文,采集英文文章翻譯成中文文章,輕松獲取原創(chuàng )文章。
同時(shí)支持百度翻譯,百度翻譯每月翻譯字符數低于200萬(wàn),享免費服務(wù)

7.支持中英文各種偽原創(chuàng )方式
支持使用翻譯引擎獲取偽原創(chuàng )文章,不僅僅只是替換了同義詞,更是語(yǔ)義的重新表述,唯一性、偽原創(chuàng )效果更好,支持各種語(yǔ)言。同時(shí)集成國外最優(yōu)秀偽原創(chuàng )工具WordAi等,制作英文站可以獲取可讀性、唯一性都更好的偽原創(chuàng )文章。
8.支持市面上所有主流對象存儲服務(wù),包括七牛云、阿里云OSS、騰訊云COS、百度云BOS、又拍云、Amazon AWS S3、Google Cloud Storage,可將文章中圖片及附件自動(dòng)上傳到云對象存儲服務(wù),節省帶寬及空間,提高網(wǎng)站訪(fǎng)問(wèn)速度
七牛云存儲,每月享10GB的免費存儲空間,10GB免費帶寬流量
只需簡(jiǎn)單配置好相關(guān)信息,即可自動(dòng)上傳,通過(guò)wordpress后臺也能直接查看或管理已上傳到云對象存儲的圖片及文件。
9.支持seo優(yōu)化,內容過(guò)濾,HTML標簽過(guò)濾,關(guān)鍵詞替換,自動(dòng)添加鏈接,添加自定義內容,自定義采集后樣式、自定義模板等常用功能
自動(dòng)刪除采集內容中的HTML注釋?zhuān)稍O置刪除標簽中的id,class,style屬性?xún)热?,消除采集的痕跡;自動(dòng)給圖片添加上alt屬性,過(guò)濾鏈接,關(guān)鍵詞替換,自動(dòng)添加自定義鏈接,這些都有利于SEO。
支持內容過(guò)濾,過(guò)濾采集內容中不希望發(fā)布的內容(如廣告代碼,文章來(lái)源,版權等信息),甚至可以在文章任意位置添加上自定義內容,增強文章獨特性;也可是設置采集后添加自定義樣式功能
也支持HTML標簽過(guò)濾功能,可過(guò)濾掉采集文章中的超鏈接,script和style標簽下的不必要的代碼。
付費高速下載:
資源下載此資源下載價(jià)格為10元,請先登錄
服務(wù)條款:
購買(mǎi)即代表你對本站的無(wú)償捐助,非購買(mǎi)本站資源。部分資源禁止在中國大陸下載使用,違者后果自負。同意本條款你方可購買(mǎi)下載本站資源,不同意請離開(kāi)。
所有資源均需登陸后下載,即使是免費的。
SRC漏洞挖掘與最重要的環(huán)節——信息收集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 664 次瀏覽 ? 2022-09-19 20:23
SRC挖掘有很多平臺,比如EDUSRC,比如公益SRC:補天、漏洞盒子等,還有就是一些企業(yè)SRC。對于挖掘src的小伙伴來(lái)說(shuō)第一步都是對資產(chǎn)進(jìn)行收集,所以本篇文章首先介紹一下SRC的上分思路,然后會(huì )具體講解一下信息收集的思路。
公益SRC對于公益SRC來(lái)說(shuō),會(huì )存在各種各樣的漏洞,SQL注入、反射XSS、存儲XSS、任意注冊、cms通殺、弱口令還有邏輯漏洞,公益SRC主要比拼的無(wú)非就是手速,手速決定一切,提交的最多的一般還是sql注入、弱口令、和cms通殺。公益SRC想要沖榜的話(huà)可以選擇一些有大的安全活動(dòng)的時(shí)間,大佬們去參加安全活動(dòng),這個(gè)時(shí)候可以取巧,上榜會(huì )稍微輕松一點(diǎn)。對于公益SRC來(lái)說(shuō),想要沖榜就不能在一個(gè)站上浪費大量時(shí)間,公益SRC對洞的質(zhì)量要求不高,所以只要 花時(shí)間,還是可以上榜的。谷歌鏡像站:
SQL注入SQL注入的話(huà)主要通過(guò)google語(yǔ)法或者fofa進(jìn)行搜索查找,使用inurl關(guān)鍵字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa進(jìn)行特定網(wǎng)站搜索,還是進(jìn)行信息收集,只使用一種關(guān)鍵字對站點(diǎn)去進(jìn)行查找是絕對無(wú)法找全的,關(guān)鍵字有很多,思路也有很多,思維不能局限住,要不斷地去變換??梢試L試這么去構造Google語(yǔ)句:地區inurl:"type_id=1"、行業(yè)inurl:"ptherinfo.asp?id=1"地區和行業(yè)可以任意替換,在提交漏洞的地方通常會(huì )有一個(gè)選項,選擇漏洞所屬地區和所屬行業(yè),可以以此為準一個(gè)一個(gè)找,之后還可以將php替換為asp、aspx、jsp等站點(diǎn)。在對某站點(diǎn)進(jìn)行測試SQL注入的時(shí)候,先通過(guò)一些方式測試是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工測試,然后提交漏洞。
XSS對于XSS來(lái)說(shuō)可能并不好找,所以我認為沒(méi)必要太刻意的去挖XSS,不管是反射型還是存儲型,所以我認為在測試sql注入的時(shí)候順帶對XSS進(jìn)行測試就好了。但是如果想要專(zhuān)門(mén)挖xss,在實(shí)戰中學(xué)習,也可以通過(guò)和sql注入一樣的語(yǔ)法,改變幾個(gè)關(guān)鍵字就好了,比如:地區inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注冊如果你想要挖任意注冊漏洞,那么你首先需要了解什么是任意注冊,任意注冊是一種程序設計的缺陷,顧名思義就是隨便注冊,不需要什么條件,注冊處無(wú)任何驗證。Google語(yǔ)法關(guān)鍵詞:地區/行業(yè)inurl:"register"、地區/行業(yè)inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注冊算是低危漏洞,不過(guò)也有兩分。任意注冊沒(méi)多少人挖,可以嘗試挖掘。去漏洞盒子提交漏洞的時(shí)候,可以看下漏洞類(lèi)型,可以挑一些你認為漏洞比較冷門(mén)沒(méi)人挖并且普遍存在的去下手。
CMS通殺普通人找通殺的思路無(wú)法就是百度谷歌搜索cms通殺,但是其實(shí)這樣的效率并不高,通殺也找不到幾個(gè),這里建議可以去一些漏洞文庫,建議多進(jìn)行漏洞復現,多實(shí)戰,多積累實(shí)戰經(jīng)驗,復現漏洞也是一種積累。
弱口令嘗試弱口令的過(guò)程比較繁瑣,但是最好老老實(shí)實(shí)的手工上分,百度或者谷歌語(yǔ)法搜索后臺站點(diǎn)。如:山西inurl:"后臺"可以嘗試:賬號:admin/test/cs/ceshi/test01等 密碼:admin/123456/a123456/admin123/admin123456等。也可以借助fofa對后臺站點(diǎn)進(jìn)行搜索:title="后臺管理" && country="CN"
EDUSRCfofa語(yǔ)句(查找edu里的管理系統):"管理系統" && org="China Education and Research Network Center"對于EDUSRC來(lái)說(shuō),想上分的同學(xué)主要有兩種方式:1.挖通用性漏洞。找一些站點(diǎn)或者系統,被廣大學(xué)校所使用,覆蓋率很高,再去對這個(gè)站點(diǎn)或者系統進(jìn)行漏洞挖掘,挖掘到之后就可以批量刷分。2.定點(diǎn)打擊。對一個(gè)學(xué)校埋頭苦干,通過(guò)一些信息泄露或者一些學(xué)生的微博、朋友圈等,獲取一些學(xué)生的相關(guān)信息,比如學(xué)號、身份信息號碼、電話(huà)等等,嘗試登入校園內網(wǎng)或者登錄校園統一身份認證系統,對內網(wǎng)進(jìn)行漏洞挖掘,直接日穿。使用Google語(yǔ)法進(jìn)行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本內容:site:域名 intext:管理|后臺|登陸|用戶(hù)名|密碼|驗證碼|系統|帳號|admin|login|sys|managetem|password|username查找可注入點(diǎn):site:域名 inurl:aspx|jsp|php|asp查找上傳漏洞:site:域名 inurl:file|load|editor|Files找eweb編輯器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的數據庫:site:域名 filetype:mdb|asp|#查看腳本類(lèi)型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集滲透測試的本質(zhì)就是信息收集,信息搜集的廣度決定了攻擊的廣度,知識面的廣度決定了攻擊的深度。不管是進(jìn)行SRC漏洞挖掘,還是做項目進(jìn)行滲透測試,又或者是打紅藍對抗,一定要做好信息收集。信息收集很重要,如確定資產(chǎn),比如他有哪些域名、子域名、C段、旁站、系統、微信小程序或者公眾號,確定好站點(diǎn)或者目標系統之后,就是常規的指紋識別,像中間件、網(wǎng)站,掃目錄,后臺,確定功能然后分析每個(gè)功能點(diǎn)上會(huì )有哪些漏洞,就比如一個(gè)登錄頁(yè)面,我們可以考慮的是爆破賬號密碼,社工賬號密碼,SQL注入,XSS漏洞,邏輯漏洞繞過(guò)等。如果大家挖掘SRC的水平都是一樣的或者說(shuō)我們對于各種操作都是同樣了解的,那么如果超越別人,如果你挖的比別人慢,那么你后期提交的漏洞會(huì )撞洞,然后忽略處理。在短時(shí)間內你無(wú)法去提升你的技術(shù)或者是挖掘一個(gè)新的思路,這個(gè)時(shí)候就體現了資產(chǎn)搜集的能力,信息搜集是最難的,也是最麻煩耽誤時(shí)間的,且必須要實(shí)時(shí)去關(guān)注的一件事情。一些常用網(wǎng)站:ICP備案查詢(xún):權重查詢(xún):多地ping:whois查詢(xún):IP反查:以xxx公司為例,根域名:信息收集可以從多個(gè)領(lǐng)域來(lái)看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC軟件等等可以重點(diǎn)關(guān)注備案網(wǎng)站,APP,小程序,微信公眾號,甚至是微博。這里說(shuō)一點(diǎn)小思路,首先可以找到官網(wǎng),用cmd ping他的官網(wǎng),可以看到IP地址,然后可以定位whois,whois中包含了用戶(hù)、郵箱,以及購買(mǎi)的網(wǎng)段。有了網(wǎng)段就可以進(jìn)行一些主動(dòng)信息收集,可以使用一些強大的資產(chǎn)測繪工具,goby的資產(chǎn)測繪還是很不錯的,會(huì )有一些web服務(wù),不用擔心沒(méi)有banner,往往這些沒(méi)有banner的才有問(wèn)題。注意觀(guān)察一下網(wǎng)站底部是否有技術(shù)支持:xxxx|網(wǎng)站建設:xxxx之類(lèi)的標注,一些建站企業(yè)會(huì )出于知識產(chǎn)權保護或者是對外宣傳自己的公司,會(huì )在自家搭建的網(wǎng)站上掛上技術(shù)支持等之類(lèi)的標注,很多建站企業(yè)往往某種類(lèi)型的網(wǎng)站都是套用的同一套源碼,換湯不換藥,運氣不錯的話(huà),那我們的事件就秒變通用。
子域名收集Oneforall盡量多湊一點(diǎn)API,fofa可以找人借一些api,越多越好。執行命令:常用的獲取子域名有2種選擇,一種使用--target指定單個(gè)域名,一種使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤輿)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中尋找URL和子域名的工具,在網(wǎng)站的JS文件中,會(huì )存在各種對測試有幫助的內容,JSFinder可以幫我們獲取到JS中的url和子域名的信息,擴展我們的滲透范圍。爬取分為普通爬取和深度爬取,深度爬取會(huì )深入下一層頁(yè)面爬取的JS,時(shí)間會(huì )消耗的相對較長(cháng)。執行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt運行結束后會(huì )生成兩個(gè)txt文本,Jsurl.txt為URL里面會(huì )有一些接口什么的,Jsdomain.txt為子域名基于TamperMonkey的版本:Layer、子域名收割機 進(jìn)行挖掘通過(guò)這些域名收集工具(layer子域名挖掘機、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)進(jìn)行挖掘。
在線(xiàn)網(wǎng)站查詢(xún)?yōu)榱吮苊釯P被封掉,直接使用在線(xiàn)的子域名爆破網(wǎng)站。subDomainBrute執行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全掃描。Sublist3rKali和Windows環(huán)境下都可以裝這個(gè)工具,Sublist3r是一個(gè)python版工具,其原理是基于通過(guò)使用搜索引擎,從而對站點(diǎn)子域名進(jìn)行列舉。Kali:git clone 執行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一個(gè)域名搜索網(wǎng)站,還會(huì )自動(dòng)歸納同一個(gè)IP的多個(gè)域名。在線(xiàn)域名爆破小藍本通過(guò)小藍本進(jìn)行查詢(xún):愛(ài)企查、企查查、天眼查之前愛(ài)企查活動(dòng)送了會(huì )員,可以更好的進(jìn)行查詢(xún)。谷歌語(yǔ)法迅速查找信息泄露、管理后臺暴露等漏洞語(yǔ)法,例如:filetype:txt 登錄filetype:xls 登錄filetype:doc 登錄intitle:后臺管理intitle:loginintitle:后臺管理 inurl:adminintitle:index of /查找指定網(wǎng)站,再加上site:,例如:site: filetype:txt 登錄site: intitle:后臺管理site: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統谷歌/必應:site:site:如果發(fā)現檢索出來(lái)的很多結果都是www,眾所周知主站一般防御很?chē)?,如果我們不想看到主站可以直?-wwwsite: -www這樣出來(lái)的結果會(huì )自動(dòng)刪去wwwShodan、fofa、zoomeye、360quake等忘了資產(chǎn)搜索引擎fofa語(yǔ)法FOFA作為一個(gè)搜索引擎,我們要熟悉它的查詢(xún)語(yǔ)法,類(lèi)似google語(yǔ)法,FOFA的語(yǔ)法主要分為檢索字段以及運算符,所有的查詢(xún)語(yǔ)句都是由這兩種元素組成的。
目前支持的檢索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的邏輯運算符包括:=,==,!=,&&,||。如果搜索title字段中存在后臺的網(wǎng)站,我們只需要在輸入欄中輸入title=“后臺”,輸出的結果即為全網(wǎng)title中存在后臺兩個(gè)字的網(wǎng)站,可以利用得到的信息繼續進(jìn)行滲透攻擊,對于網(wǎng)站的后臺進(jìn)行密碼暴力破解,密碼找回等等攻擊行為,這樣就可以輕松愉快的開(kāi)始一次簡(jiǎn)單滲透攻擊之旅,而企業(yè)用戶(hù)也可以利用得到的信息進(jìn)行內部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host內所有帶有的域名:host=“”例:搜索某個(gè)IP上的相關(guān)信息: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出來(lái)了一個(gè)高危漏洞,我們需要去統計全球的Apache:server=“Apache”例:搜索前段時(shí)間非?;鸬暮?低暎篽eader=“Hikvsion”例:假如我想搜索微博的后臺,域名為: 并且網(wǎng)頁(yè)內body包含“后臺”:body=“后臺”&& domain=“”&&:與body=“后臺”&& domain=“”提取域名為:并且網(wǎng)頁(yè)內body包含“后臺”的網(wǎng)站,需要同時(shí)滿(mǎn)足兩個(gè)條件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不為80端口的服務(wù)搜索證書(shū)(https或者imaps等)例:百度公司為了檢查自己的域名是否還有心臟出血漏洞可以使用語(yǔ)法:cert=“baidu”搜索指定國家(編碼)的資產(chǎn)例:搜索中國的服務(wù)器 country=“CN”注:country=“CN” country后面的規則為各國家的縮寫(xiě),全球國家縮寫(xiě)如下連接:搜索指定城市的資產(chǎn)例:搜索上海的服務(wù)器 city=“Shanghai”注:搜索城市時(shí)填寫(xiě)城市的全程,首字母必須大寫(xiě)例:搜索centos所有主機 os=“centos”了解了基礎查詢(xún)我們再來(lái)說(shuō)說(shuō)高級查詢(xún),就是多個(gè)基礎查詢(xún)語(yǔ)句用邏輯連接符拼成的語(yǔ)句,例如我們要搜索上海的Discus組件,搜索語(yǔ)句時(shí) (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:邏輯與||:邏輯或上面的語(yǔ)句意思為 (title="Disuz" ||body="content="Discuz") 與city="Shanghai" 這兩個(gè)條件必須同時(shí)滿(mǎn)足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“與body=”content=\”Discuz“ 滿(mǎn)足一個(gè)即可
FOFA可以從不同維度搜索網(wǎng)絡(luò )組件,例如地區,端口號,網(wǎng)絡(luò )服務(wù),操作系統,網(wǎng)絡(luò )協(xié)議等等。目前FOFA支持了多個(gè)網(wǎng)絡(luò )組件的指紋識別,包括建站模塊、分享模塊、各種開(kāi)發(fā)框架、安全檢測平臺、項目管理系統、企業(yè)管理系統、視頻監控系統、站長(cháng)平臺、電商系統、廣告聯(lián)盟、前端庫、路由器、SSL證書(shū)、服務(wù)器管理系統、CDN、Web服務(wù)器、WAF、CMS等等尤其現在支持icon圖標、logo搜索,非常方便,fofa搜索語(yǔ)法與shodan類(lèi)似title="abc" 從標題中搜索abc。例:標題中有北京的網(wǎng)站header="abc" 從http頭中搜索abc。例:jboss服務(wù)器body="abc" 從html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名帶有的網(wǎng)站。例:根域名是的網(wǎng)站host="." 從url中搜索.,注意搜索要用host作為名稱(chēng)。例:政府網(wǎng)站, 教育網(wǎng)站port="443" 查找對應443端口的資產(chǎn)。例:查找對應443端口的資產(chǎn)可以安裝shodan chrome插件,方便進(jìn)行查看和使用。微步在線(xiàn)微步在線(xiàn)的反向IP查找域名十分好用整數透明度公開(kāi)日志枚舉其他途徑旁站查詢(xún)旁站就是在同一臺服務(wù)器上搭建的多個(gè)網(wǎng)站,使用同一個(gè)IP地址。在目標網(wǎng)站無(wú)法攻擊成功時(shí),若他的旁站可以成功攻擊并獲取相應的系統權限,這勢必會(huì )影響到目標網(wǎng)站的安全性,因為已經(jīng)獲取到同一臺服務(wù)器的權限了。公眾號、服務(wù)號收集搜狗搜索引擎企查查微信小程序從微信小程序入手,進(jìn)行測試APP小藍本企查查愛(ài)企查點(diǎn)點(diǎn)七麥七麥還可以切換蘋(píng)果和安卓,獲取下載鏈接apk丟進(jìn)模擬器指紋識別Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需帶上協(xié)議,每行一個(gè)./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主站沒(méi)識別出來(lái),但是其他子站可以丟進(jìn)來(lái)看看潮汐指紋Kscan此工具需要go環(huán)境云悉云悉可以在線(xiàn)搜索子域名、IP段、CMS指紋等信息大禹CMS識別程序對于查詢(xún)到的CMS可以利用網(wǎng)站用于查詢(xún)其他finger 或者棱鏡也可以繞過(guò)CDN如果目標沒(méi)有使用CDN,可以通過(guò)ping獲取IP地址?;蛘呃迷诰€(xiàn)網(wǎng)站 使用了CDN就繞過(guò)CDN來(lái)獲取真實(shí)的IP地址:因為有些網(wǎng)站設置CDN時(shí),可能沒(méi)把國外的訪(fǎng)問(wèn)包含進(jìn)去,所以可以嘗試國外繞過(guò)驗證ip地址因為通過(guò)各種方法得到的ip地址很多,有的是偽ip,無(wú)法訪(fǎng)問(wèn),這就需要逐個(gè)驗證,方法簡(jiǎn)單但是i西南西量比較大,利用ip地址對web站點(diǎn)進(jìn)行訪(fǎng)問(wèn)查詢(xún)域名解析記錄內部郵箱源,收集到內部郵箱服務(wù)器IP地址網(wǎng)站phpinfo文件phpinfo.php分站IP地址,查詢(xún)子域名,CDN很貴,很可能分站就不再使用CDN國外訪(fǎng)問(wèn)敏感信息收集githubgithub敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區,安全意識薄弱的同事經(jīng)常會(huì )將公司的代碼、各種服務(wù)的賬號等極度敏感的信息【開(kāi)源】到github中這里可以利用github找存在這個(gè)關(guān)鍵字的代碼,這樣可以收集到的方面更廣
GSIL項目:通過(guò)配置關(guān)鍵詞,實(shí)時(shí)監控GitHub敏感信息泄露情況,并發(fā)送至指定郵箱常見(jiàn)自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)從流量中分析提取流量代理:通過(guò)WebProxy代理電腦所有流量,再分析流量中出現的子域名域名跳轉記錄中的子域名Response中存在的子域名網(wǎng)絡(luò )請求資源中的子域名DNS解析SSL證書(shū)查詢(xún)暴力枚舉網(wǎng)盤(pán)搜索盤(pán)多多:盤(pán)搜搜:盤(pán)搜:凌云風(fēng)搜索:直接輸入廠(chǎng)商名字然后搜索,看看是否泄露了源碼,或者賬號密碼之類(lèi)的路徑掃描404,403頁(yè)面,不是真的沒(méi)有東西,要一層一層fuzz,一層一層的掃下去工具:具體使用方法可以查看github介紹,這里我一般是使用如下命令(因為擔心線(xiàn)程太高所以通過(guò)-t參數設置為2)。python3 dirsearch.py -u * -t 2關(guān)鍵的地方是大家都可以下載這款工具,獲取它自帶的字典,那么路徑的話(huà),便是大家都能夠搜得到的了,所以這里我推薦是可以適當整合一些師傅們發(fā)出來(lái)的路徑字典到/dirsearch-0.4.2/db/dicc.txt中。推薦一些字典:GitHub - ybdt/dict-hub: 紅隊字典:弱用戶(hù)名、弱口令、默認口令、泄露密鑰dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每個(gè)工具掃出來(lái)同一個(gè)站點(diǎn)都會(huì )爆出不同的路徑,建議把三個(gè)工具都拿來(lái)掃一遍,另外找一些像后臺、登錄系統之類(lèi)的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統御劍7kbscandirsearch基于證書(shū)基于shodan找到帶有該icon的網(wǎng)站在shodan搜索中有一個(gè)關(guān)于網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以使用這個(gè)語(yǔ)法搜索出使用了同一icon圖標的網(wǎng)站。
由于hash為一個(gè)未知的隨機數,所以是無(wú)法通過(guò)輸入一個(gè)確定的hash值來(lái)搜索帶有指定圖標的網(wǎng)站的,只能通過(guò)查看一個(gè)已經(jīng)被shodan收錄的網(wǎng)站的hash值,來(lái)進(jìn)一步獲取到所有帶有某icon的網(wǎng)站。那么這里的用法就非常具有局限性,你只能是碰運氣來(lái)找到你所需要查找的網(wǎng)站,因為shodan不一定收錄了你想要搜索的網(wǎng)站。那么如果shodan收錄了某個(gè)IP,這個(gè)服務(wù)器帶有某個(gè)icon圖標,也可以搜索所有帶有此icon的服務(wù)器IP如果我像搜索帶有這個(gè)icon的所有IP地址的話(huà),可以先在shodan搜索這個(gè)IP。注意:shodan中有一個(gè)功能,shodan的原始數據(Raw Data)功能。點(diǎn)擊詳情里的View Raw Data,打開(kāi)可以看到shodan所存儲的關(guān)于這個(gè)IP的所有信息的原始數據。關(guān)于icon hash的字段是:data.0.http.favicon.hash這個(gè)數值就是http.favicon.hash:中所需要的搜索值。根據上述得到的hash值,成功得到了所有待用這個(gè)icon的網(wǎng)站。域傳送漏洞DNS區域傳送(DNZ zone transfer)指的是一臺備用服務(wù)器使用來(lái)自主服務(wù)器的數據刷新自己的域(zone)數據庫。
這位運行中的DNS服務(wù)提供了一定的冗余度,其目的是為了防止主的域名服務(wù)器因意外故障變得不可用時(shí)影響到整個(gè)域名的解析。一般來(lái)說(shuō),DNS區域傳送操作只在網(wǎng)絡(luò )里真的有備用域名DNS服務(wù)器時(shí)才有必要用到,但許多DNS服務(wù)器卻被錯誤的配置成只要有client發(fā)出請求,就會(huì )向對方提供一個(gè)zone數據庫的詳細信息,所以說(shuō)允許不受信任的因特網(wǎng)用戶(hù)執行DNS區域傳送(zone transfer)操作是最為嚴重的錯誤配置之一??梢杂胐ig工具來(lái)檢測域傳送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通過(guò)域名傳送漏洞可以得到子域名信息以及子域名對應的IP地址。常見(jiàn)漏洞弱口令,管理員權限的弱口令,可以是一些后臺管理系統的,也可以是防火墻的。越權,這個(gè)相對來(lái)說(shuō)比較常見(jiàn),系統設計存在缺陷,通過(guò)參數來(lái)傳遞身份和訪(fǎng)問(wèn)請求頁(yè)面的信息,只需要修改參數即可越權到別人的身份,可能有垂直越權,也可能是水平越權。SQL注入,只要細心一點(diǎn),SQL注入也是比較常見(jiàn)的,只要能注出數據庫就行了,注意別惹禍上身。文件上傳,這類(lèi)的話(huà),有一些老系統沒(méi)什么限制,可以嘗試。struts2框架漏洞,這個(gè)框架出了很多漏洞,前段時(shí)間比較火。shiro命令執行,也是框架漏洞,一個(gè)反序列化漏洞,現在網(wǎng)上還存在很多存在這個(gè)洞的站點(diǎn)。任意文件下載,在一些站點(diǎn)的下載點(diǎn),可以抓包測試,通過(guò)修改下載鏈接中下載文件的路徑,像/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 添加用戶(hù)的默認信息的文件<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 是用戶(hù)密碼信息的默認屬性<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 用戶(hù)信息的骨架<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 不能登陸的用戶(hù)<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服務(wù)的配置文件<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系統的一個(gè)基本系統配置文件
邏輯漏洞,一些已經(jīng)被很多人挖過(guò)的站點(diǎn)除了一些最新的漏洞之外,可能就只剩下邏輯漏洞了,比如任意密碼修改,或者一些組件漏洞,還有在修改密碼的地方,修改密碼請求是一次發(fā)包還是分兩次發(fā)包,密碼找回點(diǎn),有些情況下驗證碼就在返回包中包含著(zhù);有些情況下接受驗證碼的手機號或者郵箱就在請求包中,可修改為自己的,驗證碼就會(huì )發(fā)送到你修改的手機號或者郵箱處,挖邏輯漏洞的話(huà),更多情況下要抓包查看,了解它的邏輯,從中找到缺陷。具體可以看:該文章專(zhuān)門(mén)對邏輯漏洞進(jìn)行了總結。文章來(lái)源:FreeBuf.COM;作者:YLion侵權請私聊公眾號刪文 查看全部
SRC漏洞挖掘與最重要的環(huán)節——信息收集
SRC挖掘有很多平臺,比如EDUSRC,比如公益SRC:補天、漏洞盒子等,還有就是一些企業(yè)SRC。對于挖掘src的小伙伴來(lái)說(shuō)第一步都是對資產(chǎn)進(jìn)行收集,所以本篇文章首先介紹一下SRC的上分思路,然后會(huì )具體講解一下信息收集的思路。
公益SRC對于公益SRC來(lái)說(shuō),會(huì )存在各種各樣的漏洞,SQL注入、反射XSS、存儲XSS、任意注冊、cms通殺、弱口令還有邏輯漏洞,公益SRC主要比拼的無(wú)非就是手速,手速決定一切,提交的最多的一般還是sql注入、弱口令、和cms通殺。公益SRC想要沖榜的話(huà)可以選擇一些有大的安全活動(dòng)的時(shí)間,大佬們去參加安全活動(dòng),這個(gè)時(shí)候可以取巧,上榜會(huì )稍微輕松一點(diǎn)。對于公益SRC來(lái)說(shuō),想要沖榜就不能在一個(gè)站上浪費大量時(shí)間,公益SRC對洞的質(zhì)量要求不高,所以只要 花時(shí)間,還是可以上榜的。谷歌鏡像站:
SQL注入SQL注入的話(huà)主要通過(guò)google語(yǔ)法或者fofa進(jìn)行搜索查找,使用inurl關(guān)鍵字在谷歌中搜索。如:inurl:php?id=、inurl:asp?id、inurl:Show.asp?ID= 等等。注意:不管是使用Google和fofa進(jìn)行特定網(wǎng)站搜索,還是進(jìn)行信息收集,只使用一種關(guān)鍵字對站點(diǎn)去進(jìn)行查找是絕對無(wú)法找全的,關(guān)鍵字有很多,思路也有很多,思維不能局限住,要不斷地去變換??梢試L試這么去構造Google語(yǔ)句:地區inurl:"type_id=1"、行業(yè)inurl:"ptherinfo.asp?id=1"地區和行業(yè)可以任意替換,在提交漏洞的地方通常會(huì )有一個(gè)選項,選擇漏洞所屬地區和所屬行業(yè),可以以此為準一個(gè)一個(gè)找,之后還可以將php替換為asp、aspx、jsp等站點(diǎn)。在對某站點(diǎn)進(jìn)行測試SQL注入的時(shí)候,先通過(guò)一些方式測試是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工測試,然后提交漏洞。
XSS對于XSS來(lái)說(shuō)可能并不好找,所以我認為沒(méi)必要太刻意的去挖XSS,不管是反射型還是存儲型,所以我認為在測試sql注入的時(shí)候順帶對XSS進(jìn)行測試就好了。但是如果想要專(zhuān)門(mén)挖xss,在實(shí)戰中學(xué)習,也可以通過(guò)和sql注入一樣的語(yǔ)法,改變幾個(gè)關(guān)鍵字就好了,比如:地區inurl:"search?kw="、inurl:'Product.asp?BigClassName'
任意注冊如果你想要挖任意注冊漏洞,那么你首先需要了解什么是任意注冊,任意注冊是一種程序設計的缺陷,顧名思義就是隨便注冊,不需要什么條件,注冊處無(wú)任何驗證。Google語(yǔ)法關(guān)鍵詞:地區/行業(yè)inurl:"register"、地區/行業(yè)inurl:"regp.asp"、Reg.asp、userreg.asp、reg1.asp等。任意注冊算是低危漏洞,不過(guò)也有兩分。任意注冊沒(méi)多少人挖,可以嘗試挖掘。去漏洞盒子提交漏洞的時(shí)候,可以看下漏洞類(lèi)型,可以挑一些你認為漏洞比較冷門(mén)沒(méi)人挖并且普遍存在的去下手。
CMS通殺普通人找通殺的思路無(wú)法就是百度谷歌搜索cms通殺,但是其實(shí)這樣的效率并不高,通殺也找不到幾個(gè),這里建議可以去一些漏洞文庫,建議多進(jìn)行漏洞復現,多實(shí)戰,多積累實(shí)戰經(jīng)驗,復現漏洞也是一種積累。

弱口令嘗試弱口令的過(guò)程比較繁瑣,但是最好老老實(shí)實(shí)的手工上分,百度或者谷歌語(yǔ)法搜索后臺站點(diǎn)。如:山西inurl:"后臺"可以嘗試:賬號:admin/test/cs/ceshi/test01等 密碼:admin/123456/a123456/admin123/admin123456等。也可以借助fofa對后臺站點(diǎn)進(jìn)行搜索:title="后臺管理" && country="CN"
EDUSRCfofa語(yǔ)句(查找edu里的管理系統):"管理系統" && org="China Education and Research Network Center"對于EDUSRC來(lái)說(shuō),想上分的同學(xué)主要有兩種方式:1.挖通用性漏洞。找一些站點(diǎn)或者系統,被廣大學(xué)校所使用,覆蓋率很高,再去對這個(gè)站點(diǎn)或者系統進(jìn)行漏洞挖掘,挖掘到之后就可以批量刷分。2.定點(diǎn)打擊。對一個(gè)學(xué)校埋頭苦干,通過(guò)一些信息泄露或者一些學(xué)生的微博、朋友圈等,獲取一些學(xué)生的相關(guān)信息,比如學(xué)號、身份信息號碼、電話(huà)等等,嘗試登入校園內網(wǎng)或者登錄校園統一身份認證系統,對內網(wǎng)進(jìn)行漏洞挖掘,直接日穿。使用Google語(yǔ)法進(jìn)行收集:site:""inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms查找文本內容:site:域名 intext:管理|后臺|登陸|用戶(hù)名|密碼|驗證碼|系統|帳號|admin|login|sys|managetem|password|username查找可注入點(diǎn):site:域名 inurl:aspx|jsp|php|asp查找上傳漏洞:site:域名 inurl:file|load|editor|Files找eweb編輯器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit存在的數據庫:site:域名 filetype:mdb|asp|#查看腳本類(lèi)型:site:域名 filetype:asp/aspx/php/jsp迂回策略入侵:inurl:cms/data/templates/images/index/
信息收集滲透測試的本質(zhì)就是信息收集,信息搜集的廣度決定了攻擊的廣度,知識面的廣度決定了攻擊的深度。不管是進(jìn)行SRC漏洞挖掘,還是做項目進(jìn)行滲透測試,又或者是打紅藍對抗,一定要做好信息收集。信息收集很重要,如確定資產(chǎn),比如他有哪些域名、子域名、C段、旁站、系統、微信小程序或者公眾號,確定好站點(diǎn)或者目標系統之后,就是常規的指紋識別,像中間件、網(wǎng)站,掃目錄,后臺,確定功能然后分析每個(gè)功能點(diǎn)上會(huì )有哪些漏洞,就比如一個(gè)登錄頁(yè)面,我們可以考慮的是爆破賬號密碼,社工賬號密碼,SQL注入,XSS漏洞,邏輯漏洞繞過(guò)等。如果大家挖掘SRC的水平都是一樣的或者說(shuō)我們對于各種操作都是同樣了解的,那么如果超越別人,如果你挖的比別人慢,那么你后期提交的漏洞會(huì )撞洞,然后忽略處理。在短時(shí)間內你無(wú)法去提升你的技術(shù)或者是挖掘一個(gè)新的思路,這個(gè)時(shí)候就體現了資產(chǎn)搜集的能力,信息搜集是最難的,也是最麻煩耽誤時(shí)間的,且必須要實(shí)時(shí)去關(guān)注的一件事情。一些常用網(wǎng)站:ICP備案查詢(xún):權重查詢(xún):多地ping:whois查詢(xún):IP反查:以xxx公司為例,根域名:信息收集可以從多個(gè)領(lǐng)域來(lái)看:公司,子公司,域名,子域名,IPV4,IPV6,小程序,APP,PC軟件等等可以重點(diǎn)關(guān)注備案網(wǎng)站,APP,小程序,微信公眾號,甚至是微博。這里說(shuō)一點(diǎn)小思路,首先可以找到官網(wǎng),用cmd ping他的官網(wǎng),可以看到IP地址,然后可以定位whois,whois中包含了用戶(hù)、郵箱,以及購買(mǎi)的網(wǎng)段。有了網(wǎng)段就可以進(jìn)行一些主動(dòng)信息收集,可以使用一些強大的資產(chǎn)測繪工具,goby的資產(chǎn)測繪還是很不錯的,會(huì )有一些web服務(wù),不用擔心沒(méi)有banner,往往這些沒(méi)有banner的才有問(wèn)題。注意觀(guān)察一下網(wǎng)站底部是否有技術(shù)支持:xxxx|網(wǎng)站建設:xxxx之類(lèi)的標注,一些建站企業(yè)會(huì )出于知識產(chǎn)權保護或者是對外宣傳自己的公司,會(huì )在自家搭建的網(wǎng)站上掛上技術(shù)支持等之類(lèi)的標注,很多建站企業(yè)往往某種類(lèi)型的網(wǎng)站都是套用的同一套源碼,換湯不換藥,運氣不錯的話(huà),那我們的事件就秒變通用。
子域名收集Oneforall盡量多湊一點(diǎn)API,fofa可以找人借一些api,越多越好。執行命令:常用的獲取子域名有2種選擇,一種使用--target指定單個(gè)域名,一種使用--targets指定域名文件。python3 oneforall.py --target runpython3 oneforall.py --targets ./domains.txt runpython3 oneforall.py --target runKunyu(坤輿)一款信息搜集工具,包含了很多的接口,包括zoomeyes、360quakeJSFinder(JS信息收集)JSFinder是一個(gè)在網(wǎng)頁(yè)的JS文件中尋找URL和子域名的工具,在網(wǎng)站的JS文件中,會(huì )存在各種對測試有幫助的內容,JSFinder可以幫我們獲取到JS中的url和子域名的信息,擴展我們的滲透范圍。爬取分為普通爬取和深度爬取,深度爬取會(huì )深入下一層頁(yè)面爬取的JS,時(shí)間會(huì )消耗的相對較長(cháng)。執行命令:python3 JSFinder.py -u -ou JSurl.txt -os JSdomain.txt運行結束后會(huì )生成兩個(gè)txt文本,Jsurl.txt為URL里面會(huì )有一些接口什么的,Jsdomain.txt為子域名基于TamperMonkey的版本:Layer、子域名收割機 進(jìn)行挖掘通過(guò)這些域名收集工具(layer子域名挖掘機、Maltego CE、wydomain、subDomainsBrue、sublist3r、subfinder)進(jìn)行挖掘。
在線(xiàn)網(wǎng)站查詢(xún)?yōu)榱吮苊釯P被封掉,直接使用在線(xiàn)的子域名爆破網(wǎng)站。subDomainBrute執行命令:python subDomainsBrute.py -t 10 -o .txtpython subDomainsBrute.py -t 10 --full -o .txt //全掃描。Sublist3rKali和Windows環(huán)境下都可以裝這個(gè)工具,Sublist3r是一個(gè)python版工具,其原理是基于通過(guò)使用搜索引擎,從而對站點(diǎn)子域名進(jìn)行列舉。Kali:git clone 執行命令:python sublist3r.py -d -o -sublist3r.txtDNSdumpster非常好用的一個(gè)域名搜索網(wǎng)站,還會(huì )自動(dòng)歸納同一個(gè)IP的多個(gè)域名。在線(xiàn)域名爆破小藍本通過(guò)小藍本進(jìn)行查詢(xún):愛(ài)企查、企查查、天眼查之前愛(ài)企查活動(dòng)送了會(huì )員,可以更好的進(jìn)行查詢(xún)。谷歌語(yǔ)法迅速查找信息泄露、管理后臺暴露等漏洞語(yǔ)法,例如:filetype:txt 登錄filetype:xls 登錄filetype:doc 登錄intitle:后臺管理intitle:loginintitle:后臺管理 inurl:adminintitle:index of /查找指定網(wǎng)站,再加上site:,例如:site: filetype:txt 登錄site: intitle:后臺管理site: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統谷歌/必應:site:site:如果發(fā)現檢索出來(lái)的很多結果都是www,眾所周知主站一般防御很?chē)?,如果我們不想看到主站可以直?-wwwsite: -www這樣出來(lái)的結果會(huì )自動(dòng)刪去wwwShodan、fofa、zoomeye、360quake等忘了資產(chǎn)搜索引擎fofa語(yǔ)法FOFA作為一個(gè)搜索引擎,我們要熟悉它的查詢(xún)語(yǔ)法,類(lèi)似google語(yǔ)法,FOFA的語(yǔ)法主要分為檢索字段以及運算符,所有的查詢(xún)語(yǔ)句都是由這兩種元素組成的。
目前支持的檢索字段包括:domain,host,ip,title,server,header,body,port,cert,country,city,os,appserver,middleware,language,tags,user_tag等等,等等,支持的邏輯運算符包括:=,==,!=,&&,||。如果搜索title字段中存在后臺的網(wǎng)站,我們只需要在輸入欄中輸入title=“后臺”,輸出的結果即為全網(wǎng)title中存在后臺兩個(gè)字的網(wǎng)站,可以利用得到的信息繼續進(jìn)行滲透攻擊,對于網(wǎng)站的后臺進(jìn)行密碼暴力破解,密碼找回等等攻擊行為,這樣就可以輕松愉快的開(kāi)始一次簡(jiǎn)單滲透攻擊之旅,而企業(yè)用戶(hù)也可以利用得到的信息進(jìn)行內部的弱口令排查等等,防范于未然。例:搜索QQ所有的子域名:domain=“”例:搜索host內所有帶有的域名:host=“”例:搜索某個(gè)IP上的相關(guān)信息: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出來(lái)了一個(gè)高危漏洞,我們需要去統計全球的Apache:server=“Apache”例:搜索前段時(shí)間非?;鸬暮?低暎篽eader=“Hikvsion”例:假如我想搜索微博的后臺,域名為: 并且網(wǎng)頁(yè)內body包含“后臺”:body=“后臺”&& domain=“”&&:與body=“后臺”&& domain=“”提取域名為:并且網(wǎng)頁(yè)內body包含“后臺”的網(wǎng)站,需要同時(shí)滿(mǎn)足兩個(gè)條件。
例:想要找非80端口 port!=“80”!=:port!="80" 匹配端口不為80端口的服務(wù)搜索證書(shū)(https或者imaps等)例:百度公司為了檢查自己的域名是否還有心臟出血漏洞可以使用語(yǔ)法:cert=“baidu”搜索指定國家(編碼)的資產(chǎn)例:搜索中國的服務(wù)器 country=“CN”注:country=“CN” country后面的規則為各國家的縮寫(xiě),全球國家縮寫(xiě)如下連接:搜索指定城市的資產(chǎn)例:搜索上海的服務(wù)器 city=“Shanghai”注:搜索城市時(shí)填寫(xiě)城市的全程,首字母必須大寫(xiě)例:搜索centos所有主機 os=“centos”了解了基礎查詢(xún)我們再來(lái)說(shuō)說(shuō)高級查詢(xún),就是多個(gè)基礎查詢(xún)語(yǔ)句用邏輯連接符拼成的語(yǔ)句,例如我們要搜索上海的Discus組件,搜索語(yǔ)句時(shí) (title="Discuz" || body="count="Discuz")&&city="Shanghai"&&:邏輯與||:邏輯或上面的語(yǔ)句意思為 (title="Disuz" ||body="content="Discuz") 與city="Shanghai" 這兩個(gè)條件必須同時(shí)滿(mǎn)足,(title="Discuz" ||body="dontent="Discuz") 中的title=”Discuz“與body=”content=\”Discuz“ 滿(mǎn)足一個(gè)即可
FOFA可以從不同維度搜索網(wǎng)絡(luò )組件,例如地區,端口號,網(wǎng)絡(luò )服務(wù),操作系統,網(wǎng)絡(luò )協(xié)議等等。目前FOFA支持了多個(gè)網(wǎng)絡(luò )組件的指紋識別,包括建站模塊、分享模塊、各種開(kāi)發(fā)框架、安全檢測平臺、項目管理系統、企業(yè)管理系統、視頻監控系統、站長(cháng)平臺、電商系統、廣告聯(lián)盟、前端庫、路由器、SSL證書(shū)、服務(wù)器管理系統、CDN、Web服務(wù)器、WAF、CMS等等尤其現在支持icon圖標、logo搜索,非常方便,fofa搜索語(yǔ)法與shodan類(lèi)似title="abc" 從標題中搜索abc。例:標題中有北京的網(wǎng)站header="abc" 從http頭中搜索abc。例:jboss服務(wù)器body="abc" 從html正文中搜索abc。例:正文包含Hacked bydomain="" 搜索根域名帶有的網(wǎng)站。例:根域名是的網(wǎng)站host="." 從url中搜索.,注意搜索要用host作為名稱(chēng)。例:政府網(wǎng)站, 教育網(wǎng)站port="443" 查找對應443端口的資產(chǎn)。例:查找對應443端口的資產(chǎn)可以安裝shodan chrome插件,方便進(jìn)行查看和使用。微步在線(xiàn)微步在線(xiàn)的反向IP查找域名十分好用整數透明度公開(kāi)日志枚舉其他途徑旁站查詢(xún)旁站就是在同一臺服務(wù)器上搭建的多個(gè)網(wǎng)站,使用同一個(gè)IP地址。在目標網(wǎng)站無(wú)法攻擊成功時(shí),若他的旁站可以成功攻擊并獲取相應的系統權限,這勢必會(huì )影響到目標網(wǎng)站的安全性,因為已經(jīng)獲取到同一臺服務(wù)器的權限了。公眾號、服務(wù)號收集搜狗搜索引擎企查查微信小程序從微信小程序入手,進(jìn)行測試APP小藍本企查查愛(ài)企查點(diǎn)點(diǎn)七麥七麥還可以切換蘋(píng)果和安卓,獲取下載鏈接apk丟進(jìn)模擬器指紋識別Ehole使用方法:./Ehole-darwin -l url.txt //URL地址需帶上協(xié)議,每行一個(gè)./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主站沒(méi)識別出來(lái),但是其他子站可以丟進(jìn)來(lái)看看潮汐指紋Kscan此工具需要go環(huán)境云悉云悉可以在線(xiàn)搜索子域名、IP段、CMS指紋等信息大禹CMS識別程序對于查詢(xún)到的CMS可以利用網(wǎng)站用于查詢(xún)其他finger 或者棱鏡也可以繞過(guò)CDN如果目標沒(méi)有使用CDN,可以通過(guò)ping獲取IP地址?;蛘呃迷诰€(xiàn)網(wǎng)站 使用了CDN就繞過(guò)CDN來(lái)獲取真實(shí)的IP地址:因為有些網(wǎng)站設置CDN時(shí),可能沒(méi)把國外的訪(fǎng)問(wèn)包含進(jìn)去,所以可以嘗試國外繞過(guò)驗證ip地址因為通過(guò)各種方法得到的ip地址很多,有的是偽ip,無(wú)法訪(fǎng)問(wèn),這就需要逐個(gè)驗證,方法簡(jiǎn)單但是i西南西量比較大,利用ip地址對web站點(diǎn)進(jìn)行訪(fǎng)問(wèn)查詢(xún)域名解析記錄內部郵箱源,收集到內部郵箱服務(wù)器IP地址網(wǎng)站phpinfo文件phpinfo.php分站IP地址,查詢(xún)子域名,CDN很貴,很可能分站就不再使用CDN國外訪(fǎng)問(wèn)敏感信息收集githubgithub敏感信息泄露一直是企業(yè)信息泄露和知識產(chǎn)權泄露的重災區,安全意識薄弱的同事經(jīng)常會(huì )將公司的代碼、各種服務(wù)的賬號等極度敏感的信息【開(kāi)源】到github中這里可以利用github找存在這個(gè)關(guān)鍵字的代碼,這樣可以收集到的方面更廣
GSIL項目:通過(guò)配置關(guān)鍵詞,實(shí)時(shí)監控GitHub敏感信息泄露情況,并發(fā)送至指定郵箱常見(jiàn)自身泄露robots.txtcrossdomain.xml(跨域策略文件cdx)從流量中分析提取流量代理:通過(guò)WebProxy代理電腦所有流量,再分析流量中出現的子域名域名跳轉記錄中的子域名Response中存在的子域名網(wǎng)絡(luò )請求資源中的子域名DNS解析SSL證書(shū)查詢(xún)暴力枚舉網(wǎng)盤(pán)搜索盤(pán)多多:盤(pán)搜搜:盤(pán)搜:凌云風(fēng)搜索:直接輸入廠(chǎng)商名字然后搜索,看看是否泄露了源碼,或者賬號密碼之類(lèi)的路徑掃描404,403頁(yè)面,不是真的沒(méi)有東西,要一層一層fuzz,一層一層的掃下去工具:具體使用方法可以查看github介紹,這里我一般是使用如下命令(因為擔心線(xiàn)程太高所以通過(guò)-t參數設置為2)。python3 dirsearch.py -u * -t 2關(guān)鍵的地方是大家都可以下載這款工具,獲取它自帶的字典,那么路徑的話(huà),便是大家都能夠搜得到的了,所以這里我推薦是可以適當整合一些師傅們發(fā)出來(lái)的路徑字典到/dirsearch-0.4.2/db/dicc.txt中。推薦一些字典:GitHub - ybdt/dict-hub: 紅隊字典:弱用戶(hù)名、弱口令、默認口令、泄露密鑰dict-hub/2-弱口令 at master · ybdt/dict-hub · GitHub每個(gè)工具掃出來(lái)同一個(gè)站點(diǎn)都會(huì )爆出不同的路徑,建議把三個(gè)工具都拿來(lái)掃一遍,另外找一些像后臺、登錄系統之類(lèi)的,可以用Google hackingsite: adminsite: loginsite: systemsite: 管理site: 登錄site: 內部site: 系統御劍7kbscandirsearch基于證書(shū)基于shodan找到帶有該icon的網(wǎng)站在shodan搜索中有一個(gè)關(guān)于網(wǎng)站icon圖標的搜索語(yǔ)法,http.favicon.hash,我們可以使用這個(gè)語(yǔ)法搜索出使用了同一icon圖標的網(wǎng)站。
由于hash為一個(gè)未知的隨機數,所以是無(wú)法通過(guò)輸入一個(gè)確定的hash值來(lái)搜索帶有指定圖標的網(wǎng)站的,只能通過(guò)查看一個(gè)已經(jīng)被shodan收錄的網(wǎng)站的hash值,來(lái)進(jìn)一步獲取到所有帶有某icon的網(wǎng)站。那么這里的用法就非常具有局限性,你只能是碰運氣來(lái)找到你所需要查找的網(wǎng)站,因為shodan不一定收錄了你想要搜索的網(wǎng)站。那么如果shodan收錄了某個(gè)IP,這個(gè)服務(wù)器帶有某個(gè)icon圖標,也可以搜索所有帶有此icon的服務(wù)器IP如果我像搜索帶有這個(gè)icon的所有IP地址的話(huà),可以先在shodan搜索這個(gè)IP。注意:shodan中有一個(gè)功能,shodan的原始數據(Raw Data)功能。點(diǎn)擊詳情里的View Raw Data,打開(kāi)可以看到shodan所存儲的關(guān)于這個(gè)IP的所有信息的原始數據。關(guān)于icon hash的字段是:data.0.http.favicon.hash這個(gè)數值就是http.favicon.hash:中所需要的搜索值。根據上述得到的hash值,成功得到了所有待用這個(gè)icon的網(wǎng)站。域傳送漏洞DNS區域傳送(DNZ zone transfer)指的是一臺備用服務(wù)器使用來(lái)自主服務(wù)器的數據刷新自己的域(zone)數據庫。
這位運行中的DNS服務(wù)提供了一定的冗余度,其目的是為了防止主的域名服務(wù)器因意外故障變得不可用時(shí)影響到整個(gè)域名的解析。一般來(lái)說(shuō),DNS區域傳送操作只在網(wǎng)絡(luò )里真的有備用域名DNS服務(wù)器時(shí)才有必要用到,但許多DNS服務(wù)器卻被錯誤的配置成只要有client發(fā)出請求,就會(huì )向對方提供一個(gè)zone數據庫的詳細信息,所以說(shuō)允許不受信任的因特網(wǎng)用戶(hù)執行DNS區域傳送(zone transfer)操作是最為嚴重的錯誤配置之一??梢杂胐ig工具來(lái)檢測域傳送漏洞:命令如下:[ dig axfr @ ][ dig axfr @172.16.132.1]通過(guò)域名傳送漏洞可以得到子域名信息以及子域名對應的IP地址。常見(jiàn)漏洞弱口令,管理員權限的弱口令,可以是一些后臺管理系統的,也可以是防火墻的。越權,這個(gè)相對來(lái)說(shuō)比較常見(jiàn),系統設計存在缺陷,通過(guò)參數來(lái)傳遞身份和訪(fǎng)問(wèn)請求頁(yè)面的信息,只需要修改參數即可越權到別人的身份,可能有垂直越權,也可能是水平越權。SQL注入,只要細心一點(diǎn),SQL注入也是比較常見(jiàn)的,只要能注出數據庫就行了,注意別惹禍上身。文件上傳,這類(lèi)的話(huà),有一些老系統沒(méi)什么限制,可以嘗試。struts2框架漏洞,這個(gè)框架出了很多漏洞,前段時(shí)間比較火。shiro命令執行,也是框架漏洞,一個(gè)反序列化漏洞,現在網(wǎng)上還存在很多存在這個(gè)洞的站點(diǎn)。任意文件下載,在一些站點(diǎn)的下載點(diǎn),可以抓包測試,通過(guò)修改下載鏈接中下載文件的路徑,像/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 添加用戶(hù)的默認信息的文件<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 是用戶(hù)密碼信息的默認屬性<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 用戶(hù)信息的骨架<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 不能登陸的用戶(hù)<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服務(wù)的配置文件<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系統的一個(gè)基本系統配置文件
邏輯漏洞,一些已經(jīng)被很多人挖過(guò)的站點(diǎn)除了一些最新的漏洞之外,可能就只剩下邏輯漏洞了,比如任意密碼修改,或者一些組件漏洞,還有在修改密碼的地方,修改密碼請求是一次發(fā)包還是分兩次發(fā)包,密碼找回點(diǎn),有些情況下驗證碼就在返回包中包含著(zhù);有些情況下接受驗證碼的手機號或者郵箱就在請求包中,可修改為自己的,驗證碼就會(huì )發(fā)送到你修改的手機號或者郵箱處,挖邏輯漏洞的話(huà),更多情況下要抓包查看,了解它的邏輯,從中找到缺陷。具體可以看:該文章專(zhuān)門(mén)對邏輯漏洞進(jìn)行了總結。文章來(lái)源:FreeBuf.COM;作者:YLion侵權請私聊公眾號刪文
我做OZON的第24篇:上架產(chǎn)品三種方式之ERP采集刊登詳細步驟
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 996 次瀏覽 ? 2022-08-26 13:39
目前OZON平臺賣(mài)家使用最多的采集刊登軟件是“芒果店長(cháng)”,那么這篇文章就以【芒果店長(cháng)】為例來(lái)演示如何通過(guò)ERP進(jìn)行采集刊登產(chǎn)品。
首先說(shuō)一下,對于賣(mài)家來(lái)說(shuō)應該使用ERP刊登還是表格刊登,這里要看具體需求。
如果是需要大量采集和翻譯圖片的,那么通過(guò)ERP是會(huì )提高效率,因為ERP的圖片翻譯和圖片采集確實(shí)要方便很多。但是如果上架產(chǎn)品不多,并集中在某一些品類(lèi),那么使用表格刊登反而更好!
第一步:注冊登錄芒果店長(cháng)
各位賣(mài)家可以自己前往芒果店長(cháng)注冊登錄,這里就不做演示
第二步:授權店鋪
1、在如下圖所示區域輸入:店鋪別名(自己填寫(xiě),方便管理即可);Client-Id;Api-Key。然后點(diǎn)擊保存即可
2、Client-Id和Api-Key的獲?。?br /> ?。?)進(jìn)入OZON店鋪后臺,點(diǎn)擊設置頁(yè)面
?。?)點(diǎn)擊API秘鑰
?。?)在如下所示的彈窗中,點(diǎn)擊復制按鈕,復制秘鑰。注意:這個(gè)秘鑰僅顯示1次,注意自己保存好!
3、將Client-Id和Api-Key填進(jìn)去之后,點(diǎn)擊保存,即表示授權成功!
第三步:安裝最新版本芒果采集插件
芒果官網(wǎng)有詳細的采集插件安裝教程,支持chrome\360\QQ\火狐等多款瀏覽器。教程地址為:
如果出現如下圖所示的效果,即表示插件安裝成功。
第四步:采集產(chǎn)品(以1688為例)
1、找到你選好的產(chǎn)品,并將其1688的網(wǎng)址復制到芒果店長(cháng)的采集框內;
2、點(diǎn)擊【開(kāi)始采集】
3、也可以使用采集插件采集,如下圖所示,在1688頁(yè)面底部會(huì )出現采集按鈕,點(diǎn)擊【開(kāi)始采集】即可。
注意:在某些平臺采集的時(shí)候,可能會(huì )要求授權賬號。比如采集1688網(wǎng)址,就需要授權。在這里直接點(diǎn)擊授權,然后進(jìn)入之后輸入1688賬號及密碼即可完成授權。然后就可以正常采集了!
4、成功采集后就會(huì )出現如下圖所示狀態(tài)
第五步:認領(lǐng)產(chǎn)品到ozon產(chǎn)品庫
這里也可以批量認領(lǐng),意思就是把你采集的商品認領(lǐng)到你的某個(gè)平臺的商品庫。如果你設置了自動(dòng)認領(lǐng)規則,這個(gè)采集的產(chǎn)品也會(huì )自動(dòng)進(jìn)入你設置的平臺產(chǎn)品刊登庫。
第六步:編輯上產(chǎn)品
1、進(jìn)入產(chǎn)品刊登的ozon平臺頁(yè)面,找到這個(gè)產(chǎn)品并點(diǎn)擊【編輯】
2、編輯產(chǎn)品:
?。?)選擇店鋪和類(lèi)目:店鋪是必選的,類(lèi)目需要大家自己查找或者搜索。(如何快速發(fā)現自己產(chǎn)品所在的類(lèi)目,后續我會(huì )發(fā)一篇文章給大家進(jìn)行分享)
?。?)設置基本信息:
a、標題:這里支持翻譯,中文翻譯成俄文,英文翻譯成俄文,還是比較方便的。
b、SKU編碼:自己填寫(xiě),方便管理即可。
c、其他:增值稅、價(jià)格、重量、尺寸、合并編號(PDP卡)等等,按照后臺單個(gè)上傳的要求填寫(xiě)即可。
?。?)填寫(xiě)特征信息:這里根據不同的類(lèi)目自動(dòng)生成的維度正確填寫(xiě)即可。注意這里盡量多填,對于提升產(chǎn)品評分是有幫助的,能夠提升產(chǎn)品的搜索權重。
?。?)視頻圖片模塊:
a、視頻:與后臺設置同理,需要填寫(xiě)youtube后綴代碼。
b、圖片:這里直接從來(lái)源網(wǎng)站獲取了產(chǎn)品的圖片信息,這是比較方便的地方,可以直接選擇【采集的圖片】進(jìn)行上傳,上傳之后如果有中文或者英文信息,可以選擇圖片翻譯。
第七步:保存并提交發(fā)布
1、建議大家全部填寫(xiě)完成后,先點(diǎn)擊保存然后檢查一遍,檢查無(wú)誤后再提交發(fā)布。
2、提交發(fā)布有兩種方式,一種是定時(shí)發(fā)布,一種是直接發(fā)布。
提交發(fā)布之后,前往ozon后臺即可看到該產(chǎn)品會(huì )進(jìn)入待審核狀態(tài),等待審核通過(guò)即可。
那么以上就是關(guān)于OZON如何通過(guò)ERP軟件進(jìn)行采集刊登上架產(chǎn)品的詳細教程。 查看全部
我做OZON的第24篇:上架產(chǎn)品三種方式之ERP采集刊登詳細步驟
目前OZON平臺賣(mài)家使用最多的采集刊登軟件是“芒果店長(cháng)”,那么這篇文章就以【芒果店長(cháng)】為例來(lái)演示如何通過(guò)ERP進(jìn)行采集刊登產(chǎn)品。
首先說(shuō)一下,對于賣(mài)家來(lái)說(shuō)應該使用ERP刊登還是表格刊登,這里要看具體需求。
如果是需要大量采集和翻譯圖片的,那么通過(guò)ERP是會(huì )提高效率,因為ERP的圖片翻譯和圖片采集確實(shí)要方便很多。但是如果上架產(chǎn)品不多,并集中在某一些品類(lèi),那么使用表格刊登反而更好!
第一步:注冊登錄芒果店長(cháng)
各位賣(mài)家可以自己前往芒果店長(cháng)注冊登錄,這里就不做演示
第二步:授權店鋪
1、在如下圖所示區域輸入:店鋪別名(自己填寫(xiě),方便管理即可);Client-Id;Api-Key。然后點(diǎn)擊保存即可
2、Client-Id和Api-Key的獲?。?br /> ?。?)進(jìn)入OZON店鋪后臺,點(diǎn)擊設置頁(yè)面
?。?)點(diǎn)擊API秘鑰
?。?)在如下所示的彈窗中,點(diǎn)擊復制按鈕,復制秘鑰。注意:這個(gè)秘鑰僅顯示1次,注意自己保存好!
3、將Client-Id和Api-Key填進(jìn)去之后,點(diǎn)擊保存,即表示授權成功!

第三步:安裝最新版本芒果采集插件
芒果官網(wǎng)有詳細的采集插件安裝教程,支持chrome\360\QQ\火狐等多款瀏覽器。教程地址為:
如果出現如下圖所示的效果,即表示插件安裝成功。
第四步:采集產(chǎn)品(以1688為例)
1、找到你選好的產(chǎn)品,并將其1688的網(wǎng)址復制到芒果店長(cháng)的采集框內;
2、點(diǎn)擊【開(kāi)始采集】
3、也可以使用采集插件采集,如下圖所示,在1688頁(yè)面底部會(huì )出現采集按鈕,點(diǎn)擊【開(kāi)始采集】即可。
注意:在某些平臺采集的時(shí)候,可能會(huì )要求授權賬號。比如采集1688網(wǎng)址,就需要授權。在這里直接點(diǎn)擊授權,然后進(jìn)入之后輸入1688賬號及密碼即可完成授權。然后就可以正常采集了!
4、成功采集后就會(huì )出現如下圖所示狀態(tài)
第五步:認領(lǐng)產(chǎn)品到ozon產(chǎn)品庫
這里也可以批量認領(lǐng),意思就是把你采集的商品認領(lǐng)到你的某個(gè)平臺的商品庫。如果你設置了自動(dòng)認領(lǐng)規則,這個(gè)采集的產(chǎn)品也會(huì )自動(dòng)進(jìn)入你設置的平臺產(chǎn)品刊登庫。

第六步:編輯上產(chǎn)品
1、進(jìn)入產(chǎn)品刊登的ozon平臺頁(yè)面,找到這個(gè)產(chǎn)品并點(diǎn)擊【編輯】
2、編輯產(chǎn)品:
?。?)選擇店鋪和類(lèi)目:店鋪是必選的,類(lèi)目需要大家自己查找或者搜索。(如何快速發(fā)現自己產(chǎn)品所在的類(lèi)目,后續我會(huì )發(fā)一篇文章給大家進(jìn)行分享)
?。?)設置基本信息:
a、標題:這里支持翻譯,中文翻譯成俄文,英文翻譯成俄文,還是比較方便的。
b、SKU編碼:自己填寫(xiě),方便管理即可。
c、其他:增值稅、價(jià)格、重量、尺寸、合并編號(PDP卡)等等,按照后臺單個(gè)上傳的要求填寫(xiě)即可。
?。?)填寫(xiě)特征信息:這里根據不同的類(lèi)目自動(dòng)生成的維度正確填寫(xiě)即可。注意這里盡量多填,對于提升產(chǎn)品評分是有幫助的,能夠提升產(chǎn)品的搜索權重。
?。?)視頻圖片模塊:
a、視頻:與后臺設置同理,需要填寫(xiě)youtube后綴代碼。
b、圖片:這里直接從來(lái)源網(wǎng)站獲取了產(chǎn)品的圖片信息,這是比較方便的地方,可以直接選擇【采集的圖片】進(jìn)行上傳,上傳之后如果有中文或者英文信息,可以選擇圖片翻譯。
第七步:保存并提交發(fā)布
1、建議大家全部填寫(xiě)完成后,先點(diǎn)擊保存然后檢查一遍,檢查無(wú)誤后再提交發(fā)布。
2、提交發(fā)布有兩種方式,一種是定時(shí)發(fā)布,一種是直接發(fā)布。
提交發(fā)布之后,前往ozon后臺即可看到該產(chǎn)品會(huì )進(jìn)入待審核狀態(tài),等待審核通過(guò)即可。
那么以上就是關(guān)于OZON如何通過(guò)ERP軟件進(jìn)行采集刊登上架產(chǎn)品的詳細教程。
日志收集神器:Fluentd 的簡(jiǎn)明指南,果斷收藏
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 117 次瀏覽 ? 2022-08-18 12:56
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd配置。
基本概念我們可能有在 bash 中執行過(guò)tail -f myapp.log | grep “what I want” > example.log這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入
tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾
| grep "what I want"
在這里,我們從尾部-f的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出
> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現grep ‘what I want’過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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
解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。 查看全部
日志收集神器:Fluentd 的簡(jiǎn)明指南,果斷收藏
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd配置。
基本概念我們可能有在 bash 中執行過(guò)tail -f myapp.log | grep “what I want” > example.log這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入
tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾
| grep "what I want"
在這里,我們從尾部-f的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出
> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。
fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的output/是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}

這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0
這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log
有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。

過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log和> example.log工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現grep ‘what I want’過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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
解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 71 次瀏覽 ? 2022-08-18 01:27
作者:彭莉,火山引擎 APM 研發(fā)工程師。2020年加入字節,負責前端監控 SDK 的開(kāi)發(fā)維護、平臺數據消費的探索和落地。
背景你知道有多少用戶(hù)沒(méi)等到頁(yè)面首屏出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。比如, BBC 發(fā)現他們的網(wǎng)站加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高性能站點(diǎn)比低性能站點(diǎn)更能吸引和留住用戶(hù),而留住用戶(hù)對于提高用戶(hù)轉化率至關(guān)重要。
這篇文章就是以此為背景,介紹字節內部是如何衡量站點(diǎn)性能的,如何依靠性能監控定位線(xiàn)上站點(diǎn)性能問(wèn)題的。
如何衡量站點(diǎn)性能站點(diǎn)性能好壞的表現形式是多樣的,不是單純通過(guò)頁(yè)面加載速度、頁(yè)面渲染速度就能衡量,而是要關(guān)注從頁(yè)面開(kāi)始加載到被關(guān)閉的整個(gè)過(guò)程中,用戶(hù)對性能的感知。一個(gè)頁(yè)面,即使很快渲染,如果對用戶(hù)的交互遲遲沒(méi)有響應,那么在用戶(hù)心中這個(gè)站點(diǎn)的性能依然很差。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,另一類(lèi)是運行時(shí)性能。前者衡量的是頁(yè)面從加載開(kāi)始到可以穩定交互的性能情況,后者衡量的是頁(yè)面穩定后到頁(yè)面關(guān)閉的性能情況。
首屏性能早在 2012 年, Web 性能工作組[1]就針對頁(yè)面加載場(chǎng)景制定了加載過(guò)程模型,用來(lái)衡量頁(yè)面加載各個(gè)階段的耗時(shí)情況,從而衡量頁(yè)面加載的性能。具體的加載過(guò)程模型如圖所示:
這個(gè)模型定義了頁(yè)面加載開(kāi)始到頁(yè)面加載完成整個(gè)過(guò)程的各個(gè)時(shí)間點(diǎn),除了正常的初始化并且拉取到主文檔的時(shí)間點(diǎn)以外,還包括了解析渲染的詳細時(shí)間點(diǎn)。比如:雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載時(shí)的性能情況,但是線(xiàn)上用戶(hù)其實(shí)感知不到這些時(shí)間點(diǎn)的區別。對于用戶(hù)而言,只能感知到頁(yè)面何時(shí)開(kāi)始渲染、何時(shí)渲染出主要內容、何時(shí)可以交互、以及交互時(shí)是否有延遲。
那么針對用戶(hù)感知到的這四個(gè)階段,有沒(méi)有可用于衡量的指標呢?
何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標都來(lái)源于 Paint Timing[2] 標準, 這個(gè)標準主要是記錄在頁(yè)面加載期間的一些關(guān)鍵時(shí)間點(diǎn)。通過(guò)這兩個(gè)指標,就可以衡量頁(yè)面何時(shí)開(kāi)始渲染內容了。
何時(shí)渲染出主要內容:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)渲染出主要內容了。不過(guò)業(yè)界有測試得出, LCP 非常近似于 FMP 的時(shí)間點(diǎn),同時(shí) FMP 性能消耗較大,且會(huì )因為一些細小的變化導致數值巨大波動(dòng),所以推薦使用 LCP。而 SI 因為計算復雜,指標難以解釋?zhuān)砸话阒辉趯?shí)驗室環(huán)境下使用。
何時(shí)可以交互:TTI && TBT
TTI 雖然可以衡量頁(yè)面可以交互的時(shí)間點(diǎn),但是卻無(wú)法感知這個(gè)期間瀏覽器的繁忙狀態(tài)。而結合 TBT ,就能幫助理解在加載期間,頁(yè)面無(wú)法響應用戶(hù)輸入的時(shí)間有多久。
交互時(shí)是否有延遲:FID && MPFIDMPFID 是一個(gè)虛擬的可能的延遲時(shí)間,而FID是用戶(hù)真實(shí)的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)建立對整個(gè)應用的良好印象。同時(shí)在頁(yè)面加載階段,資源的處理任務(wù)最重,最容易產(chǎn)生輸入延遲。
至此,通過(guò)上面每個(gè)階段的指標,基本可以實(shí)現全面衡量首屏性能。那么運行時(shí)的性能又可以怎樣衡量呢?
運行時(shí)性能
運行時(shí)性能一般可以通過(guò)Long tasks 和 Input Delay來(lái)感知。Long tasks主要是衡量主線(xiàn)程的繁忙情況,而 Input Delay 主要是衡量用戶(hù)交互的延遲情況。
Long tasks
如果一個(gè)任務(wù)在主線(xiàn)程上運行超過(guò) 50 毫秒,那么它就是 Long task。如果可以收集到運行時(shí)的所有Long tasks,就能知道運行時(shí)的性能情況。在具體實(shí)踐中,可以關(guān)注耗時(shí)較長(cháng)的Long task,將它和用戶(hù)行為關(guān)聯(lián)在一起,可以有效幫助定位線(xiàn)上卡頓的原因。
Input Delay
它源于 Event Timing[3] 標準,這個(gè)標準主要是幫助深入了解由用戶(hù)交互觸發(fā)的某些事件的延遲,通過(guò)計算用戶(hù)輸入和處理輸入后的頁(yè)面繪制時(shí)間的差值來(lái)感知延遲時(shí)間。這些延遲通常是由于開(kāi)發(fā)人員代碼編寫(xiě)不當,引起 JS 執行時(shí)間過(guò)長(cháng)而產(chǎn)生的。
性能指標的計算原理
頁(yè)面性能相關(guān)的指標都有了,那么如何采集這些數據呢?
采集頁(yè)面加載過(guò)程的各階段耗時(shí)
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要依賴(lài) Navigation Timing[4] 標準,這個(gè)標準后來(lái)升級到了2.0版本, 對應 Navigation Timing 2[5]標準,兩者雖然不盡相同,但是可計算出的指標基本一致。在瀏覽器中可以通過(guò)下面的方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
基于這些數據,不僅可以計算出 DNS / TCP / Request 等耗時(shí),還可以計算出 DOMReady / DOMParse / Load 等耗時(shí)。
采集 FP && FCP
FP 和 FCP 可以通過(guò)瀏覽器提供的 API 直接獲取,所以采集原理并不復雜。如果頁(yè)面已經(jīng)完成了首次繪制和首次內容繪制,可以使用下面的方式直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有開(kāi)始首次繪制,就需要通過(guò)監聽(tīng)獲取。
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 主要依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 />
瀏覽器會(huì )多次報告 LCP ,而一般真正的 LCP 是用戶(hù)交互前最近一次報告的 LCP ,因為交互往往會(huì )改變用戶(hù)可見(jiàn)的內容,所以用戶(hù)交互后新報告的 LCP 不再符合 LCP 的指標定義。
采集 FMP與 FP / FCP / LCP 相比, FMP 的采集相對比較復雜,它需要通過(guò)算法計算得出,而業(yè)界并沒(méi)有統一的算法。不過(guò)比較認可的一個(gè)計算 FMP 的方式是「認定頁(yè)面在加載和渲染過(guò)程中最大布局變動(dòng)之后的那個(gè)繪制時(shí)間即為當前頁(yè)面的 FMP 」。由于在頁(yè)面渲染過(guò)程中,「 DOM 結構變化的時(shí)間點(diǎn)」和與之對應的「渲染的時(shí)間點(diǎn)」近似相同,所以字節內部計算 FMP 的方式是:計算出 DOM 結構變化最劇烈的時(shí)間點(diǎn),即為 FMP。具體步驟為:通過(guò) MutationObserver 監聽(tīng)每一次頁(yè)面整體的 DOM 變化,觸發(fā) MutationObserver 的回調在回調計算出當前 DOM 樹(shù)的分數在結算時(shí),通過(guò)對比得出分數變化最劇烈的時(shí)刻,即為 FMP采集 TTI && TBT與 FMP 相似,瀏覽器也沒(méi)有提供直接獲取 TTI 的 API ,不過(guò)針對如何計算 TTI 有詳細的描述,實(shí)現對應描述就可以得出 TTI 的時(shí)間點(diǎn)。具體的描述是:先找到 FCP 的時(shí)間點(diǎn),再往前找到一個(gè)安靜窗口。安靜窗口需要滿(mǎn)足三個(gè)條件: 1) 沒(méi)有 Long task。2)窗口中正在處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗讀應該至少 5s。
窗口前的最后一個(gè)長(cháng)任務(wù)的結束時(shí)間就是 TTI 。
而通過(guò)計算 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間的總和,就能得出 TBT 。
阻塞時(shí)間是 Long task 中超過(guò) 50ms 后的任務(wù)耗時(shí)。
采集 FID && MPFID
FID 同樣依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 之后最長(cháng)的長(cháng)任務(wù)耗時(shí),可以通過(guò)監聽(tīng) FCP 之后的 Long tasks,對比拿到最長(cháng)的長(cháng)任務(wù)就是 MPFID 。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集各個(gè)性能指標,但是在 JS 中計算具體指標要更為復雜。原因有兩點(diǎn):一是 API 報告的內容和指標本身的定義有部分差異,所以計算時(shí)要處理這些差異;二是 部分場(chǎng)景下瀏覽器不會(huì )報告對應內容,這些場(chǎng)景下需要模擬測量。
怎樣評估站點(diǎn)整體的性能好壞
雖然有眾多性能指標,但是每個(gè)性能指標評估的都是單一方面,如何整體來(lái)看站點(diǎn)的性能是好是壞呢?對于每個(gè)單一指標,是否有標準去定義指標的值在具體哪個(gè)范圍內能算優(yōu)秀?線(xiàn)上的站點(diǎn)性能應該重點(diǎn)考量哪些性能指標?各個(gè)性能指標的權重占多少合適呢?
性能指標基準線(xiàn)Google 提供了各個(gè)性能指標的基準線(xiàn),有一定的參考意義。為什么只說(shuō)是有一定參考意義?首先基準線(xiàn)本身是在變化的,隨著(zhù)指標計算的逐漸更新以及軟件硬件的更新,基準線(xiàn)也會(huì )有一定的調整。其次用戶(hù)的使用場(chǎng)景對性能指標也會(huì )有很大的影響,比如 iOS 用戶(hù)上報的性能指標一般都優(yōu)于 Android 用戶(hù)上報的性能指標。
下方是目前字節內部使用的部分性能指標基準線(xiàn),基本對齊 Google 建議的基準線(xiàn),通過(guò)這些數據可以分析站點(diǎn)的性能達標率情況。
衡量站點(diǎn)滿(mǎn)意度
站點(diǎn)滿(mǎn)意度的衡量除了要考慮常規的性能指標外,還要考慮體驗類(lèi)的指標,比如專(zhuān)門(mén)衡量視覺(jué)穩定性的指標 CLS。
線(xiàn)上的站點(diǎn)滿(mǎn)意度衡量,一般會(huì )在參考lighthouse的滿(mǎn)意度計算規則的基礎上,去除一些推薦在實(shí)驗室環(huán)境測量的指標的權重。
下方是目前字節使用的線(xiàn)上站點(diǎn)性能滿(mǎn)意度的權重計算公式,去除了SI 和 TBT這兩個(gè)不推薦在線(xiàn)上環(huán)境測量的指標。
那么有了一個(gè)站點(diǎn)滿(mǎn)意度以后,我們終于能知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該怎樣優(yōu)化?
如何優(yōu)化站點(diǎn)性能通常,我們可以從性能指標下手去做針對性的優(yōu)化。雖然指標各不相同,但是優(yōu)化的思路是相通的。在了解清楚指標的依賴(lài)項以后,通過(guò)優(yōu)化指標的相關(guān)依賴(lài)項,就能快速優(yōu)化性能指標,從而提升站點(diǎn)性能。說(shuō)起來(lái)比較抽象,舉個(gè)例子:比如當我們想要優(yōu)化 TTI ,根據剛剛提到的 TTI 的計算方式,可以得出 TTI 的依賴(lài)項主要包含 FCP 、請求和 Long tasks,那么盡快的渲染、盡早的請求、請求盡快結束、避免長(cháng)任務(wù)就是優(yōu)化的關(guān)鍵。關(guān)于指標的具體優(yōu)化措施的內容比較多,將在后續的文章中展開(kāi)介紹。了解全面的優(yōu)化措施固然重要,但把每個(gè)措施都做一遍并不一定能夠高效地解決站點(diǎn)面臨的關(guān)鍵性能問(wèn)題。如何立竿見(jiàn)影、具有針對性的去優(yōu)化?通過(guò)還原用戶(hù)加載時(shí)的情況來(lái)幫助定位性能問(wèn)題是一個(gè)思路。利用線(xiàn)上監控定位性能問(wèn)題一般情況下,前端監控除了監控性能指標以外,還會(huì )監控請求和資源的加載以及 Long tasks 等數據,這些數據可以幫助還原用戶(hù)的加載現場(chǎng),幫助找到蛛絲馬跡。比如下面這個(gè)例子, 多項性能指標都很差。通過(guò)監控平臺還原出的資源加載瀑布圖,可以看出絕大部分時(shí)間都耗在了拉取資源上。那么就可以初步得出性能優(yōu)化方案,將優(yōu)化措施側重在資源優(yōu)化上,比如縮小JS文件體積、延遲加載未使用的JS代碼等等。
線(xiàn)上監控幫助定位性能問(wèn)題的例子還有很多,這里不一一介紹了。截圖中使用的是字節內部的前端監控平臺,目前這套解決方案已同步在火山引擎上,接入即可對 Web 端真實(shí)數據進(jìn)行實(shí)時(shí)監控、報警歸因、聚類(lèi)分析和細節定位,解決白屏、性能瓶頸、慢查詢(xún)等關(guān)鍵問(wèn)題,歡迎體驗。
掃描下方二維碼,立即申請免費使用?? 查看全部
前端監控系列3 | 如何衡量一個(gè)站點(diǎn)的性能好壞
作者:彭莉,火山引擎 APM 研發(fā)工程師。2020年加入字節,負責前端監控 SDK 的開(kāi)發(fā)維護、平臺數據消費的探索和落地。
背景你知道有多少用戶(hù)沒(méi)等到頁(yè)面首屏出現就離開(kāi)了嗎?性能不佳會(huì )對業(yè)務(wù)目標產(chǎn)生負面影響。比如, BBC 發(fā)現他們的網(wǎng)站加載時(shí)間每增加一秒,他們就會(huì )失去 10% 的用戶(hù)。高性能站點(diǎn)比低性能站點(diǎn)更能吸引和留住用戶(hù),而留住用戶(hù)對于提高用戶(hù)轉化率至關(guān)重要。
這篇文章就是以此為背景,介紹字節內部是如何衡量站點(diǎn)性能的,如何依靠性能監控定位線(xiàn)上站點(diǎn)性能問(wèn)題的。
如何衡量站點(diǎn)性能站點(diǎn)性能好壞的表現形式是多樣的,不是單純通過(guò)頁(yè)面加載速度、頁(yè)面渲染速度就能衡量,而是要關(guān)注從頁(yè)面開(kāi)始加載到被關(guān)閉的整個(gè)過(guò)程中,用戶(hù)對性能的感知。一個(gè)頁(yè)面,即使很快渲染,如果對用戶(hù)的交互遲遲沒(méi)有響應,那么在用戶(hù)心中這個(gè)站點(diǎn)的性能依然很差。
站點(diǎn)性能一般可以分為兩類(lèi),一類(lèi)是首屏性能,另一類(lèi)是運行時(shí)性能。前者衡量的是頁(yè)面從加載開(kāi)始到可以穩定交互的性能情況,后者衡量的是頁(yè)面穩定后到頁(yè)面關(guān)閉的性能情況。
首屏性能早在 2012 年, Web 性能工作組[1]就針對頁(yè)面加載場(chǎng)景制定了加載過(guò)程模型,用來(lái)衡量頁(yè)面加載各個(gè)階段的耗時(shí)情況,從而衡量頁(yè)面加載的性能。具體的加載過(guò)程模型如圖所示:
這個(gè)模型定義了頁(yè)面加載開(kāi)始到頁(yè)面加載完成整個(gè)過(guò)程的各個(gè)時(shí)間點(diǎn),除了正常的初始化并且拉取到主文檔的時(shí)間點(diǎn)以外,還包括了解析渲染的詳細時(shí)間點(diǎn)。比如:雖然開(kāi)發(fā)者可以根據這些時(shí)間點(diǎn)來(lái)衡量頁(yè)面加載時(shí)的性能情況,但是線(xiàn)上用戶(hù)其實(shí)感知不到這些時(shí)間點(diǎn)的區別。對于用戶(hù)而言,只能感知到頁(yè)面何時(shí)開(kāi)始渲染、何時(shí)渲染出主要內容、何時(shí)可以交互、以及交互時(shí)是否有延遲。
那么針對用戶(hù)感知到的這四個(gè)階段,有沒(méi)有可用于衡量的指標呢?
何時(shí)開(kāi)始渲染:FP && FCP
這兩個(gè)指標都來(lái)源于 Paint Timing[2] 標準, 這個(gè)標準主要是記錄在頁(yè)面加載期間的一些關(guān)鍵時(shí)間點(diǎn)。通過(guò)這兩個(gè)指標,就可以衡量頁(yè)面何時(shí)開(kāi)始渲染內容了。
何時(shí)渲染出主要內容:FMP && LCP && SI
有了這三個(gè)指標,就可以衡量頁(yè)面何時(shí)渲染出主要內容了。不過(guò)業(yè)界有測試得出, LCP 非常近似于 FMP 的時(shí)間點(diǎn),同時(shí) FMP 性能消耗較大,且會(huì )因為一些細小的變化導致數值巨大波動(dòng),所以推薦使用 LCP。而 SI 因為計算復雜,指標難以解釋?zhuān)砸话阒辉趯?shí)驗室環(huán)境下使用。
何時(shí)可以交互:TTI && TBT
TTI 雖然可以衡量頁(yè)面可以交互的時(shí)間點(diǎn),但是卻無(wú)法感知這個(gè)期間瀏覽器的繁忙狀態(tài)。而結合 TBT ,就能幫助理解在加載期間,頁(yè)面無(wú)法響應用戶(hù)輸入的時(shí)間有多久。
交互時(shí)是否有延遲:FID && MPFIDMPFID 是一個(gè)虛擬的可能的延遲時(shí)間,而FID是用戶(hù)真實(shí)的首次交互的延遲時(shí)間。所以一般推薦使用FID,它是用戶(hù)對頁(yè)面交互性和響應性的第一印象。良好的第一印象有助于用戶(hù)建立對整個(gè)應用的良好印象。同時(shí)在頁(yè)面加載階段,資源的處理任務(wù)最重,最容易產(chǎn)生輸入延遲。
至此,通過(guò)上面每個(gè)階段的指標,基本可以實(shí)現全面衡量首屏性能。那么運行時(shí)的性能又可以怎樣衡量呢?
運行時(shí)性能
運行時(shí)性能一般可以通過(guò)Long tasks 和 Input Delay來(lái)感知。Long tasks主要是衡量主線(xiàn)程的繁忙情況,而 Input Delay 主要是衡量用戶(hù)交互的延遲情況。
Long tasks
如果一個(gè)任務(wù)在主線(xiàn)程上運行超過(guò) 50 毫秒,那么它就是 Long task。如果可以收集到運行時(shí)的所有Long tasks,就能知道運行時(shí)的性能情況。在具體實(shí)踐中,可以關(guān)注耗時(shí)較長(cháng)的Long task,將它和用戶(hù)行為關(guān)聯(lián)在一起,可以有效幫助定位線(xiàn)上卡頓的原因。
Input Delay

它源于 Event Timing[3] 標準,這個(gè)標準主要是幫助深入了解由用戶(hù)交互觸發(fā)的某些事件的延遲,通過(guò)計算用戶(hù)輸入和處理輸入后的頁(yè)面繪制時(shí)間的差值來(lái)感知延遲時(shí)間。這些延遲通常是由于開(kāi)發(fā)人員代碼編寫(xiě)不當,引起 JS 執行時(shí)間過(guò)長(cháng)而產(chǎn)生的。
性能指標的計算原理
頁(yè)面性能相關(guān)的指標都有了,那么如何采集這些數據呢?
采集頁(yè)面加載過(guò)程的各階段耗時(shí)
頁(yè)面加載過(guò)程中的時(shí)間點(diǎn)主要依賴(lài) Navigation Timing[4] 標準,這個(gè)標準后來(lái)升級到了2.0版本, 對應 Navigation Timing 2[5]標準,兩者雖然不盡相同,但是可計算出的指標基本一致。在瀏覽器中可以通過(guò)下面的方式獲?。?br /> //?navigation?timing<br />const?timing?=?window.performance.timing<br /><br />//?navigation?timing?2<br />performance.getEntriesByType('navigation')<br />
基于這些數據,不僅可以計算出 DNS / TCP / Request 等耗時(shí),還可以計算出 DOMReady / DOMParse / Load 等耗時(shí)。
采集 FP && FCP
FP 和 FCP 可以通過(guò)瀏覽器提供的 API 直接獲取,所以采集原理并不復雜。如果頁(yè)面已經(jīng)完成了首次繪制和首次內容繪制,可以使用下面的方式直接獲取。
window.performance.getEntriesByType('paint')<br />//?or<br />window.performance.getEntriesByName('first-paint')<br />window.performance.getEntriesByName('first-contentful-paint')<br />
但是如果頁(yè)面還沒(méi)有開(kāi)始首次繪制,就需要通過(guò)監聽(tīng)獲取。
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 主要依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 />
瀏覽器會(huì )多次報告 LCP ,而一般真正的 LCP 是用戶(hù)交互前最近一次報告的 LCP ,因為交互往往會(huì )改變用戶(hù)可見(jiàn)的內容,所以用戶(hù)交互后新報告的 LCP 不再符合 LCP 的指標定義。
采集 FMP與 FP / FCP / LCP 相比, FMP 的采集相對比較復雜,它需要通過(guò)算法計算得出,而業(yè)界并沒(méi)有統一的算法。不過(guò)比較認可的一個(gè)計算 FMP 的方式是「認定頁(yè)面在加載和渲染過(guò)程中最大布局變動(dòng)之后的那個(gè)繪制時(shí)間即為當前頁(yè)面的 FMP 」。由于在頁(yè)面渲染過(guò)程中,「 DOM 結構變化的時(shí)間點(diǎn)」和與之對應的「渲染的時(shí)間點(diǎn)」近似相同,所以字節內部計算 FMP 的方式是:計算出 DOM 結構變化最劇烈的時(shí)間點(diǎn),即為 FMP。具體步驟為:通過(guò) MutationObserver 監聽(tīng)每一次頁(yè)面整體的 DOM 變化,觸發(fā) MutationObserver 的回調在回調計算出當前 DOM 樹(shù)的分數在結算時(shí),通過(guò)對比得出分數變化最劇烈的時(shí)刻,即為 FMP采集 TTI && TBT與 FMP 相似,瀏覽器也沒(méi)有提供直接獲取 TTI 的 API ,不過(guò)針對如何計算 TTI 有詳細的描述,實(shí)現對應描述就可以得出 TTI 的時(shí)間點(diǎn)。具體的描述是:先找到 FCP 的時(shí)間點(diǎn),再往前找到一個(gè)安靜窗口。安靜窗口需要滿(mǎn)足三個(gè)條件: 1) 沒(méi)有 Long task。2)窗口中正在處理的 GET 請求不超過(guò)兩個(gè)。3) 窗口時(shí)間窗讀應該至少 5s。
窗口前的最后一個(gè)長(cháng)任務(wù)的結束時(shí)間就是 TTI 。
而通過(guò)計算 FCP 和 TTI 之間的長(cháng)任務(wù)的阻塞時(shí)間的總和,就能得出 TBT 。

阻塞時(shí)間是 Long task 中超過(guò) 50ms 后的任務(wù)耗時(shí)。
采集 FID && MPFID
FID 同樣依賴(lài) PerformanceObserver,具體監聽(tīng)方式如下:
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 之后最長(cháng)的長(cháng)任務(wù)耗時(shí),可以通過(guò)監聽(tīng) FCP 之后的 Long tasks,對比拿到最長(cháng)的長(cháng)任務(wù)就是 MPFID 。
雖然瀏覽器提供了足夠的 API 來(lái)幫助采集各個(gè)性能指標,但是在 JS 中計算具體指標要更為復雜。原因有兩點(diǎn):一是 API 報告的內容和指標本身的定義有部分差異,所以計算時(shí)要處理這些差異;二是 部分場(chǎng)景下瀏覽器不會(huì )報告對應內容,這些場(chǎng)景下需要模擬測量。
怎樣評估站點(diǎn)整體的性能好壞
雖然有眾多性能指標,但是每個(gè)性能指標評估的都是單一方面,如何整體來(lái)看站點(diǎn)的性能是好是壞呢?對于每個(gè)單一指標,是否有標準去定義指標的值在具體哪個(gè)范圍內能算優(yōu)秀?線(xiàn)上的站點(diǎn)性能應該重點(diǎn)考量哪些性能指標?各個(gè)性能指標的權重占多少合適呢?
性能指標基準線(xiàn)Google 提供了各個(gè)性能指標的基準線(xiàn),有一定的參考意義。為什么只說(shuō)是有一定參考意義?首先基準線(xiàn)本身是在變化的,隨著(zhù)指標計算的逐漸更新以及軟件硬件的更新,基準線(xiàn)也會(huì )有一定的調整。其次用戶(hù)的使用場(chǎng)景對性能指標也會(huì )有很大的影響,比如 iOS 用戶(hù)上報的性能指標一般都優(yōu)于 Android 用戶(hù)上報的性能指標。
下方是目前字節內部使用的部分性能指標基準線(xiàn),基本對齊 Google 建議的基準線(xiàn),通過(guò)這些數據可以分析站點(diǎn)的性能達標率情況。
衡量站點(diǎn)滿(mǎn)意度
站點(diǎn)滿(mǎn)意度的衡量除了要考慮常規的性能指標外,還要考慮體驗類(lèi)的指標,比如專(zhuān)門(mén)衡量視覺(jué)穩定性的指標 CLS。
線(xiàn)上的站點(diǎn)滿(mǎn)意度衡量,一般會(huì )在參考lighthouse的滿(mǎn)意度計算規則的基礎上,去除一些推薦在實(shí)驗室環(huán)境測量的指標的權重。
下方是目前字節使用的線(xiàn)上站點(diǎn)性能滿(mǎn)意度的權重計算公式,去除了SI 和 TBT這兩個(gè)不推薦在線(xiàn)上環(huán)境測量的指標。
那么有了一個(gè)站點(diǎn)滿(mǎn)意度以后,我們終于能知道一個(gè)站點(diǎn)的性能好壞了。那么假設性能不好,我們應該怎樣優(yōu)化?
如何優(yōu)化站點(diǎn)性能通常,我們可以從性能指標下手去做針對性的優(yōu)化。雖然指標各不相同,但是優(yōu)化的思路是相通的。在了解清楚指標的依賴(lài)項以后,通過(guò)優(yōu)化指標的相關(guān)依賴(lài)項,就能快速優(yōu)化性能指標,從而提升站點(diǎn)性能。說(shuō)起來(lái)比較抽象,舉個(gè)例子:比如當我們想要優(yōu)化 TTI ,根據剛剛提到的 TTI 的計算方式,可以得出 TTI 的依賴(lài)項主要包含 FCP 、請求和 Long tasks,那么盡快的渲染、盡早的請求、請求盡快結束、避免長(cháng)任務(wù)就是優(yōu)化的關(guān)鍵。關(guān)于指標的具體優(yōu)化措施的內容比較多,將在后續的文章中展開(kāi)介紹。了解全面的優(yōu)化措施固然重要,但把每個(gè)措施都做一遍并不一定能夠高效地解決站點(diǎn)面臨的關(guān)鍵性能問(wèn)題。如何立竿見(jiàn)影、具有針對性的去優(yōu)化?通過(guò)還原用戶(hù)加載時(shí)的情況來(lái)幫助定位性能問(wèn)題是一個(gè)思路。利用線(xiàn)上監控定位性能問(wèn)題一般情況下,前端監控除了監控性能指標以外,還會(huì )監控請求和資源的加載以及 Long tasks 等數據,這些數據可以幫助還原用戶(hù)的加載現場(chǎng),幫助找到蛛絲馬跡。比如下面這個(gè)例子, 多項性能指標都很差。通過(guò)監控平臺還原出的資源加載瀑布圖,可以看出絕大部分時(shí)間都耗在了拉取資源上。那么就可以初步得出性能優(yōu)化方案,將優(yōu)化措施側重在資源優(yōu)化上,比如縮小JS文件體積、延遲加載未使用的JS代碼等等。
線(xiàn)上監控幫助定位性能問(wèn)題的例子還有很多,這里不一一介紹了。截圖中使用的是字節內部的前端監控平臺,目前這套解決方案已同步在火山引擎上,接入即可對 Web 端真實(shí)數據進(jìn)行實(shí)時(shí)監控、報警歸因、聚類(lèi)分析和細節定位,解決白屏、性能瓶頸、慢查詢(xún)等關(guān)鍵問(wèn)題,歡迎體驗。
掃描下方二維碼,立即申請免費使用??
日志收集神器:Fluentd 的簡(jiǎn)明指南,收好了~
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2022-08-13 23:42
因公眾號更改推送規則,請點(diǎn)“在看”并加“星標”第一時(shí)間獲取精彩分享
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是 fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd 也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd 配置。
基本概念我們可能有在 bash 中執行過(guò) tail -f myapp.log | grep “what I want” > example.log 這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾| grep "what I want"
在這里,我們從尾部 -f 的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf 是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:
2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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 >
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志 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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現 grep ‘what I want’ 過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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解析訪(fǎng)問(wèn)日志
為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,我們能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
福利
系統/網(wǎng)絡(luò )/應用運維人員的交流圈子,不定期為您提供運維技術(shù)領(lǐng)域前沿資訊/培訓課程/獨家技術(shù)手冊/運維工具/文檔模板等,行業(yè)大咖分享交流/同行經(jīng)驗分享互動(dòng),期待你的加入!掃碼即可加入。
隨著(zhù)材料不斷增多社群會(huì )不定期漲價(jià)早加入更優(yōu)惠
掃碼添加客服微信免費獲取以下資料:
1.網(wǎng)絡(luò )安全技術(shù)資料--回復"1"
2.容器云運維資料包--回復"2"
3.Python學(xué)習資料--回復"3"
4.Devops學(xué)習視頻課件--回復"4"
5.Linux運維技術(shù)資料--回復"5" 查看全部
日志收集神器:Fluentd 的簡(jiǎn)明指南,收好了~
因公眾號更改推送規則,請點(diǎn)“在看”并加“星標”第一時(shí)間獲取精彩分享
如果你的應用運行在分布式架構上,你很可能會(huì )使用集中式日志系統來(lái)收集它們的日志,其中我們使用比較廣泛的一個(gè)工具就是 fluentd,包括在容器化時(shí)代用來(lái)收集 Kubernetes 集群應用日志, fluentd 也是使用非常多的。
本文我們將解釋它是如何工作的,以及如何根據需求來(lái)調整 fluentd 配置。
基本概念我們可能有在 bash 中執行過(guò) tail -f myapp.log | grep “what I want” > example.log 這樣的命令,這其實(shí)就是 fluentd 比較擅長(cháng)做的事情,tail 日志或者接收某種形式的數據,然后過(guò)濾轉換,最后發(fā)送到后端存儲中,我們可以將上面的命令分成多段來(lái)分析。輸入tail -f myapp.log
我們要對一個(gè)文件進(jìn)行長(cháng)期的 tail,每當有什么日志信息被添加到文件中,它就會(huì )顯示在屏幕上。這在 fluentd 中叫做輸入插件,tail 只是其中之一,但還有很多其他可用的插件。
過(guò)濾| grep "what I want"
在這里,我們從尾部 -f 的輸出中,只過(guò)濾包含我們想要的字符串的日志行,在 fluentd 中這叫做過(guò)濾插件。
輸出> example.log
在這里,我們將 grep 命令過(guò)濾后的輸出保存到一個(gè)名為 example.log 的文件中。在 fluentd 中,這就是輸出插件,除了寫(xiě)到文件之外,fluentd 還有很多插件可以把你的日志輸出到其他地方。
這就是 fluentd 的最基本的運行流程,你可以讀取日志,然后處理,然后把它發(fā)送到另一個(gè)地方做進(jìn)一步的分析。接下來(lái)讓我們用一個(gè)小 demo 來(lái)實(shí)踐這些概念,看看這3個(gè)插件是如何在一起工作的。
Demo
在這個(gè)demo 中,我們將使用 fluentd 來(lái)讀取 docker 應用日志。
設置這里我們將 demo 相關(guān)的配置放置到了 Github 倉庫:,克隆后最終會(huì )得到以下目錄結構。fluentd/ ├── etc/ │ └── fluentd.conf ├── log/ │ └── kong.log └── output/
其中的 output/ 是 fluentd 寫(xiě)入日志文件的目錄,在 log/kong.log 中,有一些來(lái)自本地運行的 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"}
這個(gè)文件的每一行都是一個(gè) json 文件,這就是 docker 默認驅動(dòng)的日志格式。我們將對這個(gè)文件進(jìn)行 tail 和解析操作,它有應用日志和訪(fǎng)問(wèn)日志混合在一起。我們的目標是只獲取訪(fǎng)問(wèn)日志。etc/fluentd.conf 是我們的 fluentd 配置,其中有一個(gè)輸入和一個(gè)輸出部分,我們稍后會(huì )仔細來(lái)分析,首先運行 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
注意上面的運行命令和我們要掛載的卷
運行容器后,會(huì )出現如下所示的錯誤信息:

2020-10-16 03:35:28 +0000 [info]: #0 fluent/log.rb:327:info: fluentd worker is now running worker=0這意味著(zhù) fluentd 已經(jīng)啟動(dòng)并運行了?,F在我們知道了 fluentd 是如何運行的了,接下來(lái)我們來(lái)看看配置文件的一些細節。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 >
我們來(lái)仔細查看下這幾個(gè)配置:
然后是輸出 output 部分的配置。
# Output**> @type file path /output/example.log timekey 1d timekey_use_utc true timekey_wait 1m
在這個(gè)配置中,有兩個(gè)重要的部分。
output├── example│ ├── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log│ └── buffer.b5b1c174b5e82c806c7027bbe4c3e20fd.log.meta├── example.20190731.log└── example.20200510.log有了這個(gè)配置,我們就有了一個(gè)非常簡(jiǎn)單的輸入/輸出管道了。
現在我們可以來(lái)看看 fluentd 創(chuàng )建的一個(gè)文件中的一些日志 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” 字符串加上目錄路徑和文件名,之間使用”. “分隔。
過(guò)濾
現在我們已經(jīng)在 fluentd 中實(shí)現了日志的收集,接下來(lái)讓我們對它進(jìn)行一些過(guò)濾操作。
到目前為止,我們已經(jīng)實(shí)現了前面那條命令的2個(gè)部分,tail -f /var/log/*.log 和 > example.log 工作正常,但是如果你看一下輸出,我們有訪(fǎng)問(wèn)日志和應用日志混合在一起,現在我們需要實(shí)現 grep ‘what I want’ 過(guò)濾。
在這個(gè)例子中,我們只想要訪(fǎng)問(wèn)日志,丟棄其他的日志行。比如說(shuō),通過(guò) HTTP 進(jìn)行 grepping 會(huì )給我們提供所有的訪(fǎng)問(wèn)日志,并將應用日志排除在外,下面的配置就可以做到這一點(diǎn)。
@type grep key log pattern /HTTP/
我們來(lái)分析下這個(gè)過(guò)濾配置:
現在我們停止并再次運行容器。我們應該在輸出日志中看到一些不同的日志了,沒(méi)有應用日志,只有訪(fǎng)問(wèn)日志數據。
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解析訪(fǎng)問(wèn)日志

為了熟悉我們的配置,下面讓我們添加一個(gè)解析器插件來(lái)從訪(fǎng)問(wèn)日志中提取一些其他有用的信息。在 grep 過(guò)濾器后使用下面配置。
@type parser key_name log @type nginx
同樣我們來(lái)仔細查看下這個(gè)配置:
現在我們的管道是下面這個(gè)樣子了。
我們再次重新運行容器,現在的訪(fǎng)問(wèn)日志應該是這樣的了。
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":""}
這是之前日志中的第一個(gè)訪(fǎng)問(wèn)日志,現在日志內容完全不同了,我們的鍵從日志流,變成了 remote、host、user、method、path、code、size、referer、agent 以及 http_x_forwarded_for。如果我們要把這個(gè)保存到 Elasticsearch 中,我們將能夠通過(guò) method=GET 或其他組合進(jìn)行過(guò)濾了。
當然我們還可以更進(jìn)一步,在 remote 字段中使用 geoip 插件來(lái)提取我們我們 API 的客戶(hù)端的地理位置信息,大家可以自行測試,不過(guò)需要注意的時(shí)候需要我們的鏡像中包含這些插件。
總結
現在我們知道了如何用 docker 來(lái)讓 fluentd 讀取配置文件,我們了解了一些常用的 fluentd 配置,我們能夠從一些日志數據中來(lái)過(guò)濾、解析提取有用的信息。
福利
系統/網(wǎng)絡(luò )/應用運維人員的交流圈子,不定期為您提供運維技術(shù)領(lǐng)域前沿資訊/培訓課程/獨家技術(shù)手冊/運維工具/文檔模板等,行業(yè)大咖分享交流/同行經(jīng)驗分享互動(dòng),期待你的加入!掃碼即可加入。
隨著(zhù)材料不斷增多社群會(huì )不定期漲價(jià)早加入更優(yōu)惠
掃碼添加客服微信免費獲取以下資料:
1.網(wǎng)絡(luò )安全技術(shù)資料--回復"1"
2.容器云運維資料包--回復"2"
3.Python學(xué)習資料--回復"3"
4.Devops學(xué)習視頻課件--回復"4"
5.Linux運維技術(shù)資料--回復"5"
開(kāi)源專(zhuān)利分析工具(下) | The WIPO Manual on Open So
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2022-08-10 15:25
將本文節選自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介紹了可用于專(zhuān)利分析的開(kāi)源工具。本文所介紹的工具可以分為八個(gè)種類(lèi):通用工具、數據清理工具、數據挖掘工具、數據可視化工具、網(wǎng)絡(luò )數據可視化工具、信息圖制作工具、地理數據可視化工具、文本挖掘工具。上期文章介紹了前面六種(相關(guān)鏈接:;),本期文章介紹最后兩種:地理數據可視化工具、文本挖掘工具。PART 7地理數據可視化工具
對于地理數據可視化工具,除了無(wú)處不在的Google地圖和眾所周知的Google地球,我們認為還可以去探索一些其他的工具。
7.1 Open Street Map目前越來(lái)越受歡迎的一款應用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受歡迎的、開(kāi)源的、基于JavaScript庫的交互地圖。
可通過(guò)API訪(fǎng)問(wèn)。R用戶(hù)可以使用leafletr包,其教程在R-bloggers上()。Python用戶(hù)的相關(guān)教程可以參見(jiàn)以下鏈接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map來(lái)創(chuàng )建強大的交互圖表組合,這些圖表可以鏈接到具有不同地理編碼精度的地圖。Tableau Public可能是用專(zhuān)利數據創(chuàng )建地圖的最簡(jiǎn)單的入門(mén)工具。下面這張地圖就是使用自定義地理編碼創(chuàng )建的,其展示了科學(xué)出版物出版的國家以及這些科學(xué)出版物的名稱(chēng)。進(jìn)入后方鏈接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一個(gè)在所有主流平臺上都能夠運行的軟件包。
WIPO的專(zhuān)利分析專(zhuān)家利用QGIS描繪了全球海洋生物科學(xué)研究和專(zhuān)利文獻的全球分布,并標記了深海熱液噴口的位置()。下圖是基于科學(xué)文獻文本挖掘得出的全球海洋科學(xué)研究點(diǎn)的QGIS地圖。
7.5 .
.()不是一個(gè)地圖制作工具,而是一個(gè)包含了全球地理名稱(chēng)的數據庫。在.中,你可以獲得很多地方的地理位置數據。用戶(hù)可以在R、以及Python、Ruby、PHP的客戶(hù)端通過(guò)geonames包()訪(fǎng)問(wèn)geonames。7.6 OpenLayers
如果你想要制作自定義的一些地圖形式,OpenLayers()可以幫到你。用戶(hù)可以通過(guò)OpenLayers在OpenStreetMap制作的地圖上添加更多的圖層和其他數據源,這樣就可以制作出用戶(hù)自己想要的地圖。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款開(kāi)源網(wǎng)絡(luò )應用程序和交互式地圖制作工具,CartoDB具有免費和付費兩種賬戶(hù)。對于開(kāi)發(fā)者而言,CartoDB有很多工具的擴展文檔和API。7.8 D3.js
D3.js()是一個(gè)用于編輯數據和文檔的JavaScript庫。D3.js也是網(wǎng)絡(luò )上流行的幾個(gè)可視化工具的底層庫。7.9 Highcharts
對于用于非商業(yè)用途的圖表,部分圖表是免費的,部分圖表需要付費。7.10 Datawrapper
Datawrapper()是一個(gè)非常完整的制作圖表和地圖的在線(xiàn)可視化工具。而且Datawrapper被很多大牌新聞媒體所采用,所以它做出來(lái)的圖表讓你有一種似曾相識的感覺(jué)。Datawrapper也分有免費和付費的不同功能。7.11 Plotly
Plotly()為R、Python、Matlab、Node.js和Excel的用戶(hù)都提供免費或付費的服務(wù),免費版本的鏈接為:。R的用戶(hù)可以參考Carson Sievert的一本免費的電子書(shū)Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的優(yōu)點(diǎn)是易于使用,并且能夠使用很多語(yǔ)言訪(fǎng)問(wèn),這些優(yōu)點(diǎn)使得Plotly越來(lái)越受歡迎。
PART 8文本挖掘工具8.1 TidytextWIPO的專(zhuān)利分析專(zhuān)家使用來(lái)自Julia Silge和David Robinson的tidytext R包()來(lái)進(jìn)行文本挖掘。tidytext可以將文本挖掘的任務(wù)變得簡(jiǎn)單,并且還有免費的電子書(shū)可以參考。此外,我們還推薦你使用來(lái)自Tyler Rinker的textclean R包()來(lái)清理數據。8.2 Weka
Weka()是一個(gè)基于Java的文本挖掘軟件。8.3 NLTK
NLTK()是Python中最好的包了,它幾乎能夠實(shí)現所有主流需求。其配套的書(shū)籍NaturalLanguage Processing with Python也值得參考。
此外,Python文本挖掘包()比NLTK包更簡(jiǎn)單,但可能適合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一個(gè)通用目的的機器學(xué)習庫,其提供了關(guān)于處理文本和數據集的詳細說(shuō)明文檔()。8.5 spaCy
spaCy是一個(gè)用于處理自然語(yǔ)言的免費機器學(xué)習包。spaCy最近越來(lái)越受歡迎,因為它專(zhuān)注于創(chuàng )建可以投入生產(chǎn)的機器學(xué)習模型,而不僅僅是學(xué)術(shù)探索。在推進(jìn)自然語(yǔ)言處理并使得每個(gè)人都可以使用方面,spaCy作出了非常重要的貢獻。我們推薦由spaCy的創(chuàng )始人和開(kāi)發(fā)者之一的Ines Montani所寫(xiě)的免費教程(),來(lái)幫助學(xué)習如何使用spaCy。如果是使用R的用戶(hù),那么可以使用由倫敦經(jīng)濟學(xué)院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo開(kāi)發(fā)的spacyr包,這是一個(gè)非常好的選擇,并且在使用時(shí)也有據可查。8.6 機器學(xué)習的注解工具(Annotation Tools forMachine Learning)在對文本或圖像進(jìn)行機器學(xué)習時(shí),通常需要對一些文本或圖像進(jìn)行注釋以訓練模型。在這一方面,出現了越來(lái)越多的工具,包括需要付費的explosion.ai(其開(kāi)發(fā)者為spaCy的開(kāi)發(fā)者)。下面列出了一些可供嘗試的免費工具:? Label Studio()? Inception()? Doccano()? Label Box()8.7 Google單詞樹(shù)(Google Word Trees)Word Trees可以用來(lái)對文本進(jìn)行詳細分析,例如對權利要求進(jìn)行分析做成權利要求樹(shù)。
Google Developers網(wǎng)站上的GoogleWord Trees提供了使用Javascript生成單詞樹(shù)的說(shuō)明。8.8 R語(yǔ)言文本挖掘tm包R的文本挖掘tm包提供了很多訪(fǎng)問(wèn)文本挖掘工具的途徑。使用者可以參考tm包的開(kāi)發(fā)者所寫(xiě)的說(shuō)明()。在R-bloggers()上也有很多非常實(shí)用的關(guān)于文本挖掘的教程。推薦參考由Graham Williams在2014年寫(xiě)的教程Hands-On Data Science with R Text Mining。關(guān)于近期的基于R的文本挖掘工具的概覽,可以參見(jiàn)Fridolin Wild于2021年寫(xiě)的CRAN Task View: Natural Language Processing()。需要注意的是,許多文本挖掘包通常側重于生成單詞。這種方式,對于非學(xué)術(shù)目的的文本挖掘工作,并不十分有用。比如,對于專(zhuān)利分析來(lái)說(shuō),更注重于從文本中提取出短語(yǔ),而非單詞。因此,對專(zhuān)利分析人員而言,尋找那些能夠提取短語(yǔ)并且允許對其進(jìn)行深入挖掘的工具更有意義。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的資源。但是,近來(lái)R和Python正越來(lái)越多地被一起使用,以發(fā)揮它們的不同優(yōu)勢。8.10 其他文本挖掘資源有關(guān)更多的文本挖掘工具的選擇,請參閱這篇預測分析文章Top20 free text mining software tools()。
對于其他免費文本挖掘工具,可以參考一些語(yǔ)料庫語(yǔ)言學(xué)網(wǎng)站(corpus linguistics websites)(語(yǔ)料庫語(yǔ)言學(xué),主要研究機器可讀的自然語(yǔ)言文本的采集、存儲、檢索、統計、詞性和句法標注、句法語(yǔ)義分析,以及具有上述功能的語(yǔ)料庫在語(yǔ)言定量分析、詞典編纂、作品風(fēng)格分析、自然語(yǔ)言理解和機器翻譯等領(lǐng)域中的應用),例如:Corpus software and related tools()。一些分析工具是專(zhuān)門(mén)為處理專(zhuān)利數據而開(kāi)發(fā)的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育類(lèi)型的app)的用戶(hù)可以免費使用VantagePoint的補貼版本。
還有一些定性數據分析軟件工具可以應用于專(zhuān)利分析,例如:
?MAXQDA()
?AtlasTI()
?QDAMiner()
但是,除了QDAMine Lite(僅限 Windows)之外,其他的工具提供了免費試用的機會(huì ),這些工具并不屬于我們所關(guān)注的開(kāi)源工具。
PART 9小結在這三篇文章系列中(;),我們介紹了可用于專(zhuān)利分析的一些主要的免費和開(kāi)源工具。這些工具并不是專(zhuān)門(mén)用于專(zhuān)利分析的,但是它們能夠用來(lái)分析專(zhuān)利數據。在實(shí)踐中,了解這些工具的作用,以及了解你的分析需求,是非常重要的。在專(zhuān)利分析的實(shí)踐中,將付費工具和免費工具結合起來(lái)使用也是非常重要的。例如,WIPO的專(zhuān)利分析報告《動(dòng)物遺傳資源專(zhuān)利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,對1100萬(wàn)件專(zhuān)利文獻進(jìn)行大規模文本挖掘,并結合使用PATSTAT進(jìn)行數據統計,使用Thomson Innovation和VantagePoint進(jìn)行數據驗證,使用Tableau和Gephi做數據可視化。簡(jiǎn)而言之,使用免費的開(kāi)源工具來(lái)完成一個(gè)專(zhuān)利分析項目是可能的,但是如果想要讓專(zhuān)利分析的整個(gè)流程進(jìn)行更順暢,可能需要結合開(kāi)源工具和商業(yè)工具一起使用。所以,了解這些工具并且清楚它們的強項和優(yōu)勢在哪里十分重要。PART 10選擇分析工具需要考慮的問(wèn)題清單當開(kāi)始使用一項開(kāi)源軟件時(shí),最好是要提前問(wèn)問(wèn)自己下面這些問(wèn)題,來(lái)判斷這些工具是否能夠滿(mǎn)足你的特定需求。
下面的這個(gè)清單并不是固定的,只是為了鼓勵你在使用開(kāi)源工具之前先思考并明確一下這個(gè)工具是否適用。1. 這個(gè)工具有意義嗎?也就是說(shuō),你能不能立刻清楚這個(gè)工具的用途是什么?如果答案是否定的,這個(gè)工具對于你的特定需求來(lái)說(shuō)可能過(guò)于專(zhuān)業(yè),或者是這個(gè)工具的開(kāi)發(fā)者可能沒(méi)有清楚的表明這個(gè)工具想要實(shí)現的目的,那這就要慎重選擇。2.你是否了解這個(gè)工具所涉及的編程語(yǔ)言?如果你不了解這個(gè)編程語(yǔ)言的話(huà),會(huì )不會(huì )對你使用這個(gè)工具產(chǎn)生影響?為了使用這個(gè)工具而去學(xué)習該編程語(yǔ)言是否值得?有沒(méi)有免費的或者你能負擔的相關(guān)課程?3.源代碼是開(kāi)源的還是專(zhuān)有的?開(kāi)源許可的條款和條件是什么?當使用開(kāi)源和免費軟件時(shí),清楚地了解開(kāi)源許可的精確范圍。例如,你是否需要以與原始許可完全相同的條款向他人提供對源代碼的任何修改?如果你處理了源代碼,這就會(huì )存在知識產(chǎn)權風(fēng)險。如果你沒(méi)有在源代碼層面上工作,這可能不就不涉及知識產(chǎn)權問(wèn)題。了解開(kāi)放源代碼許可對我們的工作來(lái)說(shuō)總是有意義的。4.誰(shuí)將擁有我的數據?如果我們需要上傳數據到一個(gè)基于網(wǎng)頁(yè)的服務(wù)應用上,那么數據上傳之后誰(shuí)會(huì )擁有這些數據,其他什么人會(huì )在什么條件下能夠獲得這些數據?當這些數據是商業(yè)相關(guān)的,這個(gè)問(wèn)題就顯得尤為關(guān)鍵。
5.“免費”到底意味著(zhù)什么?免費版本通常會(huì )導致高級服務(wù)(即轉變?yōu)楦顿M的服務(wù))。這一轉變是開(kāi)源商業(yè)模型的關(guān)鍵特征。在一些情況下,免費的版本可能只能處理、存儲或輸出少量的數據。在另一些情況下,有些免費工具并不會(huì )對用戶(hù)在使用上施加任何限制,但是使用這些免費工具要求用戶(hù)具備相應的知識或技能。6.有其他企業(yè)(或者專(zhuān)利局)在使用這個(gè)工具嗎?如果有的話(huà),就說(shuō)明這個(gè)工具較為可靠并且還能夠找到相應的案例。7.這個(gè)工具是否有相關(guān)的使用說(shuō)明文檔或者教程?這是反映該工具是否成熟的指標。如果有很多教程和說(shuō)明文檔,說(shuō)明在行業(yè)中有很多人在使用它。8.有多少人在使用這個(gè)工具?這些用戶(hù)是否積極創(chuàng )建論壇和博客等,以支持用戶(hù)廣泛地交流其使用經(jīng)驗?9.這個(gè)工具是只有一個(gè)功能還是集成了很多不同的功能?換言之,這個(gè)工具能夠滿(mǎn)足所有的需求,還是僅僅是我們工具箱中的一個(gè)特殊的工具。在一些情況下,一個(gè)專(zhuān)注于一種功能的工具能夠把這個(gè)功能做到極致,而那些同時(shí)集成了很多功能的工具可能每一項功能都僅僅是一般般。在本文中所列出的所有工具中,R和Python(或者它們的結合使用)能夠實(shí)現專(zhuān)利分析全流程,從數據采集到數據可視化。在實(shí)踐中,大多數專(zhuān)利分析工具箱都包含通用工具和特定工具。
10.這個(gè)工具的極限在哪里?我們需要了解一個(gè)軟件的極限在哪里,這樣以后在嘗試做一些關(guān)鍵任務(wù)時(shí)就會(huì )有所準備。例如,一些軟件聲稱(chēng)可以完成一些特定的任務(wù),比如處理上千條或者上百萬(wàn)條數據,但實(shí)際上如果真的處理了這么大量的數據,結果就會(huì )很糟糕。通過(guò)嘗試使用這個(gè)工具到其極限,可以確定這個(gè)工具極限在哪里以及如何充分利用它。11.這個(gè)工具是否符合我的需求?最近,大數據和使用Hadoop進(jìn)行分布式計算處理大量數據是領(lǐng)域熱點(diǎn)。Hadoop是開(kāi)源的,任何人都可以使用它,但是Hadoop和大部分的專(zhuān)利分析需求都不相匹配,除非是需要分析全球所有的專(zhuān)利文獻,大量的文獻資料和科學(xué)數據。舉例來(lái)說(shuō),前文中提到的WIPO的《動(dòng)物遺傳資源專(zhuān)利分析報告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel處理了1100萬(wàn)條專(zhuān)利記錄。而決定使用GNU Parallel而非Hadoop來(lái)處理這1100萬(wàn)條專(zhuān)利數據的部分原因,是因為我們認為Hadoop使用起來(lái)比較復雜,而且對于Hadoop來(lái)說(shuō),處理1100萬(wàn)條數據屬于大材小用。簡(jiǎn)而言之,仔細考慮一個(gè)工具是否與我們的目標需求相適應和相匹配是十分重要的。12.最后,用一個(gè)簡(jiǎn)單的原則來(lái)總結如何衡量一個(gè)工具是否可用于專(zhuān)利分析,即這個(gè)工具對我有沒(méi)有用? 查看全部
開(kāi)源專(zhuān)利分析工具(下) | The WIPO Manual on Open So
將本文節選自WIPO Manual on Open Source Patent Analytics (2nd edition),主要介紹了可用于專(zhuān)利分析的開(kāi)源工具。本文所介紹的工具可以分為八個(gè)種類(lèi):通用工具、數據清理工具、數據挖掘工具、數據可視化工具、網(wǎng)絡(luò )數據可視化工具、信息圖制作工具、地理數據可視化工具、文本挖掘工具。上期文章介紹了前面六種(相關(guān)鏈接:;),本期文章介紹最后兩種:地理數據可視化工具、文本挖掘工具。PART 7地理數據可視化工具
對于地理數據可視化工具,除了無(wú)處不在的Google地圖和眾所周知的Google地球,我們認為還可以去探索一些其他的工具。
7.1 Open Street Map目前越來(lái)越受歡迎的一款應用。#map=5/51.500/-0.100
7.2 Leaflet一款非常受歡迎的、開(kāi)源的、基于JavaScript庫的交互地圖。
可通過(guò)API訪(fǎng)問(wèn)。R用戶(hù)可以使用leafletr包,其教程在R-bloggers上()。Python用戶(hù)的相關(guān)教程可以參見(jiàn)以下鏈接:;。7.3 Tableau PublicTableau Public使用OpenStreet Map來(lái)創(chuàng )建強大的交互圖表組合,這些圖表可以鏈接到具有不同地理編碼精度的地圖。Tableau Public可能是用專(zhuān)利數據創(chuàng )建地圖的最簡(jiǎn)單的入門(mén)工具。下面這張地圖就是使用自定義地理編碼創(chuàng )建的,其展示了科學(xué)出版物出版的國家以及這些科學(xué)出版物的名稱(chēng)。進(jìn)入后方鏈接的地址可以看到交互版本()。
7.4 QGIS
QGIS()是一個(gè)在所有主流平臺上都能夠運行的軟件包。
WIPO的專(zhuān)利分析專(zhuān)家利用QGIS描繪了全球海洋生物科學(xué)研究和專(zhuān)利文獻的全球分布,并標記了深海熱液噴口的位置()。下圖是基于科學(xué)文獻文本挖掘得出的全球海洋科學(xué)研究點(diǎn)的QGIS地圖。
7.5 .
.()不是一個(gè)地圖制作工具,而是一個(gè)包含了全球地理名稱(chēng)的數據庫。在.中,你可以獲得很多地方的地理位置數據。用戶(hù)可以在R、以及Python、Ruby、PHP的客戶(hù)端通過(guò)geonames包()訪(fǎng)問(wèn)geonames。7.6 OpenLayers

如果你想要制作自定義的一些地圖形式,OpenLayers()可以幫到你。用戶(hù)可以通過(guò)OpenLayers在OpenStreetMap制作的地圖上添加更多的圖層和其他數據源,這樣就可以制作出用戶(hù)自己想要的地圖。OpenLayers也有其自己的API和教程。7.7 CartoDB
CartoDB()是一款開(kāi)源網(wǎng)絡(luò )應用程序和交互式地圖制作工具,CartoDB具有免費和付費兩種賬戶(hù)。對于開(kāi)發(fā)者而言,CartoDB有很多工具的擴展文檔和API。7.8 D3.js
D3.js()是一個(gè)用于編輯數據和文檔的JavaScript庫。D3.js也是網(wǎng)絡(luò )上流行的幾個(gè)可視化工具的底層庫。7.9 Highcharts
對于用于非商業(yè)用途的圖表,部分圖表是免費的,部分圖表需要付費。7.10 Datawrapper
Datawrapper()是一個(gè)非常完整的制作圖表和地圖的在線(xiàn)可視化工具。而且Datawrapper被很多大牌新聞媒體所采用,所以它做出來(lái)的圖表讓你有一種似曾相識的感覺(jué)。Datawrapper也分有免費和付費的不同功能。7.11 Plotly
Plotly()為R、Python、Matlab、Node.js和Excel的用戶(hù)都提供免費或付費的服務(wù),免費版本的鏈接為:。R的用戶(hù)可以參考Carson Sievert的一本免費的電子書(shū)Interactive web-baseddata visualization with R, plotly, and shiny()。Plotly的優(yōu)點(diǎn)是易于使用,并且能夠使用很多語(yǔ)言訪(fǎng)問(wèn),這些優(yōu)點(diǎn)使得Plotly越來(lái)越受歡迎。
PART 8文本挖掘工具8.1 TidytextWIPO的專(zhuān)利分析專(zhuān)家使用來(lái)自Julia Silge和David Robinson的tidytext R包()來(lái)進(jìn)行文本挖掘。tidytext可以將文本挖掘的任務(wù)變得簡(jiǎn)單,并且還有免費的電子書(shū)可以參考。此外,我們還推薦你使用來(lái)自Tyler Rinker的textclean R包()來(lái)清理數據。8.2 Weka
Weka()是一個(gè)基于Java的文本挖掘軟件。8.3 NLTK
NLTK()是Python中最好的包了,它幾乎能夠實(shí)現所有主流需求。其配套的書(shū)籍NaturalLanguage Processing with Python也值得參考。

此外,Python文本挖掘包()比NLTK包更簡(jiǎn)單,但可能適合你的需求。8.4 Sci-kit learn
Sci-kit learn()是一個(gè)通用目的的機器學(xué)習庫,其提供了關(guān)于處理文本和數據集的詳細說(shuō)明文檔()。8.5 spaCy
spaCy是一個(gè)用于處理自然語(yǔ)言的免費機器學(xué)習包。spaCy最近越來(lái)越受歡迎,因為它專(zhuān)注于創(chuàng )建可以投入生產(chǎn)的機器學(xué)習模型,而不僅僅是學(xué)術(shù)探索。在推進(jìn)自然語(yǔ)言處理并使得每個(gè)人都可以使用方面,spaCy作出了非常重要的貢獻。我們推薦由spaCy的創(chuàng )始人和開(kāi)發(fā)者之一的Ines Montani所寫(xiě)的免費教程(),來(lái)幫助學(xué)習如何使用spaCy。如果是使用R的用戶(hù),那么可以使用由倫敦經(jīng)濟學(xué)院(London School of Economics)的Kenneth Benoit和Akitaka Matsuo開(kāi)發(fā)的spacyr包,這是一個(gè)非常好的選擇,并且在使用時(shí)也有據可查。8.6 機器學(xué)習的注解工具(Annotation Tools forMachine Learning)在對文本或圖像進(jìn)行機器學(xué)習時(shí),通常需要對一些文本或圖像進(jìn)行注釋以訓練模型。在這一方面,出現了越來(lái)越多的工具,包括需要付費的explosion.ai(其開(kāi)發(fā)者為spaCy的開(kāi)發(fā)者)。下面列出了一些可供嘗試的免費工具:? Label Studio()? Inception()? Doccano()? Label Box()8.7 Google單詞樹(shù)(Google Word Trees)Word Trees可以用來(lái)對文本進(jìn)行詳細分析,例如對權利要求進(jìn)行分析做成權利要求樹(shù)。
Google Developers網(wǎng)站上的GoogleWord Trees提供了使用Javascript生成單詞樹(shù)的說(shuō)明。8.8 R語(yǔ)言文本挖掘tm包R的文本挖掘tm包提供了很多訪(fǎng)問(wèn)文本挖掘工具的途徑。使用者可以參考tm包的開(kāi)發(fā)者所寫(xiě)的說(shuō)明()。在R-bloggers()上也有很多非常實(shí)用的關(guān)于文本挖掘的教程。推薦參考由Graham Williams在2014年寫(xiě)的教程Hands-On Data Science with R Text Mining。關(guān)于近期的基于R的文本挖掘工具的概覽,可以參見(jiàn)Fridolin Wild于2021年寫(xiě)的CRAN Task View: Natural Language Processing()。需要注意的是,許多文本挖掘包通常側重于生成單詞。這種方式,對于非學(xué)術(shù)目的的文本挖掘工作,并不十分有用。比如,對于專(zhuān)利分析來(lái)說(shuō),更注重于從文本中提取出短語(yǔ),而非單詞。因此,對專(zhuān)利分析人員而言,尋找那些能夠提取短語(yǔ)并且允許對其進(jìn)行深入挖掘的工具更有意義。8.9 Python和文本挖掘目前有很多基于Python的文本挖掘工具。相比于R,Pyhton在文本挖掘方面有更多的資源。但是,近來(lái)R和Python正越來(lái)越多地被一起使用,以發(fā)揮它們的不同優(yōu)勢。8.10 其他文本挖掘資源有關(guān)更多的文本挖掘工具的選擇,請參閱這篇預測分析文章Top20 free text mining software tools()。
對于其他免費文本挖掘工具,可以參考一些語(yǔ)料庫語(yǔ)言學(xué)網(wǎng)站(corpus linguistics websites)(語(yǔ)料庫語(yǔ)言學(xué),主要研究機器可讀的自然語(yǔ)言文本的采集、存儲、檢索、統計、詞性和句法標注、句法語(yǔ)義分析,以及具有上述功能的語(yǔ)料庫在語(yǔ)言定量分析、詞典編纂、作品風(fēng)格分析、自然語(yǔ)言理解和機器翻譯等領(lǐng)域中的應用),例如:Corpus software and related tools()。一些分析工具是專(zhuān)門(mén)為處理專(zhuān)利數據而開(kāi)發(fā)的,例如SearchTechnology公司的VantagePoint()。vpinstitute(一款教育類(lèi)型的app)的用戶(hù)可以免費使用VantagePoint的補貼版本。
還有一些定性數據分析軟件工具可以應用于專(zhuān)利分析,例如:
?MAXQDA()
?AtlasTI()
?QDAMiner()
但是,除了QDAMine Lite(僅限 Windows)之外,其他的工具提供了免費試用的機會(huì ),這些工具并不屬于我們所關(guān)注的開(kāi)源工具。
PART 9小結在這三篇文章系列中(;),我們介紹了可用于專(zhuān)利分析的一些主要的免費和開(kāi)源工具。這些工具并不是專(zhuān)門(mén)用于專(zhuān)利分析的,但是它們能夠用來(lái)分析專(zhuān)利數據。在實(shí)踐中,了解這些工具的作用,以及了解你的分析需求,是非常重要的。在專(zhuān)利分析的實(shí)踐中,將付費工具和免費工具結合起來(lái)使用也是非常重要的。例如,WIPO的專(zhuān)利分析報告《動(dòng)物遺傳資源專(zhuān)利分析》(WIPO Patent Landscape forAnimal Genetic Resources),()中,就使用了GNU Parallel和Map Reduce利用Ruby中的匹配模式,對1100萬(wàn)件專(zhuān)利文獻進(jìn)行大規模文本挖掘,并結合使用PATSTAT進(jìn)行數據統計,使用Thomson Innovation和VantagePoint進(jìn)行數據驗證,使用Tableau和Gephi做數據可視化。簡(jiǎn)而言之,使用免費的開(kāi)源工具來(lái)完成一個(gè)專(zhuān)利分析項目是可能的,但是如果想要讓專(zhuān)利分析的整個(gè)流程進(jìn)行更順暢,可能需要結合開(kāi)源工具和商業(yè)工具一起使用。所以,了解這些工具并且清楚它們的強項和優(yōu)勢在哪里十分重要。PART 10選擇分析工具需要考慮的問(wèn)題清單當開(kāi)始使用一項開(kāi)源軟件時(shí),最好是要提前問(wèn)問(wèn)自己下面這些問(wèn)題,來(lái)判斷這些工具是否能夠滿(mǎn)足你的特定需求。
下面的這個(gè)清單并不是固定的,只是為了鼓勵你在使用開(kāi)源工具之前先思考并明確一下這個(gè)工具是否適用。1. 這個(gè)工具有意義嗎?也就是說(shuō),你能不能立刻清楚這個(gè)工具的用途是什么?如果答案是否定的,這個(gè)工具對于你的特定需求來(lái)說(shuō)可能過(guò)于專(zhuān)業(yè),或者是這個(gè)工具的開(kāi)發(fā)者可能沒(méi)有清楚的表明這個(gè)工具想要實(shí)現的目的,那這就要慎重選擇。2.你是否了解這個(gè)工具所涉及的編程語(yǔ)言?如果你不了解這個(gè)編程語(yǔ)言的話(huà),會(huì )不會(huì )對你使用這個(gè)工具產(chǎn)生影響?為了使用這個(gè)工具而去學(xué)習該編程語(yǔ)言是否值得?有沒(méi)有免費的或者你能負擔的相關(guān)課程?3.源代碼是開(kāi)源的還是專(zhuān)有的?開(kāi)源許可的條款和條件是什么?當使用開(kāi)源和免費軟件時(shí),清楚地了解開(kāi)源許可的精確范圍。例如,你是否需要以與原始許可完全相同的條款向他人提供對源代碼的任何修改?如果你處理了源代碼,這就會(huì )存在知識產(chǎn)權風(fēng)險。如果你沒(méi)有在源代碼層面上工作,這可能不就不涉及知識產(chǎn)權問(wèn)題。了解開(kāi)放源代碼許可對我們的工作來(lái)說(shuō)總是有意義的。4.誰(shuí)將擁有我的數據?如果我們需要上傳數據到一個(gè)基于網(wǎng)頁(yè)的服務(wù)應用上,那么數據上傳之后誰(shuí)會(huì )擁有這些數據,其他什么人會(huì )在什么條件下能夠獲得這些數據?當這些數據是商業(yè)相關(guān)的,這個(gè)問(wèn)題就顯得尤為關(guān)鍵。
5.“免費”到底意味著(zhù)什么?免費版本通常會(huì )導致高級服務(wù)(即轉變?yōu)楦顿M的服務(wù))。這一轉變是開(kāi)源商業(yè)模型的關(guān)鍵特征。在一些情況下,免費的版本可能只能處理、存儲或輸出少量的數據。在另一些情況下,有些免費工具并不會(huì )對用戶(hù)在使用上施加任何限制,但是使用這些免費工具要求用戶(hù)具備相應的知識或技能。6.有其他企業(yè)(或者專(zhuān)利局)在使用這個(gè)工具嗎?如果有的話(huà),就說(shuō)明這個(gè)工具較為可靠并且還能夠找到相應的案例。7.這個(gè)工具是否有相關(guān)的使用說(shuō)明文檔或者教程?這是反映該工具是否成熟的指標。如果有很多教程和說(shuō)明文檔,說(shuō)明在行業(yè)中有很多人在使用它。8.有多少人在使用這個(gè)工具?這些用戶(hù)是否積極創(chuàng )建論壇和博客等,以支持用戶(hù)廣泛地交流其使用經(jīng)驗?9.這個(gè)工具是只有一個(gè)功能還是集成了很多不同的功能?換言之,這個(gè)工具能夠滿(mǎn)足所有的需求,還是僅僅是我們工具箱中的一個(gè)特殊的工具。在一些情況下,一個(gè)專(zhuān)注于一種功能的工具能夠把這個(gè)功能做到極致,而那些同時(shí)集成了很多功能的工具可能每一項功能都僅僅是一般般。在本文中所列出的所有工具中,R和Python(或者它們的結合使用)能夠實(shí)現專(zhuān)利分析全流程,從數據采集到數據可視化。在實(shí)踐中,大多數專(zhuān)利分析工具箱都包含通用工具和特定工具。
10.這個(gè)工具的極限在哪里?我們需要了解一個(gè)軟件的極限在哪里,這樣以后在嘗試做一些關(guān)鍵任務(wù)時(shí)就會(huì )有所準備。例如,一些軟件聲稱(chēng)可以完成一些特定的任務(wù),比如處理上千條或者上百萬(wàn)條數據,但實(shí)際上如果真的處理了這么大量的數據,結果就會(huì )很糟糕。通過(guò)嘗試使用這個(gè)工具到其極限,可以確定這個(gè)工具極限在哪里以及如何充分利用它。11.這個(gè)工具是否符合我的需求?最近,大數據和使用Hadoop進(jìn)行分布式計算處理大量數據是領(lǐng)域熱點(diǎn)。Hadoop是開(kāi)源的,任何人都可以使用它,但是Hadoop和大部分的專(zhuān)利分析需求都不相匹配,除非是需要分析全球所有的專(zhuān)利文獻,大量的文獻資料和科學(xué)數據。舉例來(lái)說(shuō),前文中提到的WIPO的《動(dòng)物遺傳資源專(zhuān)利分析報告》(Animal Genetic ResourcesLandscape report)就使用GNU Parallel處理了1100萬(wàn)條專(zhuān)利記錄。而決定使用GNU Parallel而非Hadoop來(lái)處理這1100萬(wàn)條專(zhuān)利數據的部分原因,是因為我們認為Hadoop使用起來(lái)比較復雜,而且對于Hadoop來(lái)說(shuō),處理1100萬(wàn)條數據屬于大材小用。簡(jiǎn)而言之,仔細考慮一個(gè)工具是否與我們的目標需求相適應和相匹配是十分重要的。12.最后,用一個(gè)簡(jiǎn)單的原則來(lái)總結如何衡量一個(gè)工具是否可用于專(zhuān)利分析,即這個(gè)工具對我有沒(méi)有用?
完整收集信息以擴展實(shí)戰攻擊面
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-07-24 01:01
原文:0x00 前言
距離上次分享文章已經(jīng)過(guò)去了5個(gè)月,寫(xiě)這篇文章之前。我已經(jīng)做了較多的滲透項目,也打了一些地級和省級市的紅隊項目。在此期間,讓我感覺(jué)非常受用的技巧無(wú)非是對于信息的收集,不管是在前期打點(diǎn),亦或是拿到shell后的橫向,對于目標信息的掌握程度,很大層面決定了能打到多深,能打到多寬。由于自己技術(shù)受限,仍然停留在安服水平,因此文章主要以簡(jiǎn)單技巧分享為主。主要是分享自己在早期以及近期遇到的兩個(gè)例子,也是較為簡(jiǎn)單的實(shí)戰技術(shù)理論,并不是較為復雜的研究性分享,分別以外部和內部為例。
并且本文主要是說(shuō)收集信息,而不是信息收集,希望加以區分。
0x01 外部_收集信息
這個(gè)例子是我以前眾測的時(shí)候找到的一系列漏洞,主要成果就是通過(guò)日志泄露到Getshell。
該站點(diǎn)是Thinkphp的,但是做了Nginx反代,通過(guò)wappalyzer可以收集到站點(diǎn)指紋,通過(guò)路徑報錯,也可以判斷出是TP站點(diǎn),一般此時(shí)要么是3.x要么是5.x
最后通過(guò)漏洞掃描工具ThinkphpGUI-1.2-SNAPSHOT發(fā)現存在Tp3.x日志泄露的問(wèn)題
通過(guò)TPlogScan獲取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
獲取了若干日志后,就到了收集信息的重點(diǎn),這里主要分享的實(shí)戰理論就是
在收集信息中,一定要將所獲得的信息和關(guān)鍵字關(guān)聯(lián),進(jìn)行靈活篩選
所獲得的信息,在這里就是指,我們獲取的TP日志,回想一般日志會(huì )記錄的東西,比如Sql語(yǔ)句,比如攻擊流量,比如程序運行日志。
關(guān)鍵字,在這里就是指,我們經(jīng)常關(guān)心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
關(guān)聯(lián):將這些得到的信息和關(guān)鍵字關(guān)聯(lián),比如Sql語(yǔ)句中會(huì )出現對用戶(hù)名稱(chēng)和密碼的對比是否正確,會(huì )出現數據的添加刪除等。
靈活篩選:根據現有信息,去優(yōu)先選擇我們需要獲得的信息
如只有一個(gè)后臺登錄頁(yè)面,當前最好的篩選是通過(guò)用戶(hù)名密碼的字段在大量的日志中去篩選password,username,passwd,user等關(guān)鍵字,嘗試獲取某個(gè)用戶(hù)的賬號密碼,進(jìn)入后臺,去擴展自己的攻擊面;
又或是此時(shí)已獲得后臺用戶(hù)權限,想找到一個(gè)Sql注入打到shell或內網(wǎng),此時(shí)應該以Insert,Delete,Update,Select,Where,Order By等關(guān)鍵字為主,去篩選查找;
或通過(guò)漏洞拿到了shell分但是數據庫用戶(hù)密碼是加密的,此時(shí)還想繼續獲取數據分,呢么還是類(lèi)似1的方式,篩選password,username,Admin,Administrator,root,system等高權限用戶(hù)關(guān)鍵字,嘗試獲取在寫(xiě)入數據庫前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情況,靈活關(guān)聯(lián)
我當時(shí)正處于第一種情況只有一個(gè)登錄頁(yè)面,此時(shí)立馬去篩選關(guān)鍵字,在龐大的日志中,篩選出來(lái)了一條關(guān)于管理員用戶(hù)admin的查詢(xún)語(yǔ)句
獲取到了hash值,然后很幸運的是,cmd5有相關(guān)緩存,直接解了出來(lái)
進(jìn)入后臺后,在上傳處有對后綴的限制,有對內容的限制
此處我通過(guò)換行繞過(guò)后綴限制,臟數據繞過(guò)了對內容的限制,成功上傳了php的shell
其實(shí)這些后續的bypass上傳花費了我更長(cháng)的事件,上述上傳還需要一次特別的更名操作,才能被解析,但這里不是寫(xiě)Getshell的,而不是分享收集信息的實(shí)戰理論,因此不多講。這里主要就是跟大家啰嗦了下,在拿到僅限的大量無(wú)用信息中,一定要把此時(shí)自己獲得的信息和關(guān)鍵字做匹配,做關(guān)聯(lián),減少在廢物信息中的搜尋時(shí)間,最效率化利用當前的信息,去擴展自己的滲透攻擊面
0x02 內部_收集信息
前期Shiro打點(diǎn)(我也很好奇,2022年了,還有shiro),特別小的內網(wǎng),沒(méi)任何東西打,只能拿數據分了。
嘗試翻找各種數據庫配置文件,可以根據數據庫后綴文件名進(jìn)行檢索,比如yml,ini,conf,config等
這個(gè)數據庫里面數據很少,基本湊不夠。
于是找到一個(gè)源碼備份文件,雖然不懂Java,但是只要能收集信息的地方,我們一個(gè)都不能漏。在源碼文件中,我們可以收集到的信息,往往有很多硬編碼的信息,注釋中的測試賬號密碼,泄露的token,api,accesskey等。
即使你不會(huì )java,你也可以解壓縮jar包,然后丟到IDEA中可查看源代碼?;蛘呤褂肑d-Gui直接打開(kāi)jar包也可以查看源代碼
發(fā)現jar包中打包進(jìn)來(lái)了數據庫配置文件,里面有一個(gè)內網(wǎng)的aliyun mysql數據庫。沒(méi)有太多的用戶(hù)數據,但是發(fā)現了一些app_id,app_secret字段
拿著(zhù)通過(guò)這些關(guān)鍵字,我在源代碼中檢索,發(fā)現跟微信相關(guān)
通過(guò)查詢(xún)資料發(fā)現,app_id和app_secret是關(guān)于企業(yè)微信的,兩個(gè)參數認證后可以獲取Token,通過(guò)Token可以調用企業(yè)微信的各種API,比如將自己添加到企業(yè)微信用戶(hù)中,獲取企業(yè)微信部門(mén)人員列表等,具體利用可參考下面的文章
這里我通過(guò)id和sercert認證獲取Token中,由于不在白名單中,被拒絕了。
此時(shí)我仍沒(méi)有放棄,在數據庫中繼續檢索關(guān)鍵詞Token(sql語(yǔ)句檢索列名或內容可參考百度學(xué)習),發(fā)現了token_cache的字段,翻譯過(guò)來(lái)就是token緩存
此時(shí)通過(guò)/cgi-bin/groups/get api驗證Token是可用狀態(tài),后續的信息利用就不放出了,無(wú)非是獲取了部門(mén)所有人員詳細信息,以及提個(gè)嚴重漏洞罷了
搞完數據庫,我接著(zhù)看源碼,此時(shí)我沒(méi)有立刻搜索文件內容,而是搜索整個(gè)jar包中的文件名,關(guān)鍵字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通過(guò)關(guān)鍵字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通過(guò)文件名我找到了一個(gè)帶有OSS名字的class
通過(guò)該Class我又找到了一些存儲配置的Class
找到了兩個(gè)阿里云 accesskey,一個(gè)七牛云的acesskey
通過(guò)阿里云accesskey拿到一個(gè)OSS BUCKET 以及150多臺的云主機
0x03 總結
通過(guò)上述內網(wǎng)的兩個(gè)例子,主要就是想將現有信息和關(guān)鍵字關(guān)聯(lián),靈活篩選。
簡(jiǎn)單的說(shuō),就是要根據當前獲得信息的固有屬性來(lái)與關(guān)鍵字做適配,什么環(huán)境該擁有什么屬性,什么屬性該適配哪種檢索關(guān)鍵字以及檢索方式。盡可能的做一個(gè)關(guān)聯(lián)性假想。
本篇文章實(shí)質(zhì)是實(shí)戰技術(shù)案例分享,但是想透過(guò)兩個(gè)特別簡(jiǎn)單的例子,來(lái)描述下自己心中對于收集信息,擴展攻擊面的認知?;臼亲晕掖植诘淖疽?jiàn),如果能給各位師傅帶來(lái)一點(diǎn)技巧的擴充幫助,也足夠我歡喜了。
喜歡就點(diǎn)在看哦~
長(cháng)按識別二維碼
歡迎投稿
EMAIL:
博客: 查看全部
完整收集信息以擴展實(shí)戰攻擊面
原文:0x00 前言
距離上次分享文章已經(jīng)過(guò)去了5個(gè)月,寫(xiě)這篇文章之前。我已經(jīng)做了較多的滲透項目,也打了一些地級和省級市的紅隊項目。在此期間,讓我感覺(jué)非常受用的技巧無(wú)非是對于信息的收集,不管是在前期打點(diǎn),亦或是拿到shell后的橫向,對于目標信息的掌握程度,很大層面決定了能打到多深,能打到多寬。由于自己技術(shù)受限,仍然停留在安服水平,因此文章主要以簡(jiǎn)單技巧分享為主。主要是分享自己在早期以及近期遇到的兩個(gè)例子,也是較為簡(jiǎn)單的實(shí)戰技術(shù)理論,并不是較為復雜的研究性分享,分別以外部和內部為例。
并且本文主要是說(shuō)收集信息,而不是信息收集,希望加以區分。
0x01 外部_收集信息
這個(gè)例子是我以前眾測的時(shí)候找到的一系列漏洞,主要成果就是通過(guò)日志泄露到Getshell。
該站點(diǎn)是Thinkphp的,但是做了Nginx反代,通過(guò)wappalyzer可以收集到站點(diǎn)指紋,通過(guò)路徑報錯,也可以判斷出是TP站點(diǎn),一般此時(shí)要么是3.x要么是5.x
最后通過(guò)漏洞掃描工具ThinkphpGUI-1.2-SNAPSHOT發(fā)現存在Tp3.x日志泄露的問(wèn)題
通過(guò)TPlogScan獲取日志
python3 TPLogScan.py -u -v 3 -p /Application/Runtime/Logs/Home/ -y 2021 -m 11 -d 1
獲取了若干日志后,就到了收集信息的重點(diǎn),這里主要分享的實(shí)戰理論就是
在收集信息中,一定要將所獲得的信息和關(guān)鍵字關(guān)聯(lián),進(jìn)行靈活篩選
所獲得的信息,在這里就是指,我們獲取的TP日志,回想一般日志會(huì )記錄的東西,比如Sql語(yǔ)句,比如攻擊流量,比如程序運行日志。
關(guān)鍵字,在這里就是指,我們經(jīng)常關(guān)心的字段:password,username,passwd,user,Key,Token,Session,Cookie等
關(guān)聯(lián):將這些得到的信息和關(guān)鍵字關(guān)聯(lián),比如Sql語(yǔ)句中會(huì )出現對用戶(hù)名稱(chēng)和密碼的對比是否正確,會(huì )出現數據的添加刪除等。
靈活篩選:根據現有信息,去優(yōu)先選擇我們需要獲得的信息
如只有一個(gè)后臺登錄頁(yè)面,當前最好的篩選是通過(guò)用戶(hù)名密碼的字段在大量的日志中去篩選password,username,passwd,user等關(guān)鍵字,嘗試獲取某個(gè)用戶(hù)的賬號密碼,進(jìn)入后臺,去擴展自己的攻擊面;
又或是此時(shí)已獲得后臺用戶(hù)權限,想找到一個(gè)Sql注入打到shell或內網(wǎng),此時(shí)應該以Insert,Delete,Update,Select,Where,Order By等關(guān)鍵字為主,去篩選查找;
或通過(guò)漏洞拿到了shell分但是數據庫用戶(hù)密碼是加密的,此時(shí)還想繼續獲取數據分,呢么還是類(lèi)似1的方式,篩選password,username,Admin,Administrator,root,system等高權限用戶(hù)關(guān)鍵字,嘗試獲取在寫(xiě)入數據庫前的加密明文,比如selectusername,passwordfrom userswherepassword=md5('P@ssW0rd')
等等系其他情況,靈活關(guān)聯(lián)
我當時(shí)正處于第一種情況只有一個(gè)登錄頁(yè)面,此時(shí)立馬去篩選關(guān)鍵字,在龐大的日志中,篩選出來(lái)了一條關(guān)于管理員用戶(hù)admin的查詢(xún)語(yǔ)句
獲取到了hash值,然后很幸運的是,cmd5有相關(guān)緩存,直接解了出來(lái)

進(jìn)入后臺后,在上傳處有對后綴的限制,有對內容的限制
此處我通過(guò)換行繞過(guò)后綴限制,臟數據繞過(guò)了對內容的限制,成功上傳了php的shell
其實(shí)這些后續的bypass上傳花費了我更長(cháng)的事件,上述上傳還需要一次特別的更名操作,才能被解析,但這里不是寫(xiě)Getshell的,而不是分享收集信息的實(shí)戰理論,因此不多講。這里主要就是跟大家啰嗦了下,在拿到僅限的大量無(wú)用信息中,一定要把此時(shí)自己獲得的信息和關(guān)鍵字做匹配,做關(guān)聯(lián),減少在廢物信息中的搜尋時(shí)間,最效率化利用當前的信息,去擴展自己的滲透攻擊面
0x02 內部_收集信息
前期Shiro打點(diǎn)(我也很好奇,2022年了,還有shiro),特別小的內網(wǎng),沒(méi)任何東西打,只能拿數據分了。
嘗試翻找各種數據庫配置文件,可以根據數據庫后綴文件名進(jìn)行檢索,比如yml,ini,conf,config等
這個(gè)數據庫里面數據很少,基本湊不夠。
于是找到一個(gè)源碼備份文件,雖然不懂Java,但是只要能收集信息的地方,我們一個(gè)都不能漏。在源碼文件中,我們可以收集到的信息,往往有很多硬編碼的信息,注釋中的測試賬號密碼,泄露的token,api,accesskey等。
即使你不會(huì )java,你也可以解壓縮jar包,然后丟到IDEA中可查看源代碼?;蛘呤褂肑d-Gui直接打開(kāi)jar包也可以查看源代碼
發(fā)現jar包中打包進(jìn)來(lái)了數據庫配置文件,里面有一個(gè)內網(wǎng)的aliyun mysql數據庫。沒(méi)有太多的用戶(hù)數據,但是發(fā)現了一些app_id,app_secret字段
拿著(zhù)通過(guò)這些關(guān)鍵字,我在源代碼中檢索,發(fā)現跟微信相關(guān)
通過(guò)查詢(xún)資料發(fā)現,app_id和app_secret是關(guān)于企業(yè)微信的,兩個(gè)參數認證后可以獲取Token,通過(guò)Token可以調用企業(yè)微信的各種API,比如將自己添加到企業(yè)微信用戶(hù)中,獲取企業(yè)微信部門(mén)人員列表等,具體利用可參考下面的文章
這里我通過(guò)id和sercert認證獲取Token中,由于不在白名單中,被拒絕了。
此時(shí)我仍沒(méi)有放棄,在數據庫中繼續檢索關(guān)鍵詞Token(sql語(yǔ)句檢索列名或內容可參考百度學(xué)習),發(fā)現了token_cache的字段,翻譯過(guò)來(lái)就是token緩存
此時(shí)通過(guò)/cgi-bin/groups/get api驗證Token是可用狀態(tài),后續的信息利用就不放出了,無(wú)非是獲取了部門(mén)所有人員詳細信息,以及提個(gè)嚴重漏洞罷了

搞完數據庫,我接著(zhù)看源碼,此時(shí)我沒(méi)有立刻搜索文件內容,而是搜索整個(gè)jar包中的文件名,關(guān)鍵字如:Upload,OSS,Redis,Mysql,Access,Config等文件名,然后又通過(guò)關(guān)鍵字Accesskey,AccessID,Access_Key,Bucket搜索云的secret key。
通過(guò)文件名我找到了一個(gè)帶有OSS名字的class
通過(guò)該Class我又找到了一些存儲配置的Class
找到了兩個(gè)阿里云 accesskey,一個(gè)七牛云的acesskey
通過(guò)阿里云accesskey拿到一個(gè)OSS BUCKET 以及150多臺的云主機
0x03 總結
通過(guò)上述內網(wǎng)的兩個(gè)例子,主要就是想將現有信息和關(guān)鍵字關(guān)聯(lián),靈活篩選。
簡(jiǎn)單的說(shuō),就是要根據當前獲得信息的固有屬性來(lái)與關(guān)鍵字做適配,什么環(huán)境該擁有什么屬性,什么屬性該適配哪種檢索關(guān)鍵字以及檢索方式。盡可能的做一個(gè)關(guān)聯(lián)性假想。
本篇文章實(shí)質(zhì)是實(shí)戰技術(shù)案例分享,但是想透過(guò)兩個(gè)特別簡(jiǎn)單的例子,來(lái)描述下自己心中對于收集信息,擴展攻擊面的認知?;臼亲晕掖植诘淖疽?jiàn),如果能給各位師傅帶來(lái)一點(diǎn)技巧的擴充幫助,也足夠我歡喜了。
喜歡就點(diǎn)在看哦~
長(cháng)按識別二維碼
歡迎投稿
EMAIL:
博客:


