Board logo

标题: [文本处理] 批处理怎样判断330端口是否在运行? [打印本页]

作者: aishangwangluo    时间: 2011-1-13 11:50     标题: 批处理怎样判断330端口是否在运行?

我要做一个批处理文件,用来判断330端口是否在运行的语句。
我的想法是:
先设置一个变量值为i=0
telnet 192.168.1.200 330
1.进去后,改写i=1,然后退出,说明端口运行正常。自动返回到dos下。
2.进去不了,i的值不变,自动返回到dos下。
检查变量i的值,
1.如果i=1,结束批处理文件。
2.如果i=0,执行该程序重启的命令。(重启命令:E:\server\Server.exe /startup   此命令直接在cmd中手动执行是生效的。)
我的目的是:
      该程序使用了330端口并开放330端口,而突然之间该程序出现问题,原本开放的端口330自动关闭,就是检测一下该程序的330端口是否关闭了,如果关闭了,则自动重启此程序!

我需要做的:
     我用telnet命令来做一个检查,目前我写的程序达不到效果,所以请各位高手帮忙!

下面是我写的
bat:
  1. @echo off
  2. echo 正在检查服务,请稍等......
  3. set i=0
  4. start telnet
  5. cscript  telnet_tmp.vbs
  6. if %i% == 1 goto :close
  7. if %i% == 0 goto :open
  8. goto :exit
  9. :open
  10. E:\server\Server.exe /startup
  11. goto :exit
  12. :close
  13. goto :exit
  14. :exit
  15. echo 完成!
  16. echo. & pause
复制代码
telnet_tmp.vbs
  1. set sh=WScript.CreateObject("WScript.Shell")
  2. WScript.Sleep 300
  3. sh.SendKeys "open 192.168.1.200 330"
  4. WScript.Sleep 300
  5. sh.SendKeys "{ENTER}"
  6. WScript.Sleep 600
  7. sh.SendKeys "{ENTER}"
  8. WScript.Sleep 300
  9. sh.SendKeys "quit {ENTER}"
  10. WScript.Sleep 300
  11. sh.SendKeys "{ENTER}"
  12. WScript.Sleep 300
  13. sh.SendKeys "quit {ENTER}"
  14. WScript.Sleep 600
  15. set i=1
复制代码
现在的问题是:
1.telnet无法返回i的值,也就无法做到后面的判断
2.telnet退出后无法返回cmd界面,运行后面的代码

请高手指教!

周末不上班,没有及时来查看,感谢大家帮助,对大家的回答没有及时回复感到有点不太尊重,真的很抱歉!
周末在家上不了网,研究了一下,发现不用这么麻烦,具体如下:
  1. netstat -an |find "330" >>netstat.txt
  2. find "0.0.0.0:330" netstat.txt
  3. if %errorlevel% ==1 ( goto :open) else  (goto :close )
  4. :open
  5. E:\server\Server.exe /startup
  6. goto :exit
  7. :close
  8. goto :exit
  9. :exit
  10. echo 完成!
  11. echo. & pause
复制代码
原有问题解决了,现在问题完成一半了,又有新问题出现了:
在执行server /startup 时,总是跳出完成的确认提示框!我用此批处理10分钟运行一次,一个星期关机一次,那不是一天最多可以达到100多次的确认框停留在电脑上吗?有高手能帮我解决一下吗?

[ 本帖最后由 aishangwangluo 于 2011-1-17 09:01 编辑 ]
作者: yhcbird    时间: 2011-1-13 11:55

楼主代码放在[code][/code]里面
作者: wc726842270    时间: 2011-1-13 11:55

对这方面不是很了解
但NETSTAT|FIND "330" 不行么.如果找到则说明某个时刻在使用330端口
作者: hanyeguxing    时间: 2011-1-13 13:15

http://bbs.bathome.net/thread-10467-1-1.html
作者: aishangwangluo    时间: 2011-1-14 11:37     标题: 回复 2楼 的帖子

不太明白,能详细说吗?
作者: aishangwangluo    时间: 2011-1-14 11:43     标题: 感谢大家的帮助

