Skip to content

Commit

Permalink
Merge pull request #8787 from liranmauda/liran-remove-node-ip-2
Browse files Browse the repository at this point in the history
Adding ading functions to `net_utils.js` | nope-ip removal - Phase 4
  • Loading branch information
liranmauda authored Feb 27, 2025
2 parents e2773ba + c8e4856 commit 6d53494
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 3 deletions.
49 changes: 49 additions & 0 deletions src/test/unit_tests/jest_tests/test_net_utils.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,53 @@ describe('IP Utils', () => {
expect(() => net_utils.ip_toBuffer('invalid_ip', Buffer.alloc(16), 0)).toThrow('Invalid IP address: invalid_ip');
expect(() => net_utils.ip_toBuffer('10.0.0.1')).toThrow('Offset is required');
});

it('normalize_family should return the proper family', () => {
expect(net_utils.normalize_family(4)).toBe('ipv4');
expect(net_utils.normalize_family(6)).toBe('ipv6');
expect(net_utils.normalize_family('IPv4')).toBe('ipv4');
expect(net_utils.normalize_family('IPv6')).toBe('ipv6');
expect(net_utils.normalize_family('customFamily')).toBe('customfamily');
expect(net_utils.normalize_family(undefined)).toBe('ipv4');
expect(net_utils.normalize_family(null)).toBe('ipv4');
});

it('should return true for loopback addresses and false if not', () => {
expect(net_utils.is_loopback('127.0.0.1')).toBe(true);
expect(net_utils.is_loopback('127.255.255.255')).toBe(true);
expect(net_utils.is_loopback('::1')).toBe(true);
expect(net_utils.is_loopback('192.168.1.1')).toBe(false);
expect(net_utils.is_loopback('10.0.0.1')).toBe(false);
expect(net_utils.is_loopback('8.8.8.8')).toBe(false);
expect(net_utils.is_loopback('2001:db8::1')).toBe(false);
});

it('should return true for localhost and loopback addresses and false if not', () => {
expect(net_utils.is_localhost('127.0.0.1')).toBe(true);
expect(net_utils.is_localhost('::1')).toBe(true);
expect(net_utils.is_localhost('localhost')).toBe(true);
expect(net_utils.is_localhost('192.168.1.1')).toBe(false);
expect(net_utils.is_localhost('10.0.0.1')).toBe(false);
expect(net_utils.is_localhost('google.com')).toBe(false);
});

it('should return true for private IPv4 addresses or false to any other address', () => {
expect(net_utils.is_private('10.0.0.1')).toBe(true);
expect(net_utils.is_private('172.16.0.1')).toBe(true);
expect(net_utils.is_private('192.168.1.1')).toBe(true);
expect(net_utils.is_private('8.8.8.8')).toBe(false);
expect(net_utils.is_private('1.1.1.1')).toBe(false);
expect(net_utils.is_private('2001:db8::1')).toBe(false);
});


it('should return true for public addresses or false for private addresses', () => {
expect(net_utils.is_public('10.0.0.1')).toBe(false);
expect(net_utils.is_public('172.16.0.1')).toBe(false);
expect(net_utils.is_public('192.168.1.1')).toBe(false);
expect(net_utils.is_public('8.8.8.8')).toBe(true);
expect(net_utils.is_public('1.1.1.1')).toBe(true);
expect(net_utils.is_public('2001:db8::1')).toBe(true);
});

});
49 changes: 46 additions & 3 deletions src/util/net_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,58 @@ function is_cidr(ip) {
return true;
}

/**
* normalize_family will normalize the family
* @param {string|number} family
* @returns {string}
*/
function normalize_family(family) {
if (family === 4) return 'ipv4';
if (family === 6) return 'ipv6';
return family ? String(family).toLowerCase() : 'ipv4';
}

/**
* is_loopback will check if the address is a loop back address
* any address that starts with 127. or is ::1 is considered loopback
* @param {string} address
* @returns {boolean}
*/
function is_loopback(address) {
return address.startsWith('127.') || address === '::1';
}

/**
* is_localhost will check if the address is localhost
* @param {string} address
* @returns {boolean}
*/
function is_localhost(address) {
return is_loopback(address) || address.toLowerCase() === 'localhost';
}

/**
* is_private will check if the address is private
* @param {string} address
* @returns {boolean}
*/
function is_private(address) {
return (
address === '127.0.0.1' ||
address === '::1' ||
address.toLowerCase() === 'localhost'
address.startsWith('10.') ||
address.startsWith('172.') ||
address.startsWith('192.168.')
);
}

/**
* is_public will check if the address is public
* @param {string} address
* @returns {boolean}
*/
function is_public(address) {
return !is_private(address);
}

function unwrap_ipv6(ip) {
if (net.isIPv6(ip)) {
if (ip.startsWith('::ffff:')) return ip.slice('::ffff:'.length);
Expand Down Expand Up @@ -201,6 +240,10 @@ exports.ip_to_long = ip_to_long;
exports.find_ifc_containing_address = find_ifc_containing_address;

/// EXPORTS FOR TESTING:
exports.normalize_family = normalize_family;
exports.is_loopback = is_loopback;
exports.is_private = is_private;
exports.is_public = is_public;
exports.ipv4_to_buffer = ipv4_to_buffer;
exports.ipv6_to_buffer = ipv6_to_buffer;
exports.expend_ipv6 = expend_ipv6;

0 comments on commit 6d53494

Please sign in to comment.