utils.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. var utils = module.exports = {};
  2. utils.aton4 = function(a) {
  3. a = a.split(/\./);
  4. return ((parseInt(a[0], 10)<<24)>>>0) + ((parseInt(a[1], 10)<<16)>>>0) + ((parseInt(a[2], 10)<<8)>>>0) + (parseInt(a[3], 10)>>>0);
  5. };
  6. utils.aton6 = function(a) {
  7. a = a.replace(/"/g, '').split(/:/);
  8. var l = a.length - 1;
  9. var i;
  10. if (a[l] === '') {
  11. a[l] = 0;
  12. }
  13. if (l < 7) {
  14. a.length = 8;
  15. for (i = l; i >= 0 && a[i] !== ''; i--) {
  16. a[7-l+i] = a[i];
  17. }
  18. }
  19. for (i = 0; i < 8; i++) {
  20. if (!a[i]) {
  21. a[i]=0;
  22. } else {
  23. a[i] = parseInt(a[i], 16);
  24. }
  25. }
  26. var r = [];
  27. for (i = 0; i<4; i++) {
  28. r.push(((a[2*i]<<16) + a[2*i+1])>>>0);
  29. }
  30. return r;
  31. };
  32. utils.cmp = function(a, b) {
  33. if (typeof a === 'number' && typeof b === 'number') {
  34. return (a < b ? -1 : (a > b ? 1 : 0));
  35. }
  36. if (a instanceof Array && b instanceof Array) {
  37. return this.cmp6(a, b);
  38. }
  39. return null;
  40. };
  41. utils.cmp6 = function(a, b) {
  42. for (var ii = 0; ii < 2; ii++) {
  43. if (a[ii] < b[ii]) {
  44. return -1;
  45. }
  46. if (a[ii] > b[ii]) {
  47. return 1;
  48. }
  49. }
  50. return 0;
  51. };
  52. utils.isPrivateIP = function(addr) {
  53. addr = addr.toString();
  54. return addr.match(/^10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/) != null ||
  55. addr.match(/^192\.168\.([0-9]{1,3})\.([0-9]{1,3})/) != null ||
  56. addr.match(/^172\.16\.([0-9]{1,3})\.([0-9]{1,3})/) != null ||
  57. addr.match(/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/) != null ||
  58. addr.match(/^169\.254\.([0-9]{1,3})\.([0-9]{1,3})/) != null ||
  59. addr.match(/^fc00:/) != null || addr.match(/^fe80:/) != null;
  60. };
  61. utils.ntoa4 = function(n) {
  62. n = n.toString();
  63. n = '' + (n>>>24&0xff) + '.' + (n>>>16&0xff) + '.' + (n>>>8&0xff) + '.' + (n&0xff);
  64. return n;
  65. };
  66. utils.ntoa6 = function(n) {
  67. var a = "[";
  68. for (var i = 0; i<n.length; i++) {
  69. a += (n[i]>>>16).toString(16) + ':';
  70. a += (n[i]&0xffff).toString(16) + ':';
  71. }
  72. a = a.replace(/:$/, ']').replace(/:0+/g, ':').replace(/::+/, '::');
  73. return a;
  74. };