Skip to content

Instantly share code, notes, and snippets.

@kolumb
Last active September 5, 2022 23:13
Show Gist options
  • Save kolumb/ca9fe2614d2215a0c5c7bdd237054d6f to your computer and use it in GitHub Desktop.
Save kolumb/ca9fe2614d2215a0c5c7bdd237054d6f to your computer and use it in GitHub Desktop.
Node.js Raw Request and IP Log Script
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