npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

lan-address-gen

v1.0.0

Published

generate deterministic lan addresses based on strings (hostnames)

Downloads

8

Readme

lan-address-gen

this tool (and lib) generates lan addresses using deterministic static hashing. it maps input strings to ip addresses within the 10.0.0.0/8 private ip range.

it has no non-native deps to run and only requires jest to run the test suite.

i use this as part of my homelab toolkit for static ip assignment.

how it works

  1. takes an input string (and optional salt)
  2. creates a sha-256 hash of the string
  3. uses the last 24 bits of the hash to generate a number
  4. maps this number to an ip in the 10.x.x.x range

note that if the --ping option is provided it will attempt to verify that it cannot contact the address via ping before returning the address. if it can, it will increment the ip address until it finds an available address and return that.

installation

global install:

npm install -g lan-address-gen

local install:

npm install lan-address-gen

usage

cli

lan-address-gen <input_string> [options]

options:
  --ping        check if the ip is in use and find an available one
  --verbose     show more details
  --help        display help
  --salt <salt> add some spice to your hash

simple:

lan-address-gen proxmox

10.248.60.218

specify a custom salt:

lan-address-gen proxmox --salt test

10.231.140.108

verbose with ping verification:

lan-address-gen proxmox --ping --verbose

Generated IP: 10.248.60.218
Checking for an available IP...
Available IP found: 10.248.60.218
10.248.60.218

module

const { stringToIp, ipToString } = require('lan-address-gen');

const ip = ipToString(stringToIp('proxmox', 'optional salt'));
console.log(ip); // outputs something like 10.123.45.67

you can also set a salt with the LAN_ADDRESS_SALT environment variable if you use the module programmatically.

development

run tests with:

npm test

here's what you should see:

🚀 testBasicFunctionality passed
Collision rate: 0.02%
🚀 testCollisions passed
Distribution range: 108
Min occurrences: 337, Max occurrences: 445
Average occurrences: 390.63
Chi-square value: 281.18
Approximate p-value: 0.1249
🚀 testDistribution passed
🚀 testIncrementIP passed
All tests completed

looks good, right?

notes

this is just for fun. in the real world, think about:

  • hash collisions (they happen)
  • your network's rules
  • security stuff (predictable ips aren't always great)

use responsibly or irresponsibly

license

mit

contrib

prs welcome.