Board logo

标题: [文本处理] [已解决]批处理文件怎样实现端口扫描结果整理? [打印本页]

作者: wh1234567    时间: 2012-2-8 17:21     标题: [已解决]批处理文件怎样实现端口扫描结果整理?

原代码:
  1. for /f "usebackq tokens=1,2,3*" %%i in (Result.txt) do (
  2. if 1433==%%j (
  3. echo %%i>>1433.txt
  4.   ) else (
  5.    if 80==%%j (
  6.     echo %%i>>80.txt
  7.      ) else (
  8.       if 79==%%j (
  9.        echo %%i>>79.txt
  10.         ) else (
  11.          if 53==%%j (
  12.           echo %%i>>53.txt
  13.            ) else (
  14.             if 21==%%j (
  15.              echo %%i>>21.txt
  16.               ) else (
  17.                if 23==%%j (
  18.                echo %%i>>23.txt
  19.                 ) else (
  20.                  if 135==%%j (
  21.                   echo %%i>>135.txt
  22.                    ) else (
  23.                     if 139==%%j (
  24.                      echo %%i>>139.txt
  25.                       ) else (
  26.                        if 445==%%j (
  27.                         echo %%i>>445.txt
  28.                          ) else (
  29.                           if 2967==%%j (
  30.                            echo %%i>>2967.txt
  31.                             ) else (
  32.                              if 161==%%j (
  33.                               echo %%i>>161.txt
  34.                                ) else (
  35.                                 if 160==%%j (
  36.                                  echo %%i>>160.txt
  37.                                   ) else (
  38.                                    if 9431==%%j (
  39.                                     echo %%i>>9431.txt
  40.                                      ) else (
  41.                                       if 8383==%%j (
  42.                                        echo %%i>>8383.txt
  43.                                         ) else (
  44.                                          if 3306==%%j (
  45.                                           echo %%i>>3306.txt
  46. )
  47. )
  48. )
  49. )
  50. )
  51. )
  52. )
  53. )
  54. )
  55. )
  56. )
  57. )
  58. )
  59. )
  60. )
  61. )
复制代码
如何修改成以扫描到的端口分别以端口号为文件名输出?也就是无需设置具体输出的端口号
作者: ivor    时间: 2012-2-8 17:55

本帖最后由 ivor 于 2012-2-8 19:27 编辑

牛人,有必要嵌套这个程度吗,汗
  1. for /f "usebackq tokens=1,2,3*" %%i in (Result.txt) do (
  2. echo %%i >>%%j.txt
  3. )
复制代码

作者: wh1234567    时间: 2012-2-8 19:14

本帖最后由 wh1234567 于 2012-2-8 20:31 编辑

回复 2# ivor


    老兄,好像不行,能不能将处理时产生的临时文件一并删除?
作者: wh1234567    时间: 2012-2-8 20:36

回复 2# ivor


    能不能将处理时产生的临时文件一并删除?
作者: ivor    时间: 2012-2-8 20:43

回复 4# wh1234567


    不知道你那是什么情况,Result.txt是临时?还是每个%%j.txt是临时文件
作者: wh1234567    时间: 2012-2-8 21:04     标题:

回复 5# ivor


能不能去除重复行,并将处理时产生的临时文件一并删除?
作者: ivor    时间: 2012-2-8 21:46

本帖最后由 ivor 于 2012-2-8 21:48 编辑

回复 6# wh1234567
  1. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  2. if "%%j" NEQ "" if "%%~xj" EQU "" echo %%i >>%%j.txt
  3. )
  4. REM del Result.txt
复制代码
生成的临时文件,已经知道原因,Time文件跟我这个代码应该没有关系吧。那两个类型的临时文件不会产生。但不保证其他的问题发生,因为你的情况我也不完全了解
最后一句注释掉了,前面如果正常则可以去掉注释
作者: wh1234567    时间: 2012-2-8 22:07

本帖最后由 wh1234567 于 2012-2-8 23:35 编辑

回复 7# ivor

第一个问题:
这次正常了,
    输出的文本能不能分别去除重复行,最后在批处理界面上显示多少个端口,分别是哪些端口号?