我的目的是:
该程序在使用330端口并开放330端口,而突然之间该程序出现问题,原本开放的端口330自动关闭,
我需要做的就是检测一下该程序的330端口是否关闭了,如果关闭了,则自动重启此程序!
而我用telnet命令来做一个检查,目前我写的程序达不到效果,所以请各位高手帮忙!
作者: Batcher    时间: 2011-1-14 12:21     标题: 回复 7楼 的帖子

请把所有需求更新到顶楼
作者: caruko    时间: 2011-1-14 16:12

一般情况下是127.0.0.1,也有可能是192.168.0.10这类IP,主要看程序是怎么写的。
还可以用netstat 带参数来严格限定,比如-o 来检查是那个程序开启的端口,-p限定TCP协议等

  1. set /a i=0
  2. for /f "tokens=4" %%i in ('netstat -a -n^|findstr "\<127.0.0.1:330\>" ') do if "%%i"=="LISTENING" set /a i=1
  3. if %i% == 1 goto :close
  4. if %i% == 0 goto :open
复制代码

[ 本帖最后由 caruko 于 2011-1-14 16:21 编辑 ]
作者: wc726842270    时间: 2011-1-15 00:06

唉,
  1. (netstat /an|find "ESTABLISHED" |find "330")>>330.txt
复制代码
放在注册表下吧,或任务执行
作者: wc726842270    时间: 2011-1-15 00:12

以前看到的.有兴趣参考一下吧
2.编写批处理文件
  打开记事本,然后输入如下命令:
  @echo off
  date /t >>d:\3389.txt
  attrib +s +h d:\3389.bat
  attrib +s +h d:\3389.txt
  time /t >>d:\3389.txt
  netstat -an |find "ESTABLISHED" |find ":3389" >>d:\3389.txt
然后把文件保存为d:\3389.bat,这里我解释一下命令的意思,date和time是用于获取系统时间的,这样可以让你知道黑客在某天的某个时刻入侵。“attrib +s +h d:\3389.bat”和“attrib +s +h d:\3389.txt”这两个命令是用来隐藏3389.bat和3389.txt这两个文件的,因为在登录时,由于会启动d:\3389.bat这个文件,所以会有一个CMD窗口一闪而过,有经验的黑客应该能判断出这窗口是记录用的,所以他可能会到处找这个记录文件,用了以上两个命令后,即使他用系统自带的搜索功能以3389为关键字进行搜索,也找不到上面3389.bat和3389.txt这两个文件,哈哈!很棒吧!至于“netstat -an |find "ESTABLISHED" |find ":3389" >>d:\3389.txt”这个命令则是记录通过终端的连结状况的,明白了吧!
接下来我们要让系统启动时自动运行d:\3389.bat这文件,我用的方法是修改注册表,依次展开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon,找到“Userinit”这个键值,这个键值默认为c:\WINNT\system32\userinit.exe,不知你注意到没有,在最后有一个逗号,我们要利用的就是这逗号,比如我上面写的3389.bat文件路径为d:\3389.bat,那么我只要在逗号后面加上“d:\3389.bat”即可,这样启动时3389.bat这文件就会运行,选这个键值的原因是因为它隐蔽,如果是加在Run键值下的话是很容易被发现的。最后提醒一点,键值末尾的逗号别忘了加上去哦!
作者: caruko    时间: 2011-1-15 12:22

纯粹的 find ":330" 是不行的,因为他会匹配 :3301  :3302  :33011 这些端口
必须 findstr ":330\>" 最好是把主机名也带上,因为可能是远程端口
作者: wc726842270    时间: 2011-1-17 10:36

确实没有考虑:3301  :3302  :33011 这些端口
试一下这个P吧,
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=4 tokens=1-6 delims=: " %%a in ('netstat /an') do (set a=%%c&set b=%%f
  3.   if "!a!" equ "330" (call :1))
  4. pause
  5. :1
  6. if "%b%" equ "ESTABLISHED" (echo 330正在运行
  7.                             echo 运行日期&echo.%date%
  8.                             echo 运行时间&echo.%time%)>>1.txt
  9.    
复制代码





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