Skip to content

Commit 1b24da2

Browse files
author
Marcus Pousette
committed
fix: add ipv6Check regex for private address
1 parent 73f2b6b commit 1b24da2

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

packages/utils/src/private-ip.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ function ipv4Check (ipAddr: string): boolean {
4141
function ipv6Check (ipAddr: string): boolean {
4242
return /^::$/.test(ipAddr) ||
4343
/^::1$/.test(ipAddr) ||
44+
/^::f{4}:(0?a[0-9a-fA-F]{2}):([0-9a-fA-F]{1,4})$/.test(ipAddr) || // 10.0.0.0/8
45+
/^::f{4}:(7f[0-9a-fA-F]{2}):([0-9a-fA-F]{1,4})$/.test(ipAddr) || // 127.0.0.0/8
46+
/^::f{4}:(a9fe):([0-9a-fA-F]{1,4})$/.test(ipAddr) || // 169.254.0.0/16
47+
/^::f{4}:(ac1[0-9a-fA-F]{1}|ac2[0-9a-fA-F]{1}|ac3[0-1a-fA-F]{1}):([0-9a-fA-F]{1,4})$/.test(ipAddr) || // 172.16.0.0/12
48+
/^::f{4}:(c0a8):([0-9a-fA-F]{1,4})$/.test(ipAddr) || // 192.168.0.0/16
4449
/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(ipAddr) ||
4550
/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(ipAddr) ||
4651
/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(ipAddr) ||

packages/utils/test/multiaddr/is-private.spec.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,28 @@ describe('multiaddr isPrivate', () => {
3030
it('identifies private ip6 multiaddrs', () => {
3131
[
3232
multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:7095/tcp/1000'),
33-
multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:1/tcp/1000')
33+
multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:1/tcp/1000'),
34+
multiaddr('/ip6/::ffff:0a00:0001/tcp/1000'), // 10.0.0.1
35+
multiaddr('/ip6/::ffff:ac10:0001/tcp/1000'), // 172.16.0.1
36+
multiaddr('/ip6/::ffff:c0a8:0001/tcp/1000'), // 192.168.0.1
37+
multiaddr('/ip6/::ffff:7f00:0001/tcp/1000') // 127.0.0.1
3438
].forEach(ma => {
35-
expect(isPrivate(ma)).to.eql(true)
39+
try {
40+
expect(isPrivate(ma)).to.eql(true)
41+
} catch (error) {
42+
throw new Error(`Failed for ${ma.toString()}`)
43+
}
3644
})
3745
})
3846

3947
it('identifies public ip6 multiaddrs', () => {
4048
[
4149
multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
42-
multiaddr('/ip6/2000:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000')
50+
multiaddr('/ip6/2000:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
51+
multiaddr('/ip6/::ffff:6500:1a5a/tcp/1000'), // 101.0.26.90
52+
multiaddr('/ip6/::ffff:2801:1409/tcp/1000'), // 40.1.20.9
53+
multiaddr('/ip6/::ffff:5ca8:0001/tcp/1000'), // 92.168.0.1 (not a private range)
54+
multiaddr('/ip6/::ffff:0200:0010/tcp/1000') // 2.16.0.1 (not a private range)
4355
].forEach(ma => {
4456
expect(isPrivate(ma)).to.eql(false)
4557
})

0 commit comments

Comments
 (0)