import './style.scss'; import { Netmask } from 'netmask'; import React, { Component } from 'react'; import ReactDOM from 'react-dom'; class IPAddress extends Component { constructor(props) { super(props); this.state = { octets: [10, 88, 135, 144], cidr: 28 }; this.handleChange = this.handleChange.bind(this); this.handleKeyDown = this.handleKeyDown.bind(this); } handleChange(event) { var octets = this.state.octets; var val = +event.target.value.replace(/[^0-9]/g, ''); var octet = event.target.attributes['data-octet'].value; if (octet == 'cidr') { if (val <= 32) { this.setState({ cidr: val }); } } else { if (val <= 255) { octets[+octet] = val; this.setState({ octets: octets }); } } } handleKeyDown(event) { var lowerOctetValue = 0; var higherOctetValue = event.target.dataset.octet === 'cidr' ? 32 : 255; if (event.key === 'ArrowDown' && event.target.value > lowerOctetValue) { event.target.value = +event.target.value - 1; this.handleChange(event); } if (event.key === 'ArrowUp' && event.target.value < higherOctetValue) { event.target.value = +event.target.value + 1; this.handleChange(event); } } getPretty() { return this.state.octets.join('.') + '/' + this.state.cidr; } render() { var details = new Netmask(this.getPretty()); return (
{[...Array(4)].map((x, octet) => ( {octet == '3' ? '/' : '.'} ))}
    {[...Array(4)].map((x, octet) => (
    1. {[...Array(8)].map((x, bit) => (
    2. this.state.cidr - 1 ? 'bit masked' : 'bit unmasked' } > {(this.state.octets[octet] & (1 << (7 - bit))) >> (7 - bit)}
    3. ))}
  1. ))}
{details.mask} Netmask {details.first} First IP {details.last} Last IP {details.size.toLocaleString()} Count
); } } ReactDOM.render(, document.getElementById('app'));