Help
RSS
API
Feed
Maltego
Contact
Domain > api.roboticspace.co
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-10-28
104.21.40.211
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyDate: Mon, 28 Oct 2024 00:56:10 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveCache-Control: max-age3600Expires: Mon, 28 Oct 2024 01:56:10 GMTLocation: https://api.roboticspace.co/Report-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sAHgys9YnPH8jEoFHfiHK2EIlujaXqezLuPRMFnMvfAA97lL8ag9nxQkTUijeNymqu1bF1Kz4%2Fjwzx0QQvSJPf5xIwlrTAc8d4VzSyLoreQjlpPkBwXTLBePYCwkaPuHGbPARLZlB},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8d96f6e96e9075a6-SEAalt-svc: h3:443; ma86400server-timing: cfL4;desc?protoTCP&rtt9558&sent1&recv3&lost0&retrans0&sent_bytes0&recv_bytes58&delivery_rate0&cwnd229&unsent_bytes0&cid0000000000000000&ts0&x0 html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>cloudflare/center>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Mon, 28 Oct 2024 00:56:10 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-alivelast-modified: Wed, 10 May 2023 14:43:23 GMTvary: Accept-Encodingx-turbo-charged-by: LiteSpeedcf-cache-status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?syakD4yrqePmk7oXX5Ay2Jg8zG7NFxZavxTIXdC9ZUF%2F4xXONknZYJ1mQ9beKrssxZiZYcj1OSHqU7StjrPyTmDqfAh09VwzcMASebMPwysnIEfPNzLTFyrZWNBnKeNBNvwRjRE29},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8d96f6e9e825ded8-SEAalt-svc: h3:443; ma86400server-timing: cfL4;desc?protoTCP&rtt9458&sent5&recv6&lost0&retrans0&sent_bytes2862&recv_bytes730&delivery_rate312709&cwnd33&unsent_bytes0&cid77a3df8424e4376b&ts187&x0 !doctype html>html langen> head> meta charsetutf-8> meta nameviewport contentwidthdevice-width, initial-scale1> title>Heating Chamber UI/title> link hrefhttps://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css relstylesheet integritysha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor crossoriginanonymous> /head> script srchttps://unpkg.com/feather-icons>/script> body> div classcontainer> div stylepadding-top: 5%;> h1 classtext-center>Heating Chamber Controller UI/h1> div stylepadding:1% classtext-end> div> a>Elapsed Time: /a>a idelapsedTime>0/a> /div> button idconnectBle typebutton classbtn btn-primary>Connect/button> button idrecordBtn typebutton classbtn btn-danger>Record/button> button typebutton idsettingbtn classbtn btn-light data-bs-togglemodal data-bs-target#exampleModal> i data-feathersettings>/i> /button> /div> div classinput-group mb-3> input typetext idcommandInput classform-control placeholderSend Command aria-labelSend Command aria-describedbysendCmdBtn> button classbtn btn-outline-secondary typebutton idsendCmdBtn>i data-featherterminal>/i> Send/button> /div> div classrow> div classcol shadow-sm p-3 mb-5 bg-white rounded stylemargin: 2%;>Ambient Temperature br>a>strong idambienttempvalue>/strong>/a> /div> div classcol shadow-sm p-3 mb-5 bg-white rounded stylemargin: 2%;>Specimen Temperature br> a>strong idobjecttempvalue>/strong>/a>/div> div classcol shadow-sm p-3 mb-5 bg-white rounded stylemargin: 2%;>Target Temperature br>a>strong idtargettempvalue>/strong>/a>/div> /div> div classrow> div classcol mx-auto d-grid gap-2 stylemargin: 2%;>button classbtn btn-success typebutton idstartTargetTempBtn>Start/button>/div> div classcol mx-auto d-grid gap-2 stylemargin: 2%;>button classbtn btn-danger typebutton idstopTargetTempBtn>Stop/button>/div> div classcol mx-auto d-grid gap-2> div classinput-group mb-3> input typenumber idtargetTempInput classform-control placeholderTarget temperature aria-labelRecipients username aria-describedbybutton-addon2 value0> button classbtn btn-outline-secondary typebutton idupdateTargetTempBtn>Update/button> /div> /div> /div> !-- div> p idreadvalue>/p>br> /div> --> div stylepadding-top: 1%;> canvas iddataChart>/canvas> /div> br> div classcontainer> div classrow> div classcol> canvas idexpChart>/canvas> /div> div classcol> table classtable table-hover> thead> tr> th scopecol>No/th> th scopecol>Target Temperature/th> th scopecol>Profile/th> th scopecol>Interval/th> /tr> /thead> tbody> tr> th scoperow>1/th> td>30 celcius/td> td>Step/td> td>10s/td> /tr> /tbody> /table> div classcontainer> div classrow> div classcol> input classform-control typetext placeholderTarget temperature (celcius) aria-labeldefault input example> /div> div classcol> div classbtn-group> select classform-select idexp-profile> option selected value1>Step/option> option value2>Slope/option> option value3>Exponential/option> /select> /div> /div> div classcol> input classform-control typetext placeholderTime interval (ms) aria-labeldefault input example> /div> div classcol> button typebutton classbtn btn-primary>Add/button> /div> /div> /div> /div> /div> /div> /div> /div>!-- Modal -->div classmodal fade idexampleModal tabindex-1 aria-labelledbyexampleModalLabel aria-hiddentrue> div classmodal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable> div classmodal-content> div classmodal-header> h5 classmodal-title idexampleModalLabel>Settings/h5> button typebutton classbtn-close data-bs-dismissmodal aria-labelClose>/button> /div> div classmodal-body> div classinput-group mb-3> span classinput-group-text idp-ctrl-val>P Gain/span> input typetext classform-control aria-labelSizing example input aria-describedbyinputGroup-sizing-default> /div> div classinput-group mb-3> span classinput-group-text idi-ctrl-val>I Gain/span> input typetext classform-control aria-labelSizing example input aria-describedbyinputGroup-sizing-default> /div> div classinput-group mb-3> span classinput-group-text idd-ctrl-val>D Gain/span> input typetext classform-control aria-labelSizing example input aria-describedbyinputGroup-sizing-default> /div> div classcontainer py-2> div classrow> div classcol> div classmb-3> input classform-control typefile idformFile webkitdirectory multiple/> /div> /div> /div> /div> /div> div classmodal-footer> button typebutton classbtn btn-secondary data-bs-dismissmodal>Close/button> button typebutton classbtn btn-primary>Save changes/button> /div> /div> /div>/div> script srchttps://cdn.jsdelivr.net/npm/chart.js>/script> script> var timeInterval 100; var maxTimeGraph 50; //in seconds var start 0; var end 1000;//*maxTimeGraph/timeInterval; var isWriteLock false; var isWaitforNotifyDone false; var arr ; for (var i start; i end; i++) { arr.push(i+1); } const labels arr; var data1 ; // for (var i start; i end; i++) { // data1.push(Math.floor(Math.random() * (100 - 0 + 1) + 0)); // } var data2 ; // for (var i start; i end; i++) { // data2.push(Math.floor(Math.random() * (100 - 0 + 1) + 0)); // } var data3 ; // for (var i start; i end; i++) { // data3.push(50); // } const data { labels: labels, datasets: { label: Chamber Temperature, backgroundColor: rgb(50, 100, 168), borderColor: rgb(50, 100, 168), data: data2, pointRadius: 0, },{ label: Specimen Temperature, backgroundColor: rgb(196, 73, 20), borderColor: rgb(196, 73, 20), data: data1, pointRadius: 0, },{ label: Target Specimen Temperature, backgroundColor: rgb(235, 180, 2), borderColor: rgb(235, 180, 2), data: data3, pointRadius: 0, } }; const config { type: line, data: data, options: { animation: false, scales: { x:{ display: false, // beginAtZero: true, // suggestedMax: 100 suggestedMin: 0, suggestedMax: 1000, // ticks: { // // forces step size to be 50 units // stepSize: 50 // } }, y: { suggestedMin: 0, suggestedMax: 50 } } } }; /script>!-- script> // var timeInterval 100; // var maxTimeGraph 50; //in seconds // var start 0; // var end 1000;//*maxTimeGraph/timeInterval; // var arr ; const explabels arr; // var data1 ; // for (var i start; i end; i++) { // data1.push(Math.floor(Math.random() * (100 - 0 + 1) + 0)); // } // var data2 ; // for (var i start; i end; i++) { // data2.push(Math.floor(Math.random() * (100 - 0 + 1) + 0)); // } // var data3 ; // for (var i start; i end; i++) { // data3.push(50); // } const expdata { labels: explabels, datasets: { label: Chamber Temperature, backgroundColor: rgb(50, 100, 168), borderColor: rgb(50, 100, 168), data: data2, pointRadius: 0, },{ label: Specimen Temperature, backgroundColor: rgb(196, 73, 20), borderColor: rgb(196, 73, 20), data: data1, pointRadius: 0, },{ label: Target Specimen Temperature, backgroundColor: rgb(235, 180, 2), borderColor: rgb(235, 180, 2), data: data3, pointRadius: 0, } }; const expconfig { type: line, data: expdata, options: { animation: false, scales: { x:{ display: false, // beginAtZero: true, // suggestedMax: 100 suggestedMin: 0, suggestedMax: 1000, // ticks: { // // forces step size to be 50 units // stepSize: 50 // } }, y: { suggestedMin: 0, suggestedMax: 50 } } } };/script> --> script> const dataChart new Chart( document.getElementById(dataChart), config ); // const expChart new Chart( // document.getElementById(expChart), // expconfig // ); /script> script> //update every interval // const element document.getElementById(content); // setInterval(function () {element.innerHTML + Hello}, timeInterval); /script> script> const button document.getElementById(connectBle); const sendCmdBtn document.getElementById(sendCmdBtn); const details document.getElementById(details); const updateTargetTempBtn document.getElementById(updateTargetTempBtn); const startTargetTempBtn document.getElementById(startTargetTempBtn); const stopTargetTempBtn document.getElementById(stopTargetTempBtn); const recordBtn document.getElementById(recordBtn); var connectionStatus false; var bledevice; var _uartRxDescriptor; var _uartRxCharacteristic; document.getElementById(objecttempvalue).innerHTML (0.00).toFixed(2) + ° C; document.getElementById(ambienttempvalue).innerHTML (0.00).toFixed(2) + ° C; document.getElementById(targettempvalue).innerHTML (0.00).toFixed(2) + ° C; async function disconnectBleDevice(){ await bledevice.gatt.disconnect(); button.innerHTML Connect; button.classList.remove(btn-danger); button.classList.add(btn-primary); connectionStatus false; } async function connectbleDevice(){ try { // Request the Bluetooth device through browser const device await navigator.bluetooth.requestDevice({ optionalServices: 6e400001-b5a3-f393-e0a9-e50e24dcca9e, device_information, acceptAllDevices: true, }); bledevice device; // Connect to the GATT server // We also get the name of the Bluetooth device here let deviceName device.gatt.device.name; const server await device.gatt.connect(); start(); isWriteLock false; // Getting the services we mentioned before through GATT server // const batteryService await server.getPrimaryService(battery_service); // const infoService await server.getPrimaryService(device_information); const uartService await server.getPrimaryService(6e400001-b5a3-f393-e0a9-e50e24dcca9e); // // Getting the current battery level // const batteryLevelCharacteristic await batteryService.getCharacteristic( // battery_level // ); // // Convert recieved buffer to number // const batteryLevel await batteryLevelCharacteristic.readValue(); // const batteryPercent await batteryLevel.getUint8(0); const uartRxCharacteristic await uartService.getCharacteristic( 6e400002-b5a3-f393-e0a9-e50e24dcca9e ); const uartTxCharacteristic await uartService.getCharacteristic( 6e400003-b5a3-f393-e0a9-e50e24dcca9e ); _uartRxCharacteristic uartRxCharacteristic; const dataCharacteristic await uartService.getCharacteristic( 6e400004-b5a3-f393-e0a9-e50e24dcca9e ); // const objectTempCharacteristic await uartService.getCharacteristic( // 6e400004-b5a3-f393-e0a9-e50e24dcca9e // ); // const ambientTempCharacteristic await uartService.getCharacteristic( // 6e400005-b5a3-f393-e0a9-e50e24dcca9e // ); // const targetTempCharacteristic await uartService.getCharacteristic( // 6e400006-b5a3-f393-e0a9-e50e24dcca9e // ); start(); // console.log(Reading Descriptor...); // _uartRxDescriptor await uartRxCharacteristic.getDescriptor(gatt.characteristic_user_description); // const value await _uartRxDescriptor.readValue(); // let decoder new TextDecoder(utf-8); // console.log(> Characteristic User Description: + decoder.decode(value)); // let encoder new TextEncoder(utf-8); // var value hi; // await _uartRxCharacteristic.writeValueWithoutResponse(encoder.encode(value)) // .then(_ > { // console.log(> Characteristic User Description changed to: + value); // }) // .catch(error > { // console.log(Error: + error); // }); // const pctrlCharacteristic await uartService.getCharacteristic( // 6e400007-b5a3-f393-e0a9-e50e24dcca9e // ); // const ictrlTempCharacteristic await uartService.getCharacteristic( // 6e400008-b5a3-f393-e0a9-e50e24dcca9e // ); // const dctrlTempCharacteristic await uartService.getCharacteristic( // 6e400009-b5a3-f393-e0a9-e50e24dcca9e // ); //const uartTxVal await uartRxCharacteristic.readValue(); //readvalue for read charactericstics only // console.log(uartTxVal); // // Getting device information // // We will get all characteristics from device_information // const infoCharacteristics await infoService.getCharacteristics(); // console.log(infoCharacteristics); // let infoValues ; // const promise new Promise((resolve, reject) > { // infoCharacteristics.forEach(async (characteristic, index, array) > { // // Returns a buffer // const value await characteristic.readValue(); // console.log(new TextDecoder().decode(value)); // // Convert the buffer to string // infoValues.push(new TextDecoder().decode(value)); // if (index array.length - 1) resolve(); // }); // }); // promise.then(() > { // console.log(infoValues); // Display all the information on the screen // use innerHTML // details.innerHTML ` // Device Name - ${deviceName}br /> // Battery Level - ${batteryPercent}%br /> // Device Information: // ul> // ${infoValues.map((value) > `li>${value}/li>`).join()} // /ul> // `; // }); console.log(connected to + deviceName); uartTxCharacteristic.startNotifications(); dataCharacteristic.startNotifications(); // ambientTempCharacteristic.startNotifications(); // targetTempCharacteristic.startNotifications(); // pctrlCharacteristic.startNotifications(); // ictrlTempCharacteristic.startNotifications(); // dctrlTempCharacteristic.startNotifications(); console.log(> Notifications started); uartTxCharacteristic.addEventListener(characteristicvaluechanged,handleNotifications); dataCharacteristic.addEventListener(characteristicvaluechanged,handleDataValueChanged); // objectTempCharacteristic.addEventListener(characteristicvaluechanged,handleObjectTempValueChanged); // ambientTempCharacteristic.addEventListener(characteristicvaluechanged,handleAmbientTempValueChanged); // targetTempCharacteristic.addEventListener(characteristicvaluechanged,handleTargetTempValueChanged); // pctrlCharacteristic.addEventListener(characteristicvaluechanged,handleNotifications); // ictrlTempCharacteristic.addEventListener(characteristicvaluechanged,handleNotifications); // dctrlTempCharacteristic.addEventListener(characteristicvaluechanged,handleNotifications); button.innerHTML Disconnect; button.classList.add(btn-danger); button.classList.remove(btn-primary); connectionStatus true; } catch (err) { console.log(err); alert(An error occured while fetching device details); } } // sendCmdBtn.addEventListener(click, async () > { // if (!_uartRxCharacteristic) { // return; // } // let encoder new TextEncoder(utf-8); // let value document.querySelector(#commandInput).value; // console.log(Sending command...); // await sleep(100); // await _uartRxCharacteristic.writeValueWithoutResponse(encoder.encode(value)) // .then(_ > { // console.log(> Command: + value); // console.log(> Encoded: + encoder); // }) // .catch(error > { // console.log(Error: + error); // }); // }); sendCmdBtn.addEventListener(click, async () > { // while(isWaitforNotifyDone){} if(isWriteLock || isWaitforNotifyDone){ return; } if (!_uartRxCharacteristic) { return; } let encoder new TextEncoder(utf-8); let value document.querySelector(#commandInput).value; console.log(Sending command...); // await sleep(100); isWriteLock true; await _uartRxCharacteristic.writeValue(encoder.encode(value)) .then(_ > { console.log(> Command: + value); isWriteLock false; isWaitforNotifyDone false; // console.log(> Encoded: + encoder); }) .catch(error > { console.log(Error: + error); }); console.log(send command); }); updateTargetTempBtn.addEventListener(click, async () > { // while(isWaitforNotifyDone){} if(isWriteLock || isWaitforNotifyDone){ return; } if (!_uartRxCharacteristic) { return; } let encoder new TextEncoder(utf-8); let value 20, + document.querySelector(#targetTempInput).value; console.log(Sending command...); isWriteLock true; // await sleep(100); await _uartRxCharacteristic.writeValue(encoder.encode(value)) .then(_ > { console.log(> Command: + value); isWriteLock false; isWaitforNotifyDone false; // console.log(> Encoded: + encoder); }) .catch(error > { console.log(Error: + error); }); console.log(send command); }); startTargetTempBtn.addEventListener(click, async () > { // while(isWaitforNotifyDone){} if(isWriteLock || isWaitforNotifyDone){ return; } if (!_uartRxCharacteristic) { return; } let encoder new TextEncoder(utf-8); console.log(Sending command...); isWriteLock true; // await sleep(100); await _uartRxCharacteristic.writeValue(encoder.encode(10)) .then(_ > { isWriteLock false; isWaitforNotifyDone false; // console.log(> Command: + value); // console.log(> Encoded: + encoder); }) .catch(error > { console.log(Error: + error); }); console.log(send command); }); stopTargetTempBtn.addEventListener(click, async () > { // while(isWaitforNotifyDone){} if(isWriteLock || isWaitforNotifyDone){ return; } if (!_uartRxCharacteristic) { return; } let encoder new TextEncoder(utf-8); console.log(Sending command...); // await sleep(100); isWriteLock true; await _uartRxCharacteristic.writeValue(encoder.encode(11)) .then(_ > { isWriteLock false; isWaitforNotifyDone false; // console.log(> Command: + value); // console.log(> Encoded: + encoder); }) .catch(error > { console.log(Error: + error); }); console.log(send command); }); button.addEventListener(click, async () > { if(connectionStatus false) connectbleDevice(); else disconnectBleDevice(); }); async function sleep(milliseconds) { const date Date.now(); let currentDate null; do { currentDate Date.now(); } while (currentDate - date milliseconds); } function handleNotifications(event) { let value event.target.value; let a ; // Convert raw data bytes to hex values just for the sake of showing something. // In the real world, youd use data.getUint8, data.getUint16 or even // TextDecoder to process raw data bytes. for (let i 0; i value.byteLength; i++) { a.push(0x + (00 + value.getUint8(i).toString(16)).slice(-2)); } // console.log(new TextDecoder().decode(value)); //console.log(value.getUint8(0)); const readvalue document.getElementById(readvalue); // readvalue.innerHTML value.getUint8(0); //console.log(> + a.join( )); } function getFloat(array) { var view new DataView(new ArrayBuffer(8)); array.forEach(function (b, i) { view.setUint8(i, b); }); return view.getFloat64(0); } function valueToDouble(value){ let data ; for (let i 0; i value.byteLength; i++) { data.push(value.getUint8(i)); } data data.reverse(); // var i 0, result ; // while (i data.length) { // result.push(getFloat(data.slice(i, i + 8))); // i + 8; // } return getFloat(data.slice(0,8)); } var objectTempCounter 0.0; var objectTempNumberAvg 10.0; var objectTempAvg 0.0; function handleDataValueChanged(event) { isWaitforNotifyDone true; let value event.target.value; // console.log(new TextDecoder().decode(value)) var data new TextDecoder().decode(value); const dataArray data.split(|); var objectTemp parseFloat(dataArray0).toFixed(2); if(objectTempCounter>objectTempNumberAvg){ document.getElementById(objecttempvalue).innerHTML parseFloat(objectTempAvg/(objectTempNumberAvg+1)).toFixed(2) + ° C; objectTempCounter 0; objectTempAvg 0; } else{ objectTempAvg + parseFloat(objectTemp); objectTempCounter++; } document.getElementById(ambienttempvalue).innerHTML parseFloat(dataArray1).toFixed(2) + ° C; document.getElementById(targettempvalue).innerHTML parseFloat(dataArray2).toFixed(2) + ° C; // readvalue.innerHTML valuedouble.toFixed(2) + ° C; if(data1.length>1000) data1.shift(); if(Math.abs(parseFloat(dataArray0)) > parseFloat(data1data1.length - 1) + 100) data1.push(parseFloat(data1data1.length - 1)); else data1.push(parseFloat(dataArray0)); if(data2.length>1000) data2.shift(); // console.log(Math.abs(parseFloat(dataArray1) - parseFloat(data2data2.length - 1)) + 100) if(Math.abs(parseFloat(dataArray1) - parseFloat(data2data2.length - 1)) > parseFloat(data1data1.length - 1) + 100) data2.push(parseFloat(data2data2.length - 1)); else data2.push(parseFloat(dataArray1)); if(data3.length>1000) data3.shift(); data3.push(parseFloat(dataArray2)); isWaitforNotifyDone false; // dataChart.update(); } function handleObjectTempValueChanged(event) { isWaitforNotifyDone true; let value event.target.value; const readvalue document.getElementById(objecttempvalue); var valuedouble valueToDouble(value); readvalue.innerHTML valuedouble.toFixed(2) + ° C; if(data1.length>1000) data1.shift(); data1.push(valuedouble); isWaitforNotifyDone false; // dataChart.update(); } function handleAmbientTempValueChanged(event) { isWaitforNotifyDone true; let value event.target.value; const readvalue document.getElementById(ambienttempvalue); var valuedouble valueToDouble(value); readvalue.innerHTML valuedouble.toFixed(2) + ° C; if(data2.length>1000) data2.shift(); data2.push(valuedouble); isWaitforNotifyDone false; } var targettemptemp 0; function handleTargetTempValueChanged(event) { isWaitforNotifyDone true; let value event.target.value; const readvalue document.getElementById(targettempvalue); var valuedouble valueToDouble(value); readvalue.innerHTML valuedouble.toFixed(2) + ° C; if(targettemptemp ! valuedouble.toFixed(2)){ targetTempInput.value valuedouble.toFixed(2); targettemptemp valuedouble.toFixed(2); } if(data3.length>1000) data3.shift(); data3.push(valuedouble); isWaitforNotifyDone false; } const interval setInterval(function() { dataChart.update(); }, 20); var isRecording false; var recordDataString ; recordBtn.addEventListener(click, async () > { if(!isRecording){ recordBtn.innerHTML Stop Recording; console.log(Start recording) isRecording true; } else{ recordBtn.innerHTML Start Recording download(recordDataString, data, .csv); isRecording false; } }); setInterval(function () { if(isRecording){ var timeDiff new Date() - startTime; recordDataString + String(timeDiff) + , + String(data1data1.length - 1) + , + String(data2data2.length - 1) + , + String(data3data3.length - 1) + \n } else{ recordDataString ; } }, 10); // Function to download data to a file function download(data, filename, type) { var file new Blob(data, {type: type}); if (window.navigator.msSaveOrOpenBlob) // IE10+ window.navigator.msSaveOrOpenBlob(file, filename); else { // Others var a document.createElement(a), url URL.createObjectURL(file); a.href url; a.download filename; document.body.appendChild(a); a.click(); setTimeout(function() { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 0); } } /script> script> var startTime, endTime; function start() { startTime new Date(); }; function end() { endTime new Date(); var timeDiff endTime - startTime; //in ms // strip the ms timeDiff / 1000; // get seconds var seconds Math.round(timeDiff); // console.log(seconds + seconds); elapsedTime.innerHTML seconds + seconds; } setInterval(function () { end(); }, 1000); /script> script> feather.replace() /script> script srchttps://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js integritysha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2 crossoriginanonymous>/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]