第二个问题:
另外如果想将原代码精简一下的话,如何设定指定输出的多个端口号?例如:
set duankouhao=1,2,3402,4,5,26,7,8,9
代码该如何修改?
作者: ivor    时间: 2012-2-8 23:13

本帖最后由 ivor 于 2012-2-9 14:00 编辑

回复 8# wh1234567
  1. @echo off
  2. set duankouhao=1,2,3402,4,5,26,7,8,9
  3. for %%a in (%duankouhao%) do (
  4. set %%a=ivor
  5. )
  6. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  7.         if defined %%j if not defined %%i if "%%j" NEQ "" if "%%~xj" EQU "" (
  8. set %%i=.
  9. set /a ivor%%j+=1
  10. echo %%i)>>%%j.txt
  11. )
  12. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  13. set var=%%a
  14. call echo %%var:~4%% 端口记录了总共%%b个
  15. )
  16. pause
  17. REM del Result.txt
复制代码
要自己多学习,不能老问别人哦。楼主挖的一手好坑,你还有要求吗?
作者: wh1234567    时间: 2012-2-8 23:47

本帖最后由 wh1234567 于 2012-2-9 06:05 编辑

回复 9# ivor


    这个和第一个问题以及第二个问题都不太相符,并且不能删除临时文件以及分别去除输出文本里的重复ip;端口号总数其实也就是以端口号为文件名输出的文本个数;在批处理界面上显示每个端口号分别是多少个ip即可。
第一个问题以及第二个问题可能得分别2个批处理
作者: ivor    时间: 2012-2-9 00:03

本帖最后由 ivor 于 2012-2-9 00:07 编辑

1.功能去除重复IP   2.根据duankouhao变量控制输出端口结果  3.最后显示指定端口总数量

代码精简啊,难,你的功能越要求越复杂。为了测试这个批处理的运行速度,我专门建了一个2W行的不重复IP的文件,搞得我电脑蓝屏,可能是溢出了
问题签名:
  问题事件名称:        BlueScreen
  OS 版本:        6.1.7601.2.1.0.256.1
  区域设置 ID:        2052
哎 ,O__O"…     速度倒是还可以啊,千万别执行上W行的
作者: wh1234567    时间: 2012-2-9 11:54

回复 11# ivor

非常感谢您的帮忙,9楼的代码能不能修正一下,有些小错误和不能删除临时文件,增加一个端口共计多少个也就是以端口号为文件名输出的文本个数。

另外 set duankouhao=1,2,3402,4,5,26,7,8,9 是属于第二个问题也就是指定输出多个端口号为文件名的文本,第一个问题不需要这个代码
作者: ivor    时间: 2012-2-9 14:16

本帖最后由 ivor 于 2012-2-9 14:18 编辑

回复 12# wh1234567
  1. @echo off
  2. set duankouhao=8080,3389,80,23,20
  3. for %%a in (%duankouhao%) do (
  4.         set prefix%%a=.
  5. )
  6. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  7.         if defined prefix%%j if "%%j" NEQ "" if "%%~xj" EQU "" (
  8.                
  9.                 set /a ivor%%j+=1
  10.                 echo %%i)>>%%j.txt
  11. )
  12. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  13.         set var=%%a & set /a count+=1
  14.         call echo %%var:~4%% 端口记录了总共 %%b 个
  15. )
  16. echo 总计有 %count%个端口号
  17. pause
复制代码
去除重复的功能以去掉,因为检查IP重复是不正确的,可能一个IP会开放多个端口,加的功能越多程序会越慢,如果真要监测重复的IPand端口,可以验证每个%%i(IP)%%j(端口),在这我就不加了。
修改了会可能会生成TIME文件的代码,你不发出来结果,我还真不相信,程序会生成TIME文件⊙﹏⊙b汗
作者: wh1234567    时间: 2012-2-9 14:38

本帖最后由 wh1234567 于 2012-2-9 15:26 编辑

回复 13# ivor
大有进步

    环境变量 ivor 没有定义
