UNPKG

@achingbrain/nat-port-mapper

Version:
96 lines 2.7 kB
/** * @packageDocumentation * * Enable NAT traversal by mapping public ports to ports on your computer using * either [UPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) or * [NAT-PMP](https://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol). * * @example UPnP NAT * * ```TypeScript * import { upnpNat } from '@achingbrain/nat-port-mapper' * * const client = upnpNat() * * for await (const gateway of client.findGateways({ signal: AbortSignal.timeout(10000) })) { * // Map public port 1000 to private port 1000 with TCP * await gateway.map(1000, '192.168.1.123', { * protocol: 'tcp' * }) * * // Map port 3000 to any available host name * for await (const mapping of gateway.mapAll(3000, { * protocol: 'udp' * })) { * console.info(`mapped ${mapping.internalHost}:${mapping.internalPort} to ${mapping.externalHost}:${mapping.externalPort}`) * } * * // Unmap previously mapped private port 1000 * await gateway.unmap(1000) * * // Get external IP * const externalIp = await gateway.externalIp() * * console.log('External IP:', externalIp) * * // Unmap all mapped ports and cancel any in-flight network operations * await gateway.stop() * } * ``` * * @example NAT-PMP * * ```TypeScript * import { pmpNat } from '@achingbrain/nat-port-mapper' * import { gateway4sync } from 'default-gateway' * * const gateway = pmpNat(gateway4sync().gateway) * * // Map public port 1000 to private port 1000 with TCP * await gateway.map(1000, '192.168.1.123', { * protocol: 'tcp' * }) * * // Map public port 2000 to private port 3000 with UDP * await gateway.map(3000, '192.168.1.123', { * externalPort: 2000, * protocol: 'udp' * }) * * // Unmap previously mapped private port 1000 * await gateway.unmap(1000) * * // Get external IP * const externalIp = await gateway.externalIp() * * console.log('External IP:', externalIp) * * // Unmap all mapped ports and cancel any in-flight network operations * await gateway.stop() * ``` * * ## Credits * * Based on [alxhotel/nat-api](https://github.com/alxhotel/nat-api) * * ## Additional Information * * - <http://miniupnp.free.fr/nat-pmp.html> * - <http://wikipedia.org/wiki/NAT_Port_Mapping_Protocol> * - <http://tools.ietf.org/html/draft-cheshire-nat-pmp-03> */ import { PMPGateway } from './pmp/gateway.js'; import { UPnPClient } from './upnp/index.js'; /** * Create a UPnP port mapper */ export function upnpNat(options = {}) { return new UPnPClient(options); } /** * Create a NAT-PMP port mapper */ export function pmpNat(ipAddress, options = {}) { return new PMPGateway(ipAddress, options); } //# sourceMappingURL=index.js.map