Skip to content
This repository was archived by the owner on Jul 21, 2023. It is now read-only.

Commit e27747a

Browse files
joeltgachingbrain
andauthored
fix: treat /dns, /dns4, and /dns6 addrs as public (#406)
Updates filtering rules to treat dns addresses as public. Closes #377 Co-authored-by: Alex Potsides <[email protected]>
1 parent e333e47 commit e27747a

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

src/utils.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ export function removePrivateAddresses (peer: PeerInfo): PeerInfo {
1919
multiaddrs: peer.multiaddrs.filter(multiaddr => {
2020
const [[type, addr]] = multiaddr.stringTuples()
2121

22+
// treat /dns, /dns4, and /dns6 addrs as public
23+
if (type === 53 || type === 54 || type === 55) {
24+
// localhost can be a dns address but it's private
25+
if (addr === 'localhost') {
26+
return false
27+
}
28+
29+
return true
30+
}
31+
2232
if (type !== 4 && type !== 6) {
2333
return false
2434
}
@@ -45,6 +55,10 @@ export function removePublicAddresses (peer: PeerInfo): PeerInfo {
4555
multiaddrs: peer.multiaddrs.filter(multiaddr => {
4656
const [[type, addr]] = multiaddr.stringTuples()
4757

58+
if (addr === 'localhost') {
59+
return true
60+
}
61+
4862
if (type !== 4 && type !== 6) {
4963
return false
5064
}
@@ -53,7 +67,14 @@ export function removePublicAddresses (peer: PeerInfo): PeerInfo {
5367
return false
5468
}
5569

56-
return isPrivateIp(addr)
70+
const isPrivate = isPrivateIp(addr)
71+
72+
if (isPrivate == null) {
73+
// not an ip address
74+
return false
75+
}
76+
77+
return isPrivate
5778
})
5879
}
5980
}

test/kad-utils.spec.ts

+35
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { expect } from 'aegir/chai'
44
import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
55
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
66
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
7+
import { multiaddr } from '@multiformats/multiaddr'
78
import * as utils from '../src/utils.js'
89
import { createPeerId, createPeerIds } from './utils/create-peer-id.js'
910

@@ -60,4 +61,38 @@ describe('kad utils', () => {
6061
})
6162
})
6263
})
64+
65+
describe('removePrivateAddresses', () => {
66+
it('filters private multiaddrs', async () => {
67+
const id = await createPeerId()
68+
69+
const multiaddrs = [
70+
multiaddr('/dns4/example.com/tcp/4001'),
71+
multiaddr('/ip4/192.168.0.1/tcp/4001'),
72+
multiaddr('/ip4/1.1.1.1/tcp/4001'),
73+
multiaddr('/dns4/localhost/tcp/4001')
74+
]
75+
76+
const peerInfo = utils.removePrivateAddresses({ id, multiaddrs, protocols: [] })
77+
expect(peerInfo.multiaddrs.map((ma) => ma.toString()))
78+
.to.eql(['/dns4/example.com/tcp/4001', '/ip4/1.1.1.1/tcp/4001'])
79+
})
80+
})
81+
82+
describe('removePublicAddresses', () => {
83+
it('filters public multiaddrs', async () => {
84+
const id = await createPeerId()
85+
86+
const multiaddrs = [
87+
multiaddr('/dns4/example.com/tcp/4001'),
88+
multiaddr('/ip4/192.168.0.1/tcp/4001'),
89+
multiaddr('/ip4/1.1.1.1/tcp/4001'),
90+
multiaddr('/dns4/localhost/tcp/4001')
91+
]
92+
93+
const peerInfo = utils.removePublicAddresses({ id, multiaddrs, protocols: [] })
94+
expect(peerInfo.multiaddrs.map((ma) => ma.toString()))
95+
.to.eql(['/ip4/192.168.0.1/tcp/4001', '/dns4/localhost/tcp/4001'])
96+
})
97+
})
6398
})

0 commit comments

Comments
 (0)