ipcalc 688 B

1234567891011121314151617181920212223242526272829303132
  1. #!/bin/sh
  2. awk -f /usr/lib/common.awk -f - $* <<EOF
  3. BEGIN {
  4. ipaddr=ip2int(ARGV[1])
  5. netmask=ip2int(ARGV[2])
  6. network=and(ipaddr,netmask)
  7. broadcast=or(network,compl(netmask))
  8. start=or(network,and(ip2int(ARGV[3]),compl(netmask)))
  9. limit=network+1
  10. if (start<limit) start=limit
  11. end=start+ARGV[4]
  12. limit=or(network,compl(netmask))-1
  13. if (end>limit) end=limit
  14. print "IP="int2ip(ipaddr)
  15. print "NETMASK="int2ip(netmask)
  16. print "BROADCAST="int2ip(broadcast)
  17. print "NETWORK="int2ip(network)
  18. print "PREFIX="32-bitcount(compl(netmask))
  19. # range calculations:
  20. # ipcalc <ip> <netmask> <start> <num>
  21. if (ARGC > 3) {
  22. print "START="int2ip(start)
  23. print "END="int2ip(end-1)
  24. }
  25. }
  26. EOF