Last active
September 5, 2022 23:13
-
-
Save kolumb/ca9fe2614d2215a0c5c7bdd237054d6f to your computer and use it in GitHub Desktop.
Node.js Raw Request and IP Log Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const http = require('http'); | |
const fs = require('fs'); | |
// const os = require('os'); | |
// console.log(os.networkInterfaces()) | |
// const net = require('net'); | |
// console.log(net.isIP("123.123.123.333")) | |
// http://localhost:8000/echo/server/index.php?what=is&this=donno | |
// fetch("127.0.0.1:8000/api/endpoint/",{method: "POST", body:"text"}).then(data=>data.text().then(console.log)) | |
// https://canyouseeme.org/ | |
// https://reqbin.com/ | |
const handleFileWriteErr = (err) => { | |
if(err) console.log(err) | |
// console.log("File was successfully written!") | |
} | |
// const logObj = (obj) => { | |
// if (!obj) return | |
// console.log("\n" + obj.constructor?.name + ":") | |
// console.log(Object.keys(obj).join()) | |
// const prototype = Object.getPrototypeOf(obj) | |
// if (prototype && Object.keys(prototype).length > 0) { | |
// logObj(prototype) | |
// } | |
// } | |
const requestListener = (req, res) => { | |
if (req.url === "/favicon.ico") { | |
res.end() | |
return | |
} | |
console.log(" ====== got request ======"); | |
// logObj(req) | |
// console.log(req.method) | |
// console.log(req.socket) | |
// console.log(req.headers) | |
// console.log(req.connection) | |
// console.log(req.connection.socket) | |
// https://github.com/supercharge/request-ip/blob/main/src/request.ts | |
if (req.headers["x-client-ip"]) console.log("x-client-ip", req.headers["x-client-ip"]) | |
if (req.headers["x-real-ip"]) console.log("x-real-ip", req.headers["x-real-ip"]) | |
if (req.headers["cf-connecting-ip"]) console.log("cf-connecting-ip", req.headers["cf-connecting-ip"]) | |
if (req.headers["fastly-client-ip"]) console.log("fastly-client-ip", req.headers["fastly-client-ip"]) | |
if (req.headers["true-client-ip"]) console.log("true-client-ip", req.headers["true-client-ip"]) | |
if (req.headers["x-cluster-client-ip"]) console.log("x-cluster-client-ip", req.headers["x-cluster-client-ip"]) | |
if (req.headers["x-forwarded-for"]) console.log("x-forwarded-for", req.headers["x-forwarded-for"]) | |
if (req.headers["x-forwarded"]) console.log("x-forwarded", req.headers["x-forwarded"]) | |
if (req.headers["forwarded-for"]) console.log("forwarded-for", req.headers["forwarded-for"]) | |
if (req.headers["forwarded"]) console.log("forwarded", req.headers["forwarded"]) | |
if (req.connection) { | |
if (req.connection._peername) { | |
console.log("== connection._peername:") | |
console.log(" ", req.connection._peername.address) | |
console.log(" ", req.connection._peername.family) | |
console.log(" ", req.connection._peername.port) | |
} | |
console.log("connection.remoteAddress", req.connection.remoteAddress) | |
if (req.connection.socket) { | |
console.log("connection.socket.remoteAddress", req.connection.socket.remoteAddress) | |
} | |
} | |
res.writeHead(200); | |
res.write(`${req.method} ${req.url} HTTP/${req.httpVersion}\n`) | |
let rawRequest = "" | |
for(let i = 0; i < req.rawHeaders.length; i+=2) { | |
rawRequest += `${req.rawHeaders[i]}: ${req.rawHeaders[i+1]}\n` | |
res.write( `${req.rawHeaders[i]}: ${req.rawHeaders[i+1]}\n`) | |
} | |
let rawBody = '' | |
req.on("data", chunk => { | |
// fs.appendFileSync("log.txt", `got data chunk: "${chunk}"\n`, handleFileWriteErr) | |
// res.write("/chunk\\\n") | |
// res.write(chunk) | |
// res.write("\n\\chunk/\n") | |
console.log("/chunk\\") | |
console.log(chunk) | |
console.log("\\chunk/") | |
rawBody += chunk | |
}) | |
req.on("end", chunk => { | |
// fs.appendFileSync("log.txt", `Whole body is: "${data}"\n`, handleFileWriteErr) | |
fs.appendFileSync("log.txt", `____/ Got request from IP: ${req.connection.remoteAddress} \\____\n`, handleFileWriteErr) | |
fs.appendFileSync("log.txt", `${req.method} ${req.url} HTTP/${req.httpVersion}\n`, handleFileWriteErr) | |
fs.appendFileSync("log.txt", rawRequest, handleFileWriteErr) | |
fs.appendFileSync("log.txt", "\n", handleFileWriteErr) | |
fs.appendFileSync("log.txt", rawBody, handleFileWriteErr) | |
fs.appendFileSync("log.txt", "\n\\ = = = = = = = = = = = = = = = = = = = /\n", handleFileWriteErr) | |
res.write("\n") | |
res.write(rawBody || (req.method === "GET" ? "GET request can't have a body" : "No body was provided.")) | |
res.write("\n") | |
res.end('Done!'); | |
}) | |
/* | |
// https://gist.github.com/saitonakamura/d51aa672c929e35cc81fa5a0e31f12a9#gistcomment-3437616 | |
const replaceCircular5 = function(val, cache) { | |
cache = cache || new WeakSet(); | |
if (val && typeof(val) === 'object') { | |
if (cache.has(val)) return '[Circular]'; | |
cache.add(val); | |
const obj = (Array.isArray(val) ? [] : {}); | |
for(const idx in val) { | |
obj[idx] = replaceCircular5(val[idx], cache); | |
} | |
cache.delete(val); | |
return obj; | |
} | |
return val; | |
}; | |
fs.appendFileSync("log.txt", JSON.stringify(replaceCircular5(req), null, 2) + "\n", handleFileWriteErr) | |
*/ | |
} | |
const server = http.createServer(requestListener) | |
server.listen(8000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment