qqwry-search 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/env node
  2. const program = require('commander');
  3. const fs = require('fs');
  4. const path = require('path');
  5. const qqwry = require('..');
  6. program
  7. .name('search')
  8. .usage('<ip> [ip...]')
  9. .description('搜索IP/IP段')
  10. .option('-r, --range', 'IP段模式查询')
  11. .option('-f, --format <value>', '让IP段模式输出的特定格式 支持 "json" or "csv"', /^(json|csv)$/)
  12. .option('-o, --output <path>', '输出至文件')
  13. .option('-H, --no-header', 'csv 与 json 格式不输出字段名')
  14. .option('-S, --no-speed', 'IP段查询模式时默认会启动speed模式, 添加此选项可关闭该设定')
  15. .on('--help', function() {
  16. console.log('');
  17. console.log('Examples:');
  18. console.log(' $ qqwry 1.0.0.0');
  19. console.log(' $ qqwry 0.0.0.0 1.0.0.0 -rf csv');
  20. })
  21. .parse(process.argv);
  22. if (program.args.length < 1) {
  23. program.help();
  24. } else {
  25. try {
  26. let lib = qqwry();
  27. let { range, format, speed, header, output } = program.opts();
  28. let ips = program.args.slice(0);
  29. let stdout = process.stdout;
  30. let outputFile = false;
  31. if (output) {
  32. outputFile = true;
  33. // let obj = path.parse(output);
  34. let ext = path.parse(output).ext;
  35. format = format ? format : ext == '.json' ? 'json' : ext == '.csv' ? 'csv' : format;
  36. stdout = fs.createWriteStream(output);
  37. stdout.on('error', function(err) {
  38. console.error(err.message || err);
  39. });
  40. stdout.on('close', function() {
  41. console.log('done');
  42. });
  43. }
  44. if (range) {
  45. let { min, max } = Math;
  46. let ns = ips.map(qqwry.ipToInt);
  47. speed && lib.speed();
  48. lib.searchIPScopeStream(min(...ns), max(...ns), { format: format, outHeader: header }).pipe(
  49. stdout
  50. );
  51. } else if (ips.length > 1) {
  52. ips.forEach(ip => {
  53. let v = lib(ip);
  54. console.log(`${v.ip} ${v.Country} ${v.Area}`);
  55. });
  56. } else {
  57. let v = lib(ips[0]);
  58. console.log(`${v.Country} ${v.Area}`);
  59. }
  60. } catch (err) {
  61. console.error(err.message || err);
  62. }
  63. }