Home

Awesome

toxy-ip Build Status NPM

toxy rule to filter by IP v4/v6 addresses, supporting CIDR, subnets and custom/public/reserved IP ranges.

<table> <tr> <td><b>toxy</b></td><td>+0.3</td> </tr> <tr> <td><b>Name</b></td><td>ip</td> </tr> <tr> <td><b>Poison Phase</b></td><td>incoming / outgoing</td> </tr> </table>

Installation

npm install toxy-ip [--save]

Usage

const toxy = require('toxy')
const ip = require('toxy-ip')

const proxy = toxy()

proxy
  .all('/')
  .poison(toxy.poisons.slowRead({ delay: 1000 }))
  .withRule(ip('192.168.0.0/24'))

proxy
  .all('/download')
  .poison(toxy.poisons.bandwidth({ bps: 1024 }))
  .withRule(ip('10.0.0.0/20'))

proxy
  .all('/intranet')
  .poison(toxy.poisons.bandwidth({ bps: 1024 }))
  .withRule(ip([ '192.168.0.0/24', '172.12.0.0/22', '10.0.0.0/12' ]))

proxy
  .all('/custom-range')
  .poison(toxy.poisons.bandwidth({ bps: 1024 }))
  .withRule(ip({ range: [ '192.168.0.10', '192.168.0.25' ] }))

proxy
  .all('/private')
  .poison(toxy.poisons.bandwidth({ bps: 1024 }))
  .withRule(ip({ privateAddress: true }))

proxy
  .all('/local')
  .poison(toxy.poisons.inject({ code: 500 }))
  .withRule(ip({ loopback: true }))

proxy.listen(3000)

API

const ip = require('toxy-ip')

ip(opts) => function (req, res, next)

Available options:

ip.evalRange(range, ip) => boolean

Evaluates if the IP is inside the given range. range must be an array with two items representing the IP range.

ip.evalNetwork(networks, ip) => boolean

Evaluates if the IP is inside a

ip.evalType(opts, ip) => boolean

Evaluates if the IP is public, private or loopback IP address.

ip.ip

Exposes node-ip module API.

License

MIT - Tomas Aparicio