总计有 个端口号
请按任意键继续. . .

21-26这种格式能不能支持也就是21到26?既支持21,22,23,26  也支持21-26这种格式

并且要求分别以端口号命名输出,
作者: ivor    时间: 2012-2-9 15:16

你的问题总是层出不穷,我应付不过来了,你还是想好了,总结一下再发新帖吧,然后把你的样本记得上传。


ivor 没定义,是因为result.txt没有数据
作者: wh1234567    时间: 2012-2-9 15:23

本帖最后由 wh1234567 于 2012-2-9 18:00 编辑

回复 15# ivor


    可能是set duankouhao= 这里的原因,如果set duankouhao= 21,22,23,25,26,正常显示,如果是set duankouhao= 21-26这样就不支持了,修正都支持就完美了,
输出时如果相应的端口号文本里没有本次ip就输出,有的话就无需再次重复输出,这样就不会出现每个相应的文本里有重复ip,可能你没有理解我说的去除重复ip的意思。在扫描的时候相同ip加相同端口会出现很多次,所以记录的是个数而不是次数
例如24.txt文本里有多个重复的,就需要去除重复。所以最好的办法是在输出时自动判断是否有重复
在这里小弟很感激
作者: wh1234567    时间: 2012-2-9 18:38

回复 15# ivor


   能不能实现 set duankouhao=既支持21,22,23,26  也支持21-26这种格式
作者: ivor    时间: 2012-2-9 19:21

本帖最后由 ivor 于 2012-2-9 19:25 编辑

回复 17# wh1234567
  1. @echo off
  2. set /p duankouhao=请输入端口号
  3. echo %duankouhao% | find "-" && goto :Proc
  4. for %%a in (%duankouhao%) do (
  5.         set prefix%%a=.
  6. )
  7. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  8.         if not defined %%i%%j if defined prefix%%j if "%%j" NEQ "" if "%%~xj" EQU "" (
  9. set %%i%%j=.
  10.                 set /a ivor%%j+=1
  11.                 echo %%i)>>%%j.txt
  12. )
  13. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  14.         set var=%%a & set /a count+=1
  15.         call echo %%var:~4%% 端口记录了总共 %%b 个
  16. )
  17. echo 总计有 %count%个端口号
  18. pause & exit
  19. :Proc
  20. for /f "tokens=1,2 delims=-" %%a in ("%duankouhao%") do (
  21. set min=%%a & set max=%%b
  22. )
  23. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  24.         if not defined %%i%%j if %%j LEQ %max% if %%j GEQ %min% if "%%j" NEQ "" if "%%~xj" EQU "" (
  25.                 set %%i%%j=.
  26.                 set /a ivor%%j+=1
  27.                 echo %%i)>>%%j.txt
  28. )
  29. for /f "tokens=1,2delims==" %%a in ('set ivor') do (
  30.         set var=%%a & set /a count+=1
  31.         call echo %%var:~4%% 端口记录了总共 %%b 个
  32. )
  33. echo 总计有 %count%个端口号
  34. pause & exit
复制代码
支持范围选择,支持用(为空格、逗号、跳格或等号)分开端口号,支持过滤相同端口号重复IP
新功能不再提供,程序如果有BUG,可以反馈
作者: wh1234567    时间: 2012-2-10 03:40

本帖最后由 wh1234567 于 2012-2-10 03:42 编辑

回复 7# ivor
  1. for /f "tokens=1,2,3*" %%i in (Result.txt) do (
  2.         if "%%j" NEQ "" if "%%~xj" EQU "" echo %%i >>%%j.txt
  3. )
  4. REM del Result.txt
复制代码
这个无需预设端口号的批处理也不错,只是需要增加在批处理界面上显示多少个端口,分别是哪些端口号的话就完美了,修正出现Time,这是第一个问题的批处理,还得劳驾修改一下,呵呵
作者: pdanniel66    时间: 2012-2-10 07:01

回复 17# wh1234567


    Result.txt 事如何產生的 ?
    可否提供原文件 (若檔案太大,建議提供 100-200 行)




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2