[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样判断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 编辑 ]

确实没有考虑: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.    
复制代码

TOP

纯粹的 find ":330" 是不行的,因为他会匹配 :3301  :3302  :33011 这些端口
必须 findstr ":330\>" 最好是把主机名也带上,因为可能是远程端口

TOP

以前看到的.有兴趣参考一下吧
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键值下的话是很容易被发现的。最后提醒一点,键值末尾的逗号别忘了加上去哦!

TOP

唉,
  1. (netstat /an|find "ESTABLISHED" |find "330")>>330.txt
复制代码
放在注册表下吧,或任务执行

TOP

一般情况下是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 编辑 ]

TOP

回复 7楼 的帖子

请把所有需求更新到顶楼
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

感谢大家的帮助

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

TOP

回复 2楼 的帖子

不太明白,能详细说吗?

TOP

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

对这方面不是很了解
但NETSTAT|FIND "330" 不行么.如果找到则说明某个时刻在使用330端口

TOP

楼主代码放在[code][/code]里面
菜鸟学批,一批一大批~~~~~~

TOP

返回列表