Skip to content

Commit

Permalink
Improve HTTP request info calculation
Browse files Browse the repository at this point in the history
  • Loading branch information
myndzi committed Jul 9, 2024
1 parent 09965de commit 5e28a83
Show file tree
Hide file tree
Showing 7 changed files with 320 additions and 102 deletions.
66 changes: 40 additions & 26 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,43 @@ function getCallsite(thing) {
return thing.__callSite;
};

function getProtocol(req, socket) {
if (typeof req.protocol === 'string') return req.protocol;
var agent = req.agent;
if (typeof agent.protocol === 'string') return agent.protocol;
var ctor = socket.constructor && socket.constructor.name;
return ctor === 'CleartextStream' ? 'https:' : 'http:';
}
function getHost(req) {
if (typeof req.host === 'string') return req.host;
if (typeof req.getHeader !== 'function') return 'unknown';
var hostHeader = req.getHeader('host');
if (typeof hostHeader === 'string') return hostHeader;
return 'unknown';
}
function getPort(socket, host, protocol) {
if (typeof socket.remotePort === 'number') return socket.remotePort;
var match = host.match(/:(\d+)$/);
if (match) {
var port = parseInt(match[1], 10);
if (!isNaN(match)) return port;
}
return protocol === 'https:' ? 443 : 80;
}
function getHttpInfo(socket) {
var req = socket._httpMessage || {};
var method = req.method || 'unknown';
var protocol = getProtocol(req, socket);
var host = getHost(req);
var port = getPort(socket, host, protocol);
var path = req.path || 'unknown';
host = host.replace(/:\d+$/, '');
if ((protocol === 'https:' && port !== 443) || (protocol === 'http:' && port !== 80)) {
host += ':' + port;
}
return { method: method, protocol: protocol, host: host, port: port, path: path };
}

