Help
RSS
API
Feed
Maltego
Contact
Domain > play-endless-web.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-11-28
99.86.102.11
(
ClassC
)
2025-11-29
3.163.24.79
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Sat, 29 Nov 2025 18:29:39 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://play-endless-web.com/X-Cache: Redirect from cloudfrontVia: 1.1 8fa8de0101a760f7ceb25e90c3bcd252.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: S8kxt2LRYaQsK9V10io3bNxEY24Yr_IXKbRFH2qiopn_wyvRkTpp7A html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 23614Connection: keep-aliveLast-Modified: Mon, 29 May 2023 21:06:10 GMTX-Amz-Server-Side-Encryption: AES256Accept-Ranges: bytesServer: AmazonS3Date: Sat, 29 Nov 2025 18:29:40 GMTCache-Control: max-age0Etag: 0fda7135f3515bf5f7835245cb19e99aVia: 1.1 d220e3f3d93439a8c69225156c6ae800.cloudfront.net (CloudFront)Cross-Origin-Embedder-Policy: require-corpCross-Origin-Opener-Policy: same-originX-Clacks-Overhead: GNU Terry PratchettX-Cache: RefreshHit from cloudfrontX-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: wZTIGuZGSUUm0m9jgHlS75OukETgqX6sbB_eaMw8o7xUudhIfscCsA !doctype HTML>html langen-us> head> meta charsetutf-8> meta nameviewport contentuser-scalable0> !-- huh, this doesnt work because the initial width is wrong, we want to disable meta nameviewport contentwidthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0> --> !-- some privacy-respecting analytics to make sure people are able to use the site--> script async defer data-domainplay-endless-web.com srchttps://plausible.io/js/plausible.js>/script> title>Endless Sky/title> style> html { width: 100%; height: 100%; } @font-face { font-family: Ubuntu; src: url(Ubuntu-Regular-b3488e8486d2b4e3a0666997f91c7ed9.ttf); } body { display: flex; flex-direction: column; width: 100%; height: 100%; font-family: Ubuntu, times new roman, times, roman, serif; margin: 0; padding: 0; overflow: hidden; } .ugly-header a { appearance: button; text-decoration: none; color: initial; } button, .ugly-header a { background-color: rgba(24, 24, 24, 1); border-width: 1px; color: rgb(115, 115, 115); border-style: solid; border-top-color: rgb(80, 80, 80); border-right-color: rgb(80, 80, 80); border-bottom-color: rgb(50, 50, 50); border-left-color: rgb(50, 50, 50); font-family: Ubuntu, times new roman, times, roman, serif; font-size: 14px; padding: 1px 6px; outline: none; } button:hover, .ugly-header a:hover { color: rgb(215, 215, 215); } .touch-controls { display: none; flex-direction: row; justify-content: space-between; pointer-events: none; user-select: none; /*(position: absolute;*/ bottom: 10px; left: 10px; right: 10px; } .touch-control { pointer-events: auto; background-color:rgba(0, 200, 0, 0.5); border-radius: 5px; text-align: center; font-size: 40px; width: 40px; } h1, h2, h3 { color: rgb(115, 115, 115); } #canvas { flex: 1; width: 100%; min-height: 10%; } .save-games { display: flex; flex-direction: column; } .download-button { width: 100% } .load-button { margin: 20px; } .status { text-align: center; min-height: 1em; } #output { background-color: rgba(24, 24, 24, 0); color: rgb(115, 115, 115); padding: 0 1em; width: 80%; } .loading, .error { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; background-color: black; display: flex; flex-direction: column; align-items: center; justify-content: center; } .error { z-index: -2; color: red; } .error * { margin: 10px; } .title { color: white; text-transform: uppercase; font-size: 64px; color: #6e6e6e; } .progress-bar-section { font-family: Ubuntu, times new roman, times, roman, serif; color: #4e4e4e; text-align: center; } .progress-bar { width: 400px; height: 20px; background-color: #dddddd; } .progress { height: 100%; width: 1%; transition: width .2s; background-color: #6e6e6e; } .debug { position: absolute; top: 0; bottom: 0; left: 0; right: 70%; background-color: rgba(48, 48, 48, 0.5); backdrop-filter: blur(4px) saturate(150%); z-index: 2; display: flex; flex-direction: column; resize: horizontal; overflow: auto; display: none; padding: 0 10px; color: rgb(115, 115, 115); border: solid 1px rgb(100, 100, 100); } .ugly-header { padding-left: 2px; z-index: 2; } audio { display: none; } /style> /head> body> div classerror> button>Hide error/button> Please report this error on a hrefhttps://github.com/thomasballinger/endless-web>GitHub/a> or the #third-party-chat room of a hrefhttps://discord.gg/ZeuASSx>the Endless Sky Discord/a>. div>/div> /div> div classloading> audio controls autoplay src./loading-cf5a8e976fc93bec4528b0e6115b6aa0.mp3>/audio> div classtitle>E·n·d·l·e·s·s W·e·b/div> div classprogress-bar-section> p classmusic-text>click anywhere to play loading music/p> p classprogress-text>Downloading data.../p> div classprogress-bar> div classprogress>/div> /div> /div> button classload-button disabled hidden>Play/button> h2 classplugin-editor-header styledisplay: none;>Upload Plugins/h2> div classplugin-editor-upload>/div> h2 classexternal-plugins-header styledisplay: none;>Published Plugins/h2> div classplugins-list>Plugins/div> /div> div classdebug> h1>Debug panel/h1> p> press backslash to hide /p> button onclickdocument.querySelector(.file-selector).click(); />upload saved game/button> button classshow-save-games>Show save game files for download/button> div classsave-games>/div> button classshow-plugins-to-download>Show plugins for download/button> div classplugins-to-download>/div> input typefile styledisplay: none; classfile-selector multiplemultiple> div classstatus>Status goes here/div> textarea idoutput rows8>stdout output goes here/textarea> /div> div classugly-header> button classdismiss-upload>hide top bar/button> button onclickdocument.querySelector(.file-selector).click();>upload saved game/button> button classtoggle-debug>download saved games/button> button classstop-music>start music/button> a hrefhttps://github.com/thomasballinger/endless-web target_blank>Endless Web on GitHub/a> a hrefhttps://github.com/endless-sky/endless-sky target_blank>Endless Sky on GitHub/a> a hrefhttps://github.com/thomasballinger/endless-web/issues target_blank>report bug/a> !-- TODO hide for non-mobile browsers --> button classshow-touch-controls>show touch controls/button> /div> canvas idcanvas oncontextmenuevent.preventDefault()>/canvas> div classtouch-controls> div styledisplay: inline-flex;> div classtouch-control idleft-arrow-control>←/div> div classtouch-control idup-arrow-control>↑/div> div classtouch-control idright-arrow-control>→/div> /div> div classtouch-control idesc-control stylewidth: 80px;>esc/div> div styledisplay: inline-flex;> div classtouch-control idj-control>J/div> div classtouch-control idm-control>M/div> div classtouch-control idl-control>L/div> /div> div styledisplay: inline-flex;> div classtouch-control idtab-control stylewidth: 80px>tab/div> div classtouch-control idw-control>W/div> div classtouch-control idq-control>Q/div> /div> /div> script> if (window.location.hostname play-endless-sky.com) { const loud document.createElement(div); loud.innerHTML `h1>play-endless-sky.com is deprecated, please use play-endless-web.com (a hrefhttps://play-endless-web.com/>play-endless-web.com/a>) insteadh1> h3>You will need to migrate your save files. Download them with the download saved games button above, and upload them to play-endless-web to play with them/h3>`; document.querySelector(.ugly-header).appendChild(loud); } function simulateKeyEvent(eventType, keyCode, charCode) { var e document.createEventObject ? document.createEventObject() : document.createEvent(Events); if (e.initEvent) e.initEvent(eventType, true, true); e.keyCode keyCode; e.which keyCode; e.charCode charCode; // Dispatch directly to Emscriptens html5.h API (use this if page uses emscripten/html5.h event handling): if (typeof JSEvents ! undefined && JSEvents.eventHandlers && JSEvents.eventHandlers.length > 0) { for(var i 0; i JSEvents.eventHandlers.length; ++i) { if ((JSEvents.eventHandlersi.target Modulecanvas || JSEvents.eventHandlersi.target window) && JSEvents.eventHandlersi.eventTypeString eventType) { JSEvents.eventHandlersi.handlerFunc(e); } } } else { // Dispatch to browser for real (use this if page uses SDL or something else for event handling): Modulecanvas.dispatchEvent ? Modulecanvas.dispatchEvent(e) : Modulecanvas.fireEvent(on + eventType, e); } } // element id, keycode, minDuration up-arrow-control, 38, false, left-arrow-control, 37, false, right-arrow-control, 39, false, l-control, 76, true, j-control, 74, true, m-control, 77, false, esc-control, 27, false, tab-control, 9, true, w-control, 87, true, q-control, 81, true, .forEach((name, num, minDuration) > { document.querySelector(#+name).addEventListener(touchstart, (e) > { simulateKeyEvent(keydown, num, 0); }); document.querySelector(#+name).addEventListener(touchend, (e) > { if (minDuration) { setTimeout(() > { simulateKeyEvent(keyup, num, 0); }, 100) } else { simulateKeyEvent(keyup, num, 0); } }); }); window.oncontextmenu function(event) { event.preventDefault(); event.stopPropagation(); return false; }; /script> !-- these are GPLv3 licensed libraries that we should download instead of hotlinking at some point --> script srchttps://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.js integritysha512-18QiVdJv36r1ryb5mr1lFpm4wZMORhvGgvz0mHQllOmx3NmSZkYwWuDcecFByaRVWqiQ0F/FZC5pCBMuy8IfkQ crossoriginanonymous>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/jszip-utils/0.1.0/jszip-utils.js integritysha512-vzp9X4pwJHRiGSEH692sqmRe5R8OQNKSCe1zg38GQoNUGJtnPrwhwKF3lbaFZMsT8ZQ3ppZ8tlLqkJGosi5/CA crossoriginanonymous>/script> !-- These naive scripts create globals so load order matters --> script srccached-resource-33b17790cfecc77c59843f3faa137dfc.js>/script> script srcsave-games-418778f7fb8c81c8d569200f414f5a42.js>/script> script srcplugins-995f5130757194e168d707c1e3de06f9.js>/script> script srcdataversion-f55b3f3414259ef3c0187c2cd61acbf4.js>/script> script typetext/javascript> function idbReady() { const isSafari !navigator.userAgentData && /Safari\//.test(navigator.userAgent) && !/Chrom(e|ium)\//.test(navigator.userAgent); // No point putting other browsers or older versions of Safari through this mess. if (!isSafari || !indexedDB.databases) return Promise.resolve(); let intervalId; return new Promise((resolve) > { const tryIdb () > indexedDB.databases().finally(resolve); intervalId setInterval(tryIdb, 100); tryIdb(); }).finally(() > clearInterval(intervalId)); } let musicPlayerResolve; const musicPlayingPromise new Promise(r > {musicPlayerResolve r}); let readyToLoadResolve; const readyToLoadPromise new Promise(r > {readyToLoadResolve r}); function onThemeMusicPlay() { document.querySelector(.stop-music).innerText stop music; document.querySelector(.music-text).style.visibility hidden; musicPlayerResolve(); } document.querySelector(audio).addEventListener(play, onThemeMusicPlay); document.querySelector(.stop-music).addEventListener(click, () > { const button document.querySelector(.stop-music); if (button.innerText stop music) { button.innerText start music document.querySelector(audio).pause(); } else if (button.innerText start music) { button.innerText stop music; document.querySelector(audio).play(); } }); document.querySelector(.loading).addEventListener(click, () > { document.querySelector(audio).play(); }); function toggleDebugWindow() { const debug document.querySelector(.debug); if (debug.style.display none || debug.style.display ) { debug.style.display initial; } else { debug.style.display none saveGamesList.innerHTML } } window.addEventListener(keydown, (e) > { if (e.code Backslash) { e.preventDefault(); toggleDebugWindow(); } if (e.code KeyI && e.metaKey && e.altKey) { // capture at the top level so meta-alt-i still opens dev console e.stopPropagation() } }, {capture: true}) document.querySelector(.toggle-debug).addEventListener(click, toggleDebugWindow); const saveGamesList document.querySelector(.save-games); const showSaveGamesButton document.querySelector(.show-save-games); showSaveGamesButton.addEventListener(click, () > showSaveGames(saveGamesList)); const pluginsToDownloadList document.querySelector(.plugins-to-download); const pluginsToDownloadButton document.querySelector(.show-plugins-to-download); pluginsToDownloadButton.addEventListener(click, () > showPluginsForDownload(pluginsToDownloadList)); const progressBar document.querySelector(.progressBar); const progress document.querySelector(.progress); const progressText document.querySelector(.progress-text); function updateProgress(numerator, denominator, usingCache) { progress.style.width `${numerator / denominator * 100}%`; const soFar (numerator / 1000000).toFixed(1); const total (denominator / 1000000).toFixed(1); progressText.textContent `Downloading data (${soFar}MB / ${total}MB)` if (numerator denominator) { progress.style.transition none; if (usingCache) { progressText.textContent Using cached data. } else { progressText.textContent Downloading complete. } } } // Prevents known errors which fire thousands of times from making the console hard to use function errFilter(text) { // ignore errors about missing image frames if (/missing frame/.exec(text)) text null; } ...document.querySelectorAll(.file-selector).map(el > { el.addEventListener(change, async function() { // write every file uploaded to the filesystem for (const file of ...this.files) { const data new Uint8Array(await file.arrayBuffer()); const path saves/ + file.name; const stream FS.open(path, w+); FS.write(stream, data, 0, data.length, 0); FS.close(stream); } // syncfs(false) means save to IndexedDB await new Promise((resolve) > FS.syncfs(false, resolve)); }); }); document.querySelector(.dismiss-upload).addEventListener(click, function() { this.parentNode.style.display none; window.dispatchEvent(new Event(resize)); }); document.querySelector(.show-touch-controls).addEventListener(click, function() { document.querySelector(.touch-controls).style.display inline-flex; window.dispatchEvent(new Event(resize)); }); let runtimeInitializedResolve; const runtimeInitializedPromise new Promise(r > {runtimeInitializedResolve r}); var Module { print: (function(text) { var element document.getElementById(output); if (element) element.value stdout output goes here; // clear browser cache return function(text) { if (arguments.length > 1) text Array.prototype.slice.call(arguments).join( ); console.log(text); if (element) { element.value + text + \n; element.scrollTop element.scrollHeight; // focus on bottom } }; })(), printErr: function(text) { text errFilter(text) if (text) console.error(text); }, setStatus: (function() { const element document.querySelector(.status); if (element) element.textContent status goes here; return function setStatus(text) { element.textContent text; }; })(), canvas: document.getElementById(canvas), getPreloadedPackage: function() { return Module.downloadedData; }, noInitialRun: true, onRuntimeInitialized: () > {console.log(runtime initialized); runtimeInitializedResolve();} }; // returns true if this browser, otherwise a string for an error message. function supported() { const gl document.createElement(canvas).getContext(webgl2); if (!gl) { return your browser does not support WebGL2.; } /* for when compiled with threads if (typeof crossOriginIsolated ! undefined && crossOriginIsolated false) { return the page is not crossOriginIsolated! see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy; } if (typeof Atomics undefined) { return your browser does not support Atomics, required for the threaded version of Endless Web. There should be a version without it, Ill work on it.; } */ return true; } async function addMainScriptTag(data) { // dynamically loaded so we can load the data ourselves Module.downloadedData data; const tag document.createElement(script); tag.src endless-sky-938ba8e27831ab8e3f4affdb55eb9f6a.js; document.body.appendChild(tag); } function hideError() { document.querySelector(.error).style.zIndex -2; } function showError(err) { document.querySelector(.error div).innerText `${err.message}\n\n${err.stack}`; document.querySelector(.error).style.zIndex 2; } function onRejectedPromise(errEvent) { showError(errEvent.reason); } function onError(errEvent) { showError(errEvent.error); } window.addEventListener(error, onError); window.addEventListener(unhandledrejection, onRejectedPromise); document.querySelector(.error button).addEventListener(click, hideError); async function main() { const why supported(); if (why ! true) { progressText.textContent `Not supported because ${why}` return; } await idbReady(); const showRemotePlugins (new URL(location)).searchParams.has(plugins); let loadButtonResolve const loadButtonPromise new Promise((r) > loadButtonResolve r); const loadButton document.querySelector(.load-button); const pluginEditor (new URL(location)).searchParams.has(plugins); if (showRemotePlugins || pluginEditor) { loadButton.hidden false; loadButton.disabled false; loadButton.addEventListener(click, loadButtonResolve); } else { // just load immediately loadButtonResolve(); } // If no dataversion available, force download with date string const versionString typeof endlessSkyDataVersion undefined ? Date() : endlessSkyDataVersion; // If no data size available, dunno const dataSize typeof endlessSkyDataSize undefined ? 0 : endlessSkyDataSize; data await (new CachedResource(endless-sky-83286b7d17becf1a9259a31aeec39d6d.data, preloadedData)).get(dataSize, versionString, updateProgress); await Promise.race( musicPlayingPromise, new Promise(resolve > setTimeout(resolve, 2000)) ); // too late, you cant enable music during the load when the browser locks up document.querySelector(.music-text).style.visibility hidden; await addMainScriptTag(data); await runtimeInitializedPromise; FS.mkdir(plugins); FS.mkdir(saves); if (showRemotePlugins) { let remotePlugins; // catch mostly for offline dev try { remotePlugins await (await fetch(https://raw.githubusercontent.com/EndlessSkyCommunity/endless-sky-plugins/master/generated/plugins.json)).json(); } catch (e) { window.foo e; if (e instanceof TypeError && e.message Failed to fetch) { console.log(maybe the GitHub plugins link is broken, but more likely youre offline); // TODO check connection status? } else throw e; } if (remotePlugins) { document.querySelector(.external-plugins-header).style.display ; showPlugins(document.querySelector(.plugins-list), remotePlugins); } } if (pluginEditor) { document.querySelector(.plugin-editor-header).style.display ; showPluginUpload(document.querySelector(.plugin-editor-upload)); } await loadButtonPromise; loadButton.style.display none; loadButton.disabled true; document.querySelector(.loading).style.zIndex -1; progressText.textContent progressText.textContent + Loading...; // yield to event loop so that button disappears immediately await new Promise(r > setTimeout(r, 1)); // important to hide to avoid stealing focus document.querySelector(.plugin-editor-upload).style.display none; Module.callMain(); } main(); /script> script> document.addEventListener(touchmove, e > { if (e.touches.length > 1) { e.preventDefault(); } }, {passive: false}) /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
]