UNPKG

surku

Version:

A mutation-based general purpose fuzzer.

69 lines (60 loc) 1.9 kB
const fs = require("fs"); const http = require("http"); const Surku = require("../Surku.js"); const Demo = new Surku(); console.error("Initializing new Surku with default config."); let timeout = 10; let mime = "image/png"; let tagtype = "img"; const port = 1337; let sampleFolder; if (process.argv[2]) sampleFolder = process.argv[2]; if (process.argv[3]) mime = process.argv[3]; if (process.argv[4]) timeout = process.argv[4]; if (mime.indexOf("video/") === 0) tagtype = "video"; if (!fs.existsSync(sampleFolder)) { console.log("You must provide sample folder."); } const clientFile = `<html>` + `<script>` + `timeout=setTimeout(newTestCase,${timeout});` + `function newTestCase(){` + `clearTimeout(timeout);` + `var target=document.getElementById("test");` + `target.src="/img${new Date().getTime()}";` + `if(target.tagName=="VIDEO"){target.play();};` + `timeout=setTimeout(newTestCase,${timeout});` + `};` + `</script>` + `<body>` + `<${tagtype} id="test" autoplay="true"` + `src="/img1"` + `onended="newTestCase"` + `onload="newTestCase"` + `onerror="newTestCase">` + `</body>` + `</html>`; console.error(`Checking the sample folder: ${sampleFolder}`); const files = fs.readdirSync(sampleFolder); console.error(`Found ${files.length} sample files`); const server = http.createServer((request, response) => { if (request.url === "/") { response.writeHead(200, { "Content-Type": "text/html" }); response.write(clientFile); response.end(); } else if (request.url.indexOf("/img") === 0) { response.writeHead(200, { "Content-Type": mime }); response.write( Demo.generateTestCase( fs.readFileSync( `${sampleFolder}/${files[Math.floor(Math.random() * files.length)]}` ) ) ); response.end(); } }); server.listen(port, (err) => { console.log(`Server listening port :${port}`); });