function dump() {
log('info', '[WTF Node?] open handles:');

Expand Down Expand Up @@ -560,32 +597,9 @@ function dump() {
} else {
log('info', ' - unknown socket');
}
if(s._httpMessage) {
var req = s._httpMessage || {};
var agent = req.agent || {};
var method = req.method || 'unknown';
var host = req.host || req.getHeader('host').replace(/:\d+$/, '');
var path = req.path || 'unknown';
var protocol = req.protocol || agent.protocol || (function () {
var ctor = s.constructor && s.constructor.name;
return ctor === 'CleartextStream' ? 'https:' : 'http:';
})() || 'unknown';
var port = s.remotePort || (protocol === 'https:' ? 443 : 80);

if (protocol === 'https:' && port !== 443) {
host += ':' + port;
} else if (protocol === 'http:' && port !== 80) {
host += ':' + port;
}

if (host.indexOf(':') > -1) {
if (/:443/.test(host) && protocol === 'https:') {
host = host.replace(/:443$/, '');
} else if (/:80/.test(host) && protocol === 'http:') {
host = host.replace(/:80$/, '');
}
}
log('info', ' - %s %s//%s%s', method, protocol, host, path);
if (s._httpMessage) {
var i = getHttpInfo(s);
log('info', ' - %s %s//%s%s', i.method, i.protocol, i.host, i.path);
}
var connectListeners = s.listeners('connect');
if (connectListeners && connectListeners.length) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"README.md"
],
"scripts": {
"test": "(cd tests && node test && node test-eval && node test-promise && node test-promisify && node test-logging && node test-once-flowing && node test-issue-37.js && node test-no-source-map-support && node test-broken-source-map-support && node test-http-client)",
"test": "(cd tests && node test && node test-eval && node test-promise && node test-promisify && node test-logging && node test-once-flowing && node test-issue-37.js && node test-no-source-map-support && node test-broken-source-map-support && node test-http-client && node test-http-info)",
"test-sourcemaps": "(cd tests && coffee --map --compile test-sourcemaps.coffee && node test-sourcemaps.js || exit 0)",
"kitchensink": "(cd tests && node kitchensink)"
},
Expand Down
34 changes: 34 additions & 0 deletions tests/cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
-----BEGIN CERTIFICATE-----
MIIF1zCCA7+gAwIBAgIUJxIeRiLng5hqL8tI3G38rHiyMxMwDQYJKoZIhvcNAQEL
BQAwezELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCVN0YXRlTmFtZTERMA8GA1UEBwwI
Q2l0eU5hbWUxFDASBgNVBAoMC0NvbXBhbnlOYW1lMRswGQYDVQQLDBJDb21wYW55
U2VjdGlvbk5hbWUxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yNDA3MDkwMDA4MDRa
Fw0zNDA3MDcwMDA4MDRaMHsxCzAJBgNVBAYTAlhYMRIwEAYDVQQIDAlTdGF0ZU5h
bWUxETAPBgNVBAcMCENpdHlOYW1lMRQwEgYDVQQKDAtDb21wYW55TmFtZTEbMBkG
A1UECwwSQ29tcGFueVNlY3Rpb25OYW1lMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIi
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDCBDMcVB2PJZliktVfpPINd8lY
AkAgTaOzbsLgyt6tYCBjs3UFkn7frLUO2/AhmrTZr+/o+h5On+kt0QaoHO8EZKxb
WHdvkI+Vgjq2dqJ7b3KgYyuO6ZrzsDP+y9lOVi3wxhi6AZg4pOPABhqQQA6PjdkA
qbvIhF4W6QH71uknZsu/gqwLjb6afOw+ZksAcmkBWJNInW0Bj0QsYmZRQlrgC+sp
cgPXFOlXeWUXdPjPoizHEyewj/CSfioxOsKh335mmvGznS4suFRwwHDQ02cbBb+o
R/8yJOY5biDxmFTZgxo0wPGT/sInQEuuBNaCLIq7KXBlz2uM48y/a3/1GHpVH65s
Bg683TmVp79Btne4idqxkoknhPYKIgYD0PCLc6ZN/NVpYComBZPKYdA2KakmvT30
StEApSwsIxr2XZpwVVGNRbsbfTcsqA0//2eVvLUS0eeIqDEH8fY09DeCmwUE9f5F
5dUInJiaibtjra48fzTenaWVUPM/LNjx5nFWpjoTfLp83g4hFAKtxih+w6yrd3UK
iLufoTZzVD64zPGrw6U16y5LzSkhOJ+2IO2WT4FO5FA7RQzy/RBLMnVtD82mUz2N
anC9cOty+62vtdg1xg3iMoDBhns7mmrau0TRF5sND9UPzZ02JzhiybaPaUMNO1mK
eniiry6/6cV6FVrLNQIDAQABo1MwUTAdBgNVHQ4EFgQUYda9+qsASIqXQ91Oo6PP
6RpIliMwHwYDVR0jBBgwFoAUYda9+qsASIqXQ91Oo6PP6RpIliMwDwYDVR0TAQH/
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAA89edWiq9a8Q5KaVhGAcYlFcE9mH
i36BTeK/vRq2Q6UsceTpmwb/J5kfHykHxW+RLddPeMiG90sM3oGoXaIK/XJJfqxK
6qsnV9HFkylVkIjdKFkZb6TROhMLDN4naYYIWfj4N2SkLycmD+tfpfjtkQTKJalg
e/5HSh7K8Mhhrv854VqajUZzoVfTkdodF1LgHI/T3ehZL1krmKk/eE34f2HVSU1f
sHKok2QYM5R9kOoaWULp5hLtdyHjJHaGNJVLBatlQbhRuoAQ82VYPqTOmN1KHddS
T+qoW6PTrJoKk+xMDAF8/cAhx3STd+ZByZV0i4/v9VoRc929b2bYsSHpZrX3gmBV
NfKC3IWkzIlNlUIyXI3lW1Pgrfjy+fwj+WijHpepJ+XWU7deWyZS4YHZRoSVAE+z
E/tqn96cUvc9ljeC745AV6cAvzohrmT5tEglwirslxUzl1cqsL3taD8jgZLUulWb
oK+X+j54NVBz9j0IpmpXs8d6Vse+vpT2mogMgS6uRKNfrQGwRqNJorEvVfBX2OJX
edXx7Z95PdAvqvC+Z/nEbq6S7DLuxypTir9bYPR+bnAq0Wn2EUrluKv5Acsh1Kk/
C/DF8aG5+TFnOArvlSSa5pjVSk3oOwjjibLm4JjrllsyPDYDREN4Id156QlNyGH7
YcgbB+C+2OIaJLE=
-----END CERTIFICATE-----
15 changes: 0 additions & 15 deletions tests/key-cert.pem

This file was deleted.

67 changes: 52 additions & 15 deletions tests/key.pem
Original file line number Diff line number Diff line change
@@ -1,15 +1,52 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQCy9vEWlz+VyvFu4Oq4XGZzdztoxZmLJGdq8bpmnY91PBrsVULB
ZKRapBVMcS/+1i6BJ6mJxEJr3GeJ7KV6d4Zmi39zrohGR+sXc50VTJYiEAr9Q9U0
6Dl31d3nIotn3JG4ZnSBhwy+qH5oVpYsJCKJuQK8xpxv4KxdDEM8fxpboQIDAQAB
AoGBAIXEouv53aM/cDsqjweCuWlxI8zqdhxU96AuUt/EwaglZxJjoGQhr9+4adsb
d36J5XTQip7ZPbSVqCal5gKmOKRJBwpNyf5vTAo6NNCOh6oBvHiYsEUeYNhiXFlO
y9ZDkZWyuWz3QbdqWt7wl4fjqGJr2Lb37rfkbhyBzlT3l58JAkEA4hHZ/sWoA4t3
bFmeAzBPOKhAy3pcnVYJisL8MMnaxHAzO4Wa9Hfk3S5kRbHUoLX1YGJngh3G7yBR
/Aq8HlQg4wJBAMqokDkjqd9aUWhLTQsU/Dv5EKpE2DHwk07VKb6GZd8DARhVUjQP
jaa3/ufQMsoWpJu2JwurR8FSV+1z/XJXTKsCQQCfL/rVD9GTTW22ehRuImJmfvPB
VFRK5f6qG0sB/+FwWaF51Eacxp/9r2EkQmh7EiXKzQAd+2HNmHCijdyRbqQJAkEA
sAixlmCLKy8J7Z0TJCArZXDYb/5zCRYe7ugsZYnarVevuNJMIFquQXYr3nKz22TF
wVf9HJ7AKoX7SJBrQ8nfFwJBAMH5nmp/gSNFLzAQSwODZofT87xszUIQwD5gb9zb
a6n0Z7smQssefT2FUNpo/v3tNyERBM7pkAgAsGRbmfAjmkQ=
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
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
6N0UYlvzA8JihUQlhSzaOZOW2uqolws=
-----END PRIVATE KEY-----
101 changes: 56 additions & 45 deletions tests/kitchensink.js
Original file line number Diff line number Diff line change
@@ -1,77 +1,88 @@
var wtf = require('../index');

var assert = require('assert');
cp = require('child_process'),
dgram = require('dgram'),
EventEmitter = require('events'),
fs = require('fs'),
http = require('http'),
https = require('https'),
net = require('net'),
readline = require('readline'),
tls = require('tls');

function foo() { };
var wtf = require("../index");

var assert = require("assert");
(cp = require("child_process")),
(dgram = require("dgram")),
(EventEmitter = require("events")),
(fs = require("fs")),
(http = require("http")),
(https = require("https")),
(net = require("net")),
(readline = require("readline")),
(tls = require("tls")),
(path = require("path"));

function foo() {}

function doStuff() {
// timers
setTimeout(foo, 1000);
setInterval(foo, 1000);
setTimeout(function inlineNamed() { }, 1000);
setTimeout(function () { }, 1000);
setTimeout(function inlineNamed() {}, 1000);
setTimeout(function () {}, 1000);

// servers
var httpServer = http.createServer(function httpRequestListener() { }).listen();

var httpsServer = https.createServer({
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./key-cert.pem')
}, function httpsRequestListener() { }).listen();

var tcpServer = net.createServer(function netConnectionListener() { })
.listen(function netListenListener() { });

var tlsServer = tls.createServer({
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./key-cert.pem')
}, function tlsConnectionListener() { })
.listen(function tlsListenListener() { });
var httpServer = http
.createServer(function httpRequestListener() {})
.listen();

var httpsServer = https
.createServer(
{
key: fs.readFileSync(path.join(__dirname, "key.pem")),
cert: fs.readFileSync(path.join(__dirname, "cert.pem")),
},
function httpsRequestListener() {}
)
.listen();

var tcpServer = net
.createServer(function netConnectionListener() {})
.listen(function netListenListener() {});

var tlsServer = tls
.createServer(
{
key: fs.readFileSync(path.join(__dirname, "key.pem")),
cert: fs.readFileSync(path.join(__dirname, "cert.pem")),
},
function tlsConnectionListener() {}
)
.listen(function tlsListenListener() {});

http.createServer();
net.createServer();

// ipc socket
net.createServer(function ipcListener() {
}).listen('/tmp/wtfnode-test');
net.createServer(function ipcListener() {}).listen("/tmp/wtfnode-test");

readline.createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});

wtf.dump();

try {
fs.unlinkSync('/tmp/wtfnode-test');
} catch {
}
fs.unlinkSync("/tmp/wtfnode-test");
} catch {}

console.error('Argv[2..]:', process.argv.slice(2));
console.error("Argv[2..]:", process.argv.slice(2));
process.exit();
}

// child processes
var proc = cp.spawn('cat');
var proc = cp.spawn("cat");

// udp servers
var unboundUdpServer = dgram.createSocket('udp4');
var unboundUdpServer = dgram.createSocket("udp4");

var udpServer = dgram.createSocket('udp4');
udpServer.on('message', function udpMessageListener() { });
udpServer.once('message', function onceHandler() { });
udpServer.on('listening', function () {
var udpServer = dgram.createSocket("udp4");
udpServer.on("message", function udpMessageListener() {});
udpServer.once("message", function onceHandler() {});
udpServer.on("listening", function () {
// open socket
var socket = net.connect(80, 'www.google.com', doStuff);
var socket = net.connect(80, "www.google.com", doStuff);
});

udpServer.bind();
Loading

0 comments on commit 5e28a83

Please sign in to comment.