Initial commit
This commit is contained in:
42
parser.mjs
Normal file
42
parser.mjs
Normal file
@@ -0,0 +1,42 @@
|
||||
export function parse_ipv4(value) {
|
||||
const D = parseInt(value.slice(0, 2), 16);
|
||||
const C = parseInt(value.slice(2, 4), 16);
|
||||
const B = parseInt(value.slice(4, 6), 16);
|
||||
const A = parseInt(value.slice(6, 8), 16);
|
||||
return `${A}.${B}.${C}.${D}`;
|
||||
}
|
||||
|
||||
export function parse_socket_state(socket_state) {
|
||||
const ss_lines = socket_state.split('\n').map(line => line.trim());
|
||||
const fields = ss_lines[0].split(/\s+/);
|
||||
const result = [];
|
||||
|
||||
const field_parsers = {
|
||||
'st': (value => parseInt(value, 16)),
|
||||
'local_address': parse_ipv4,
|
||||
'rem_address': parse_ipv4,
|
||||
};
|
||||
|
||||
for (const line of ss_lines.slice(1)) {
|
||||
const values = line.split(/\s+/);
|
||||
const v_iter = values[Symbol.iterator]();
|
||||
const pending = {};
|
||||
for (const column of fields.slice(0, -1)) {
|
||||
pending[column] = v_iter.next().value;
|
||||
}
|
||||
pending[fields.at(-1)] = [...v_iter].join(' ');
|
||||
|
||||
for (const [name, parser] of Object.entries(field_parsers)) {
|
||||
const local_value = pending[name];
|
||||
if (local_value) {
|
||||
pending[name] = parser(local_value);
|
||||
}
|
||||
}
|
||||
|
||||
result.push(pending);
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user